Отложенный вызов процедуры (DPC) - это механизм обработки прерываний в операционной системе Microsoft Windows, на который могут ссылаться драйверы при выполнении определенных процессов. DPC позволяет активировать, но не выполнять задачу, с высокоприоритетным уровнем запроса прерывания (IRQL). Это позволяет драйверу быстро обрабатывать высокоуровневую подпрограмму обработки прерываний (ISR), откладывая выполнение кодов IRQL более низкого уровня. Драйверы используют ЦОД для планирования операций ввода / вывода (I / O). Драйверы - это программное обеспечение, используемое Windows для связи с аппаратными устройствами.
переводы
Драйвер устройства режима ядра традиционно обрабатывает передачу потока аудио- или видеоданных с или на внешнее устройство. Обработка данных драйверов устройств осуществляется с помощью прерываний. Внешнее оборудование обычно генерирует прерывания, чтобы запросить драйвер устройства передать следующий пакет данных. Драйвер устройства не может обрабатывать данные мгновенно в своей процедуре прерывания; таким образом, операционной системе необходимо запустить процедуру обратного вызова, которая является DPC. Режим ядра, или режим системы, и режим пользователя - это режимы работы вашего центрального процессора. Ядро контролирует все действия по обработке системы.
планирование
Концепция отложенного вызова процедуры существует только в режиме ядра. Операционная система сохраняет DPC, запланированные драйверами устройств, в очереди. Если вашей системе требуется обрабатывать прерывания, ядро проверяет очередь DPC и выполняет первый DPC, если нет прерываний и не запущены процессы DPC. DPC является потоком с наивысшим приоритетом в системе, поскольку обработка очереди DPC происходит до того, как диспетчер выберет поток и назначит его ЦПУ. ЦОДы имеют три уровня приоритета: низкий, средний и высокий.
Процессы
Каждый DPC связан с одним системным объектом DPC. Когда драйвер регистрирует процедуру DPCForslr, система инициализирует ранее определенный объект DPC. Если требуется более одного DPC, драйвер создает дополнительные объекты DPC, известные как процедуры CustomDPC. Подпрограмма DPCForlsr обрабатывает несколько процессов; он завершает операцию ввода / вывода, описанную пакетами запроса ввода / вывода (IRP), запрашивает следующий IRP, устанавливает состояние ввода / вывода в принятом IRP и процесс для завершения запроса.
Подпрограммы
Обычно драйвер устройства, который имеет подпрограмму обработки прерываний, имеет по крайней мере одну подпрограмму DPCForIsr или CustomDPC для завершения обработки операций ввода-вывода, управляемых прерываниями. Согласно Open Systems Resources, Inc., основная причина, по которой драйвер имеет одну подпрограмму DPCForlsr, набор подпрограмм CustomDPC или обе, зависит от природы базового устройства и набора запросов ввода-вывода, которые он должен поддерживать. ISR драйвера должен вызывать IoRequestDPC для операций ввода-вывода, управляемых прерываниями, с использованием процедур DPCForlsr. И наоборот, для перекрывающихся операций, управляемых прерываниями операций ввода-вывода с использованием подпрограмм CustomDPC, ISR должен вызывать KeInsertQueueDPC.