Опустошение буфера
Эта статья нуждается в дополнительных цитатах для проверки . ( январь 2017 г. ) |

В вычислениях подаются опустошение буфера или опустошение буфера — это состояние, возникающее, когда в буфер, используемый для связи между двумя устройствами или процессами, данные с более низкой скоростью, чем данные считываются из него. Этот термин отличается от переполнения буфера — состояния, при котором часть памяти образует буфер фиксированного размера, но заполнена большим количеством данных. Это требует, чтобы программа или устройство, считывающее данные из буфера, приостановили свою обработку на время заполнения буфера. Это может вызвать нежелательные, а иногда и серьезные побочные эффекты, поскольку буферизуемые данные обычно не подходят для такого рода доступа с остановкой и запуском.
С точки зрения параллельного программирования опустошение буфера можно рассматривать как форму нехватки ресурсов .
Термины опустошение буфера и опустошение буфера также используются для обозначения недозаписи буфера , состояния, аналогичного переполнению буфера, но когда программу обманом заставляют писать до начала буфера, переопределяя потенциальные данные там, например, биты разрешения . [1]
Общие причины и решения
[ редактировать ]буфера Опустошение часто является результатом временных проблем, связанных с соединением буферизуемым : либо соединением между двумя процессами, когда другие конкурируют за время ЦП , либо физическим каналом связи, когда устройства конкурируют за пропускную способность .
Самая простая защита от таких проблем — увеличить размер буфера: если входящий поток данных необходимо читать со скоростью 1 бит в секунду, буфер в 10 бит позволит заблокировать соединение на срок до 10 секунд, прежде чем произойдет сбой. тогда как один из 60 бит допускает блокировку до минуты. Однако для этого требуется больше памяти, доступной процессу или устройству, что может быть дорогостоящим. Предполагается, что буфер начинает заполняться (требуется потенциально значительная пауза перед началом процесса чтения) и что он всегда будет оставаться заполненным, если соединение в данный момент не заблокировано. Если данные в среднем не доставляются быстрее, чем необходимо, любые блокировки соединения будут накапливаться; «Отбрасывание» одного бита каждую минуту в гипотетическом соединении с 60-битным буфером привело бы к опустошению буфера, если бы соединение оставалось активным в течение часа. В приложениях реального времени большой размер буфера также увеличивает задержку между вводом и выводом, что нежелательно в приложениях с низкой задержкой, таких как видеоконференции.
Проблемы с записью CD и DVD
[ редактировать ]Опустошение буфера может вызвать серьезные проблемы во время записи CD/DVD , поскольку после начала записи она не может остановиться и возобновиться безупречно; таким образом, пауза, необходимая для опустошения, может привести к тому, что данные на диске станут недействительными. Поскольку буфер обычно заполняется из относительно медленного источника, такого как жесткий диск или другой CD/DVD, большая загрузка ЦП или памяти от других параллельных задач может легко исчерпать емкость небольшого буфера. Поэтому технология, называемая защитой от опустошения буфера , была реализована различными поставщиками устройств записи CD/DVD под различными торговыми марками , такими как Plextor BurnProof, Nero UltraBuffer, Yamaha SafeBurn, JustLink и Seamless Link. Благодаря этому методу лазер действительно может прекратить запись на любое время и возобновить запись, когда буфер снова заполнится. Разрыв между последовательными операциями записи чрезвычайно мал.
Другой способ защиты от этой проблемы при использовании перезаписываемых носителей ( CD-RW , DVD-RW , DVD-RAM ) — использовать файловую систему UDF , которая организует данные в более мелкие « пакеты », на которые ссылается один обновленный адрес. таблицу, которую поэтому можно записывать более короткими пакетами.
Воспроизведение мультимедиа
[ редактировать ]Если фреймбуфер графического контроллера не обновляется, изображение на экране компьютера будет зависать до тех пор, пока в буфер не поступят новые данные. Многие программы видеоплееров (например, MPlayer ) имеют возможность пропускать кадры, если система перегружена, намеренно допуская опустошение буфера для поддержания темпа.
Буфер в аудиоконтроллере представляет собой кольцевой буфер . Если происходит опустошение и аудиоконтроллер не остановлен, он либо продолжит повторять звук, содержащийся в буфере, либо выведет тишину в зависимости от реализации. Такой эффект обычно называют «пулеметом» или эффектом заикания Макса Хедрума . Это происходит, если операционная система зависает во время воспроизведения звука. Процедура обработки ошибок (например, синий экран смерти ) может в конечном итоге остановить работу аудиоконтроллера.
Намеренная имитация этого звукового сбоя во время создания музыки или саунд-арта путем ручного объединения звука или повторного запуска сэмплов или с помощью плагинов называется редактированием заикания .