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

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

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

Термины опустошение буфера и опустошение буфера также используются для обозначения буферная подпись, условие, подобное переполнению буфера, но где программа обманом записывает до начала буфера, переопределяя потенциальные данные там, например биты разрешения.[1]

Общие причины и решения

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

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

Проблемы с записью CD и DVD

Недополнение буфера может вызвать серьезные проблемы во время Запись CD / DVD потому что, как только запись начата, она не может безупречно остановиться и возобновить; таким образом, пауза, необходимая для опустошения, может привести к тому, что данные на диске станут недействительными. Поскольку буфер обычно заполняется из относительно медленного источника, такого как жесткий диск или другой CD / DVD, большая нагрузка на ЦП или память из-за других параллельных задач может легко исчерпать емкость небольшого буфера. Поэтому методика называется защита от опустошения буфера был реализован различными поставщиками записывающих устройств CD / DVD под разными товарные знаки, такие как Plextor Горелка, Неро Ультрабуфер, Ямаха SafeBurn, JustLink и бесшовная ссылка. С помощью этой техники лазер действительно может останавливать запись на любое время и возобновлять, когда буфер снова заполняется. Разрыв между последовательными записями чрезвычайно мал.

Другой способ защиты от проблемы при использовании перезаписываемые носители (CD-RW, DVD-RW, DVD-RAM ), заключается в использовании UDF файловая система, которая упорядочивает данные в более мелких "пакеты ", на которую ссылается одна обновленная таблица адресов, которая, следовательно, может быть записана более короткими пакетами.

Воспроизведение мультимедиа

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

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

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

  1. ^ «CWE-124: Buffer Underwrite ('Buffer Underflow')». CWE.