Что означает буферизация. Термин: Буферизация потоков данных

Наименование параметра Значение
Тема статьи: Буферизация
Рубрика (тематическая категория) Компьютеры

Особенности передачи информации с помощью линий связи

Однонаправленные и двунаправленные связи между процессами

При прямой адресации только одно данное средство связи должна быть задействовано для обмена данными между двумя процессами, и только эти два процесса бывают ассоциированы с ним. При непрямой адресации может существовать более двух процессов, использующих один и тот же объект для данных, и более одного объекта должна быть использовано двумя процессами.

Выделяют два вида связи :

Однонаправленную связь;

Двунаправленную связь.

При однонаправленной связью каждый процесс, ассоциированный с ней, может использовать средство связи либо только для приема информации, либо только для ее передачи. При двунаправленной связи каждый процесс, участвующий в общении, может использовать связь и для приема, и для передачи данных. В коммуникационных системах принято называть однонаправленную связь симплексной , двунаправленную связь с поочередной передачей информации в разных направлениях – полудуплексной , а двунаправленную связь с возможностью одновременной передачи информации в разных направлениях – дуплексной . Прямая и непрямая адресация не имеют непосредственного отношения к направленности связи.

Передача информации между процессами посредством линий связи является достаточно безопасной по сравнению с использованием разделяемой памяти и достаточно информативной по сравнению с сигнальными средствами коммуникации. Вместе с тем, разделяемая память не должна быть использована для связи процессов, функционирующих на различных КС. Возможно, именно в связи с этим каналы связи получили наибольшее распространение среди других средств коммуникации процессов. С логической реализацией канальных средств коммуникации связаны буферизация, поток ввода/вывода и сообщения.

Линия связи сохраняет информацию, переданную одним процессом, до ее получения другим процессом в буфере. Выделим три варианта объёмов буфера канала связи :

1. Буфер нулевой емкости или отсутствует. Никакая информация не может сохраняться на линии связи. В этом случае процесс, посылающий информацию, должен ожидать, пока процесс, принимающий информацию, не соблаговолит ее получить, прежде чем заниматься своими дальнейшими делами.

2. Буфер ограниченной емкости. Размер буфера равен n , то есть линия связи не может хранить до момента получения более чем n единиц информации. В случае если в момент передачи данных в буфере хватает места͵ то передающий процесс не должен ничего ожидать. Информация просто копируется в буфер.
Размещено на реф.рф
В случае если же в момент передачи данных буфер заполнен или места не достаточно, то крайне важно задержать работу процесса отправителя до появления в буфере свободного пространства.

3. Буфер неограниченной емкости. Теоретически это возможно, но практически вряд ли реализуемо. Процесс, посылающий информацию, никогда не ждет окончания ее передачи и приема другим процессом.

При использовании канального средства связи с непрямой адресацией под емкостью буфера обычно принято понимать количество информации, ĸᴏᴛᴏᴩᴏᴇ должна быть помещено в промежуточный объект для хранения данных.

2) Поток ввода/вывода и сообщения

Существует две модели передачи данных по каналам связи :

Поток ввода-вывода;

Сообщения.

В модели сообщений процессы налагают на передаваемые данные некоторую структуру. Весь поток информации они разделяют на отдельные сообщения, вводя между данными границы сообщений. Вместе с тем, к передаваемой информации должна быть присоединœены указания на то, кем конкретное сообщение было послано и для кого оно предназначено. Все сообщения могут иметь одинаковый фиксированный размер или бывают переменной длины. В КС используются разнообразные средства связи для передачи сообщений: очереди сообщений, sockets (сокеты) и т.д.

И потоковые линии связи, и каналы сообщений могут иметь или не иметь буфер.
Размещено на реф.рф
Емкость буфера для потоков данных измеряется ее в байтах, а емкость буфера для сообщений измеряется в сообщениях.

Буферизация - понятие и виды. Классификация и особенности категории "Буферизация" 2017, 2018.

Каждое периферийное устройство имеет свою специфику характера обмена данными, определяемую природой его внешней (по отношению к компьютеру) стороны. По характеру обмена устройства можно разделить на три основных типа.

блочные устройства, например, дисковые накопители. Обмен с ними воз­можен только блоками фиксированного размера - кластерами. При обмене с физическим диском нельзя останавливаться посреди передачи блока.

