Вызов отложенной процедуры - Deferred Procedure Call

А Вызов отложенной процедуры (ЦОД) это Майкрософт Виндоус механизм операционной системы, который позволяет выполнять высокоприоритетные задачи (например, обработчик прерывания ), чтобы отложить выполнение требуемых, но менее приоритетных задач для последующего выполнения. Это позволяет драйверам устройств и другим потребителям событий низкого уровня быстро выполнять высокоприоритетную часть своей обработки и планировать некритическую дополнительную обработку для выполнения с более низким приоритетом.

DPC реализуются объектами DPC, которые создаются и инициализируются ядро когда драйвер устройства или другая программа режима ядра выдает запросы DPC. Запросы DPC добавляются в конец DPC. очередь. У каждого процессора есть отдельная очередь DPC. У DPC есть три уровня приоритета: низкий, средний и высокий. По умолчанию для всех DPC установлен средний приоритет. Когда Windows переходит в IRQL уровня Dispatch / DPC, он проверяет очередь DPC на наличие любых ожидающих обработки DPC и выполняет их до тех пор, пока очередь не станет пустой или не произойдет какое-либо другое прерывание с более высоким IRQL.

Например, когда генерируется прерывание часов, обработчик прерывания часов обычно увеличивает счетчик текущего потока, чтобы вычислить общее время выполнения этого потока, и уменьшает его квант время, оставшееся на 1. Когда счетчик упадет до нуля, необходимо вызвать планировщик потоков, чтобы выбрать следующий поток, который будет выполняться на этом процессоре, и диспетчер для выполнения переключения контекста. Поскольку прерывание часов происходит при гораздо более высоком IRQL, было бы желательно выполнить диспетчеризацию этого потока, что является менее важной задачей, в более позднее время, когда IRQL процессора упадет. Таким образом, обработчик прерывания часов запрашивает объект DPC и добавляет его в конец очереди DPC, которая будет обрабатывать диспетчеризацию, когда IRQL процессора упадет до уровня DPC / Dispatch.

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

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

Общий
  • Арт Бейкер и Джерри Лозано. (2000). Книга драйверов устройств Windows 2000: Руководство для программистов, второе издание,. Прентис Холл. ISBN  978-0-13-020431-8.
  • Определение Microsoft DPC
Специфический
  1. ^ Уте Эберхардт (27 июня 2012 г.). "Проверка задержки DPC". Thesycon.de. Получено 14 октября 2017.