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