поточные устройства, примерами которых являются принтеры и сканеры Принтеру посылают поток данных, которые он по мере своих электромеханических способностей выводит в виде изображения на бумагу. Поток можно приостановить в любой момент, а затем продолжить передачу безо всяких побочных эффектов.

регистро-ориентированные устройства, которые, как правило, не являются источниками или приемниками большого объема данных. Программам обычно требуется знать текущее состояние данных устройств или (и) формировать текущие управляющие воздействия. Регистро-ориентированными, как правило, являются различные устройства сопряжения с технологическим оборудованием, компьютеризированные измерительные комплексы, джойстик (программа в определенные моменты опрашивает текущее состояние кнопок и координатных датчиков) и т. п.

Во многих устройствах присутствует смесь этих основных типов, так, даже принтер имеет и регистро-ориентированную часть - кроме приема потока oн передает сигналы текущего состояния (ошибка, конец бумаги).

Весьма важной является задача буферизации данных . Пропускная способность внут­ренних компонентов современной вычислительной системы - процессора и оперативной памяти - чрезвычайно высока в обоих направлениях (и на прием, и на передачу), а пропускная способность подавляющего большинства внешних устройств на несколько порядков ниже и варьируется в весьма широких преде­лах. Данные, передаваемые из оперативной памяти на внешнее устройство, по­ступают с очень высокой скоростью, как правило, в виде пакета. Эти данные целесообразно сохранить во внутреннем буфере контроллера интерфейса и в дальнейшем соответствующими порциями выдать во внешнее устройство. При передаче в обратном направлении данные от внешнего устройства опять-таки целесообразно накопить в буфере контроллера интерфейса, чтобы не «дергать» опе­ративную память "по мелочам". Когда накоплен значительный объем данных, они все одним пакетом могут быть быстро переданы в оперативную память. Таким образом, для обеспечения минимального времени обладания интерфейсом (а значит и ресурсами оперативной памяти) контроллер соответствующего интерфейса должен работать с использованием буферов.

Буфер представляет собой набор внутренних ячеек оперативной памяти с определенными правилами доступа как со стороны контроллера ПУ, так и со стороны «центра». Размер буфера и дисциплина его обслуживание выбираются, исходя из технических (скорость и объем информации, допустимые задержки) и экономических (цена) соображений.

Для блочных устройств обычно применяют буфер, минимальный размер которого равен размеру блока.

Контроллеры локальных сетей тяготеют к блочным устройствам - они передают данные целыми пакетами, которые должны приниматься и посылаться с опреде­ленной скоростью (100М бит/с, 1000М бит/с, 10Г бит/с - для первых трех поколений Ethernet). Для них объем, и организация буфера зависят от скорости среды передачи и производительности интерфейса, к которому они подключены.

Для потоковых устройств часто применяют буфер с дисциплиной обслужива­ния FIFO (First In - First Out, первым вошел - первым вышел). Размер такого буфера, как правило, невелик (например, 16, 64 байт). Буфер ставится между «цент­ром» и устройством, с одной стороны он наполняется, с другой - опо­рожняется. Опорожняющая сторона может извлекать данные из буфера, лишь, когда наполняющая сторона их туда положит. Попытка извлечения данных из пустого буфера является ошибкой опустошения (underflow), попытка помеще­ния в заполненный буфер - ошибкой переполнения (overflow). Логика буфера следит за степенью наполнения буфера и сообщает «центру» о критических ситуа­циях. Когда «центр» (программа, исполняемая процессором) выводит данные через FIFO, логика следит за снижением наполнения буфера ниже порога опустошения и в случае такового сигнализирует (обычно прерыванием) о необ­ходимости вывода следующей порции данных. Логика также препятствует пере­полнению, отвергая попытки записи лишних данных и немедленно сообщая об ошибке (обычно через соответствующий программно-читаемый бит состояния). При вводе данных через буфер FIFO его логика следит за наличием свободного места в буфере и при превышении порога заполнения также сигнализирует пре­рыванием. Аналогично, она не позволяет считать данные из пустого буфера и сообщает об этом соответствующим битом. Также логика буфера должна позво­лять его очищать по инициативе процессора, сообщать о количестве (или хотя бы о наличии) данных в буфере по запросу процессора. Управляемость порогов позволяет программе в зависимости от внешнего темпа обмена данными, воз­можностей и текущей загруженности компьютера выбрать оптимальный режим обмена, позволяющий и не «суетиться по мелочам», и не допускать переполненный/опустошений буфера. У двунаправленных устройств, как правило, имеется пара FIFO-буферов (для полного дуплекса), для симплексных устройств доста­точно одного.

