stringtranslate.com

Опустошение буфера

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

С точки зрения параллельного программирования опустошение буфера можно рассматривать как форму нехватки ресурсов .

Термины «опустошение буфера» и «опустошение буфера» также используются для обозначения недозаписи буфера , состояния, похожего на переполнение буфера, но когда программу обманом заставляют писать до начала буфера, переопределяя там потенциальные данные, такие как биты разрешения . [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 ) имеют возможность пропускать кадры, если система перегружена, намеренно допуская опустошение буфера для поддержания темпа.

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

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

Рекомендации

  1. ^ «CWE-124: Перезапись буфера («Недополнение буфера»)» . КВЕ .