Уровень буферизации. Буферизация данных в устройствах

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

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

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

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

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


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

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

3.8. Буферизация

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

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

Операционная система MS-DOS может создать несколько буферов. Их количество зависит от оператора BUFFERS из файла config.sys . Этот оператор позволяет определить от 2 до 99 буферов. Если файл config.sys не содержит оператора BUFFERS, по умолчанию используются два буфера.

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

Еще один способ организовать буферизацию данных для жестких дисков и устройств CD-ROM - использовать драйвер smartdrv.exe . Этот драйвер позволяет создать для диска кеш-память в расширенной памяти.

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

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

При закрытии файла все буферы, связанные с ним, сбрасываются на диск. Если вам надо сбросить буферы, не закрывая файл, это можно сделать с помощью функции 68h прерывания INT 21h:

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

Просмотр видео сегодня является одним из основных занятий пользователей в Сети, количество страниц которой насчитывает уже 4 660 000 000, и когда на их пути встречается даже малейшее препятствие — громоздкий интерфейс или необходимость загрузки плагина — велик шанс, что они просто уйдут с сайта, не предпринимая никаких действий. Но ничто не может взбесить их сильнее, чем проблемы с буферизацией видео (Buffering).

Сколько человек готовы ждать, пока запустится видео? Для ответа на этот вопрос были проанализированы данные миллионов Интернет-сессий на предмет пользовательского опыта зрителей, начиная от времени загрузки до ошибок воспроизведения.

Исследование показало, что одна только медленная буферизация сокращает объем видеосессий на 40%.

График ниже демонстрирует процент видео, прерванных данных процессом:

Насколько типичны прерывания на буферизацию? Вертикальная ось — % видео. Горизонтальная ось — количество помех, возникающих из-за буферизации

Лишь половина видео ничем не прерывается — 49% останавливается на буферизацию хотя бы 1 раз, из этого числа около половины задерживается только однажды (24%). Двузначные прерывания относительно редки (4%), а трехзначных еще меньше (1%).

Для каждого прерванного видео из исследованной серии было определено общее время ожидания перед возобновлением проигрывания:

Каково среднее время прерывания на буферизацию? Вертикальная ось — продолжительность буферизации (в сек.). Вертикальная ось — % видео

Большинство видео загружаются довольно быстро: для 38% буферизация длилась 1 секунду или меньше. Более длительные показатели были редки: лишь 13% выборки буферизировались 15 секунд и более. Конечно, такие прерывания могут длиться и дольше, это зависит от пользователя — большинство людей не станут терпеливо ожидать загрузки видео в течение длительного времени.

Отсюда возникает вопрос: с какой по продолжительности паузой готов мириться пользователь?

Чтобы это выяснить, выборку сократили, оставив только видео, длившиеся от одной до пяти минут, и сгруппировали просмотры в сессии, или эпизоды непрерывного просмотра видео или нескольких видео подряд, а не только одного отдельно взятого ролика.

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

Как помехи, вызванные буферизацией, влияют на длительность сессии? Вертикальная ось — средняя продолжительность сессии в сек. Горизонтальная ось — количество помех, возникающих из-за буферизации

Видеосессия типичного зрителя, у которого не возникает проблем, составляет 214 секунд, чуть больше 3,5 минут. Одна помеха из-за буферизации вызывает резкое падение показателя до 137 секунд, четыре сокращают среднюю продолжительность сессии до 111 секунд (48%-ный спад).

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

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

Как помехи, вызванные буферизацией, влияют на длительность просмотровой сессии? Вертикальная ось — средняя продолжительность сессии в сек. Горизонтальная ось — количество помех, возникающих из-за буферизации

И снова одна пауза из-за проблем с загрузкой влечет за собой сильнейшее падение в длительности просмотра. Сессия людей, столкнувшихся с буферизацией, составляет 130 секунд, что на 39% ниже нормальной сессии.

Таким образом, анализ еще раз подтверждает, что люди просто ненавидят ожидать буферизацию видео.

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

  • настройка скорости передачи видео;
  • переход к самонастраиваемым форматам потоковой передачи (таким как HLS or DASH);
  • использование сети доставки контента (CDN);
  • смена видеоплеера;
  • применение адаптивных алгоритмов и устранение багов, негативно влияющих на буферизационные процессы.

Современные пользователи крайне нетерпеливы. Медленная скорость загрузки осталась в далеком прошлом — сегодня бесперебойное воспроизведение роликов онлайн является нормой. С учетом всего этого, почему вообще кто-то должен мириться с буферизацией видео?

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

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

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

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

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

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

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

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

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

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

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

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

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

Также отметим, что реализация буфера может быть не только программная, но и аппаратная, например в 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

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

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

Термины «прозрачная» и «непрозрачная» буферизация несовсем удачны, поскольку могут несколько сбивать с толку. В качестве более удачных можно было бы предложить термины, соответственно, «невидимая» и «видимая буферизация».

Применение буферизации

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

Буферизация в аппаратном обеспечении

  • Оперативная память модема используется для буферизации принимаемых и передаваемых данных.

Буферизация в программном обеспечении

  • При выводе на печать в многозадачных ОС происходит буферизация файлов в очереди печати.

Wikimedia Foundation . 2010 .

Синонимы :

Смотреть что такое "Буферизация" в других словарях:

    Сущ., кол во синонимов: 1 буферовка (2) Словарь синонимов ASIS. В.Н. Тришин. 2013 … Словарь синонимов

    буферизация - — Тематики электросвязь, основные понятия EN buffering …

    буферизация - tarpinis kaupimas statusas T sritis radioelektronika atitikmenys: angl. buffering; spooling vok. Pufferung, f rus. буферизация, f; откачка данных, f; подкачка данных, f pranc. spoulage, m; tamponnage, m … Radioelektronikos terminų žodynas

    буферизация - буфериз ация, и … Русский орфографический словарь

    буферизация - буфер/из/аци/я [й/а] … Морфемно-орфографический словарь

    Буферизация (от англ. buffer) метод организации обмена, в частности, ввода и вывода данных в компьютерах и других вычислительных устройствах, который подразумевает использование буфера для временного хранения данных. При вводе данных одни… … Википедия

    буферизация ввода-вывода - — Тематики электросвязь, основные понятия EN I/O buffering … Справочник технического переводчика

    буферизация входных и выходных потоков периферийных устройств (в многозадачных ОС) - Способ организации обмена, при котором все выводимые задачей данные временно запоминаются в буферном файле (для последующего независимого вывода); аналогично при вводе все данные, предназначенные для задачи, загружаются в буферный файл до ее… … Справочник технического переводчика

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

    буферизация с перемещением данных - — [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом EN move mode buffering … Справочник технического переводчика

© 2024 x360ce.ru
Фотография - Информационный портал