Буферы современных устройств внешней памяти имеют более сложную организацию, обеспечивающую кэширование данных; однако и они используют вышеописанные принципы организации. Однопортовые буферы большого объема, как уже говорилось, могут вносить заметную задержку. Для потоковых примене­ний (например, для воспроизведения мультимедийных файлов) эта задержка обычно не очень существенна и на производительность не влияет. Однако для приложений «петлеобразного» характера, когда буфер оказывается в цепочке за­прос-ответ, его задержка может приводить к снижению производительности. Так, например, передача данных по сети обычно представляет собой последователь­ность кадров данных, на каждый из которых передающая сторона ожидает кадр подтверждения. Если каждый кадр будет «просиживать» в буфере, естественно, производительность снизится. От этой беды спасает метод «скользящего окна», при котором передающая сторона допускает некоторое отставание приема под­тверждений.

Под буфером обычно понимается некоторая область памяти для запоминания информации при обмене данных между двумя устройствами, двумя процессами или процессом и устройством. Обмен информацией между двумя процессами относится к области кооперации процессов, и мы подробно рассмотрели его организацию в соответствующей главе. Будем рассматривать использование буферов в том случае, когда одним из участников обмена является внешнее устройство.

Существуют три причины, приводящие к использованию буферов в базовой подсистеме ввода-вывода :

1) Первая причина буферизации – это разные скорости приема и передачи информации, которыми обладают участники обмена. Рассмотрим, например, случай передачи потока данных от клавиатуры на модем. Скорость, с которой поставляет информацию клавиатура, определяется скоростью набора текста человеком и обычно существенно меньше скорости передачи данных модемом. Для того чтобы не занимать модем на все время набора текста, делая его недоступным для других процессов и устройств, разумно накапливать введенную информацию в буфере или нескольких буферах достаточного размера и отсылать ее через модем после заполнения буферов.

2) Вторая причина буферизации – это разные объемы данных, которые могут быть приняты или получены участниками обмена единовременно. Возьмем другой пример. Пусть информация поставляется модемом и записывается на жесткий диск. Помимо обладания разными скоростями совершения операций модем и жесткий диск относятся к разным типам устройств. Модем является символьным устройством и выдает данные байт за байтом, в то время как диск является блочным устройством и для проведения операции записи для него требуется накопить необходимый блок данных в буфере. Здесь также можно применять более одного буфера. После заполнения первого буфера модем начинает заполнять второй одновременно с записью первого на жесткий диск. Поскольку скорость работы жесткого диска в тысячи раз больше, чем скорость работы модема, то к моменту заполнения второго буфера операция записи первого будет завершена, и модем снова может заполнять первый буфер одновременно с записью второго на диск.

3) Третья причина буферизации связана с необходимостью копирования информации из приложений, осуществляющих ввод-вывод, в буфера ядра операционной системы и обратно. Допустим, что некоторый пользовательский процесс пожелал вывести информацию из своего адресного пространства на внешнее устройство. Для этого он должен выполнить системный вызов с обобщенным названием write , передав в качестве параметров адрес области памяти, где расположены данные, и их объем. Если внешнее устройство временно занято, то возможна ситуация, когда к моменту его освобождения содержимое требуемой области окажется испорченным (например, при использовании асинхронной формы системного вызова). Чтобы избежать возникновения подобных ситуаций, проще всего в начале работы системного вызова откопировать необходимые данные в буфер ядра операционной системы, постоянно находящийся в оперативной памяти, и выводить их на устройство из этого буфера.


Под словом кэш обычно понимают область быстрой памяти, содержащую копию данных, расположенных где-либо в более медленной памяти, предназначенную для ускорения работы КС. В базовой подсистеме ввода-вывода не следует смешивать два понятия: буферизация и кэширование, хотя зачастую для выполнения этих функций отводится одна и та же область памяти. Буфер часто содержит единственный набор данных, существующий в системе, в то время как кэш, по своему определению, содержит копию данных, существующих где-нибудь еще. Например, буфер, используемый базовой подсистемой для копирования данных из пользовательского пространства процесса при выводе на диск, может в свою очередь использоваться как кэш для этих данных, если операции модификации и повторного чтения этого блока выполняются достаточно часто.

