За годы использования операционных систем Microsoft я много раз сталкивался с ситуацией, которую только сейчас хочу понять. Когда вы получаете BSOD во время прослушивания музыки, происходит короткий промежуток времени (1-2 секунды), когда экран замирает и последняя часть музыки повторяется несколько раз, прежде чем все падает в голубую пропасть. Сегодня мне стало очень интересно узнать о механике, стоящей за этой ситуацией - что делает эту определенную часть аудио петлей? Прошу вас, господа, удовлетворить мое любопытство.
3 ответа
Это просто связано с буферизацией и DMA.
Операционная система не воспроизводит звук напрямую, а декодирует его (распаковывает и т.д.) И отправляет его на звуковое оборудование для воспроизведения.
Это редко делается непосредственно процессором, но подсистемой DMA (прямой доступ к памяти), которая обрабатывает его независимо. Процессор в основном говорит системе DMA скопировать порцию A памяти на звуковое оборудование и указать, когда это будет сделано.
Если операционная система вышла из строя, то она никогда не получит сигнал от микросхемы DMA о том, что передача завершена, поэтому она никогда не сможет сообщить микросхеме DMA о передаче следующей порции. Так что же делает чип DMA? Что ж, если не будет сказано сделать что-то еще, он вполне может передать тот же кусок данных снова ... и снова ... и снова ... до тех пор, пока он не отключится, что приведет к повторяющемуся звуку. Другая вещь, которая может произойти, это то, что операционная система получила сигнал о том, что она завершила передачу, а затем отправила сигнал, чтобы начать новую передачу, но не поместила какие-либо новые данные в буфер, что приводит к тому же фрагменту данные передаются снова ... и снова ... и т. д. Все, что на самом деле происходит, зависит от того, как MS решила использовать систему DMA для воспроизведения звука, и, не видя исходного кода для Windows, я действительно не мог сказать, что это.
Я надеюсь, что это дает некоторое представление об этом, в любом случае.
Небольшой раздел оперативной памяти или буфера, из которого звуковая карта использует для воспроизведения, является круглым. ЦАП внутри звуковой карты, как только он достигает конца этого буфера, возвращается обратно к началу. До этого времени ОС должна была перезаписать старые данные в буфере новыми звуковыми данными. Однако, если ОС не дошла до этого из-за высокой загрузки ЦП или сбоя, ЦАП в звуковой карте просто продолжит работать.
Большинство оборудования "глупо", как это, по замыслу. Простота - это надежность в отношении проектирования оборудования и сети. Это относится и к дизайну ОС, но, вы знаете ...
Вот так много цифрового аудио работает. Проигрыватели компакт-дисков основаны на том же принципе, и поэтому вы слышите, как они пропускают то, что делают, когда сталкиваются с плохими секторами.
AFAIK, звук происходит в режиме реального времени и является довольно сложным - кодекс / буферы / кэш и т.д. Все происходит внутри чипа.
попросту говоря, компьютер в основном помещает в кеш / буфер аудиосигнал и сообщает ему начать воспроизведение. Ему нужно дать команду остановить, и если он не получит команду остановки, он продолжит проигрывать кэш / буфер до тех пор, пока не будет вынужден остановиться.
Windows Audio Service, которая связывает звуковую карту с операционной системой в удобной манере. Во время BSOD эта служба дает сбой, и в течение нескольких секунд между тем, как звуковая карта / чип теряет питание / отключается, он снова и снова воспроизводит буфер / его последнюю команду.