Функции буферизации и кэширования не обязательно должны быть локализованы в базовой подсистеме ввода-вывода. Они могут быть частично реализованы в драйверах и даже в контроллерах устройств, скрытно по отношению к базовой подсистеме.

Остановите любые другие активные загрузки на компьютере или устройстве. Фоновые процессы и загрузки могут потреблять свободные ресурсы, тем самым ограничивая возможности потокового воспроизведения. Закройте все игры и приложения, которые могут работать в фоновом режиме во время прямой трансляции.

Приостановите видео на несколько минут, чтобы увеличить доступный буфер. Это позволит компьютеру загрузить больший фрагмент видео, чтобы его можно было просмотреть целиком без перерывов и пауз.

Подумайте о том, чтобы повысить или улучшить скорость интернет-соединения. Обновите свой маршрутизатор или тарифный план у интернет-провайдера (ISP) или регулярно удаляйте кэш и файлы куки браузера , чтобы уменьшить степень буферизации и задержку по времени.

  • Используйте двухдиапазонный роутер, который транслирует сеть на частоте 5 ГГц и имеет дополнительную пропускную способность. Такой роутер обычно используется для проведения онлайн-трансляций в интернете и, как известно, уменьшает буферизацию.
  • Подождите, пока службы поставщика контента будут менее загружены. Серверы поставщиков контента, таких как Netflix, Hulu и YouTube, могут работать медленнее, чем обычно, в зависимости от ресурсов провайдера и часов пиковой нагрузки. Например, исследования, проведенные FCC, показали, что пиковое время загруженности интернет-трафика приходится между 8 и 10 часами вечера. Если видеохостинг продолжает буферизировать видео, подождите, пока службы немного разгрузятся, прежде чем продолжить просмотр.

    Ограничьте количество активных устройств в сети. Несколько устройств, работающих в одной и той же сети Интернет, будут занимать полосу пропускания этой сети и вызывать эффект буферизации, особенно если роутер не рассчитан на высокую интенсивность трафика. При просмотре видео убедитесь, что на всех устройствах ограничена скорость загрузки.

    Используйте антивирусное ПО для обнаружения и удаления вирусов и вредоносных программ. Вредоносные программы могут запускать один или несколько процессов в фоновом режиме, тем самым замедляя скорость интернет-соединения.

    Уменьшите качество видео в настройках. Снижение качества видео поможет уменьшить загрузку сети и случаи буферизации. Если для просмотра вы используете стороннее программное обеспечение или службы, измените качество видео в меню настроек.

    Подумайте об использовании проводного подключения к интернету. Проблемы с сигналом, частотные изменения и физические препятствия, такие как стены или мебель, могут приводить к сбоям в беспроводном интернет-соединении. Попробуйте перейти на проводное соединение, чтобы устранить проблему буферизации.

    Установите на устройство последнюю версию Adobe Flash Player . Большинство видеохостинговых площадок используют Adobe Flash, из-за чего устаревшая версия Flash может приводить к буферизации во время просмотра видео. Зайдите на официальный сайт Adobe Flash Player, пройдя по адресу.

    При разработке программ, работающих с потоками данных АЦП и ЦАП, возникает задача обеспечить обработку данных с достаточной скоростью.

    Скорость потока данных определяется частотой дискретизации и не регулируется программой: физический процесс не может ждать. Если потерять часть отсчётов, то сигнал будет испорчен.

    При этом компьютер, исполняющий программу, обычно работает не в реальном времени, т.е. если один шаг программы следует "сразу" за другим, то это "сразу" следует понимать как последовательность выполнения операций, а не как реальное время. Некоторые операции (например, запись на диск) могут выполняться относительно долго. Также в многозадачной операционной системе есть много процессов, прерывающих друг друга, так что программа может "застопориваться" в случайные для неё моменты времени (иногда довольно надолго – на десятки, даже сотни миллисекунд).

    Кроме того, при программировании бывает необходимо обрабатывать данные блоками (порциями), а не по одному отсчету, иначе накладные расходы сведут на нет быстродействие даже современного компьютера.

    Для решения этой задачи применяется буферизация.

    Буфер – это массив в памяти с быстрым доступом, в котором накапливаются поступающие данные (если это поток ввода, АЦП) или из которого они отправляются с заданной скоростью (если это поток вывода, ЦАП).

    При вводе данных процесс начинается с пустым буфером. При выводе буфер должен быть предварительно заполнен, иначе в начале работы может сразу произойти опустошение буфера.

    Производительность обработки данных компьютером должна быть больше скорости потока (с запасом), а вот мгновенная скорость может падать, лишь бы буфер ввода не переполнился, а буфер вывода не опустел. Запас по скорости нужен, чтобы разбирать данные, накопившиеся в буфере из-за паузы (а при выводе – чтобы снова наполнить буфер).

    Образно можно представить себе буфер ввода как бак, в который из трубы с постоянной скоростью поступает вода. Мы зачерпываем эту воду ведром, относим потребителю и возвращаемся; чем больше бак, тем больше времени у нас есть на непредвиденные задержки по дороге. В идеале в баке должно быть не больше ведра воды, тогда, уходя, мы оставляем его пустым и имеем максимальный запас времени. Если же случилась задержка и набралось много воды, мы начинаем торопиться, чтобы побыстрее вычерпать её.

    С буфером вывода всё то же самое, только вода уходит из бака с постоянной скоростью (и прерывать подачу нельзя, это авария), а мы наливаем вёдрами. Соответственно максимальную защиту от задержек обеспечивает полный бак, а если уровень упал – его надо побыстрее восполнить.

    На практике такая схема может быть реализована в виде кольцевого буфера или списка блоков меньшего размера ("вёдер"), которые ставятся в очередь. По мере готовности они обрабатываются, освободившиеся блоки-вёдра ставятся в конец очереди.

    Простейший вариант – это схема с двумя буферами (двумя половинами большого буфера): когда готова одна половина, она обрабатывается, в это время данные собираются во второй половине, и за время ее заполнения должна завершиться обработка первой, потом половины "меняются ролями". Если продолжать аналогию с вёдрами, то здесь нет бака, зато есть два ведра: набрав полное ведро, мы сразу подставляем пустое и относим полное на грядку. Это очень простая и эффективная схема, но в ней размер порции обработки данных (и связанная с ним задержка) увязывается с размером буфера, что иногда неудобно.

    Для использованной выше бытовой аналогии буфера и ведра сделаем важную оговорку, что под буфером (в системах сбора данных и управления) подразумевается последовательная структура, в которой данные не теряются (ведро не дырявое) и последовательность данных не изменяется. Другими словами, попавший в буфер отсчёт данных не может обогнать ранее пришедший отсчёт.

    Также отметим, что реализация буфера может быть не только программная, но и аппаратная, например в FPGA , по типу линейной очереди заданного максимального размера "первым вошёл – первым вышел" (FIFO – First In, First Out).

    Если термин "буферизация" рассматривать шире, то буферизация может быть и без сохранения естественного порядка следования данных, например, LIFO "последним вошёл – первым вышел" (LIFO – Last In, First Out). Другое известное название буфера LIFO – это стек (Stack), который широко применяется в программировании.

    При сравнении характеристик систем сбора данных важен не просто байтовый объём буфера в системе, а расчётное максимальное время буферизации сигнала при данной скорости ввода данных (для АЦП) или вывода данных (ЦАП). Для расчёта времени буферизации следует учитывать необходимую скорость сбора данных (отсчётов в секунду) и размер слова данных, занимаемый одним отсчётом (типично: 2 или 4 байта). В слове, кроме отсчёта данных, может находиться вспомогательная индексная информация, маркирующая поток данных для разных вспомогательных задач при работе с данными на верхнем программном уровне в ПК.

    С данной темой связаны следующие статьи:

    • Ввод-вывод данных синхронный и асинхронный
    • Можно ли обрабатывать данные от АЦП на ПК в реальном времени, отсчет за отсчетом?

    Пример использования термина

    Терминология, связанная с буферизацией потоков данных, широко используется в руководствах на различные системы сбора данных (LTR, E-502, L-502, E14-x40 и т.д.) при описании их функциональных схем и программных интерфейсов.

    Модуль АЦП/ЦАП
    16/32 каналов, 16 бит, 2 МГц, USB, Ethernet

    E-502

    АЦП: 16 бит; 16/32 каналов;
    ±0,2 В…10 В; 2 МГц
    ЦАП: 16 бит; 2 канала; ±5 В; 1 МГц
    Цифровые входы/выходы:
    18/16 TTL 5 В
    Интерфейс: PCI Express