Какви са отложените процедурни повиквания?

Отложено извикване на процедура (DPC) е механизъм за обработка на прекъсвания в операционната система Microsoft Windows, към който драйверите могат да се позовават при изпълнение на определени процеси. DPC позволява дадена задача да бъде активирана, но не и изпълнена от силно приоритизирано ниво на заявка за прекъсване (IRQL). Това позволява на драйвера да обработва бързо рутинна услуга за прекъсване на високо ниво (ISR), като същевременно отлага изпълнението на IRQL кодове от по-ниско ниво. Шофьорите използват DPC за планиране на входно / изходни (I / O) операции. Драйверите са софтуер, използван от Windows за комуникация с хардуерни устройства.

Трансфери

Драйверът на устройството в режим на ядро ​​обикновено обработва трансфера на поток от аудио или видео данни от или към външно устройство. Обработката на данни на драйверите на устройства се управлява от прекъсвания. Външният хардуер редовно генерира прекъсвания, за да поиска от драйвера на устройството да прехвърли следващата партида данни. Драйверът на устройството не може да обработва данните незабавно в своята рутинна прекъсване; по този начин операционната система трябва да задейства рутина за обратно извикване, която е DPC. Режимът на ядрото или системният режим и потребителският режим са режимите на работа на вашия централен процесор. Ядрото контролира всички дейности по обработка на системата.

Планиране

Концепцията за отложено извикване на процедура съществува само в режим на ядро. Операционната система поддържа DPC, насрочени от драйверите на устройството, на опашка. Ако вашата система трябва да обработва прекъсвания, ядрото проверява DPC опашката и изпълнява първия DPC, ако няма прекъсвания и не се изпълняват DPC процеси. DPC е нишката с най-висок приоритет в системата, тъй като обработката на DPC опашката се извършва преди диспечерът да избере нишка и да я присвои на процесора. DPC имат три приоритетни нива: ниско, средно и високо.

Процеси

Всеки DPC е свързан с един дефиниран от системата DPC обект. Когато драйвер регистрира DPCForslr рутина, системата инициализира предварително дефинирания DPC обект. Ако се изискват повече от един DPC, драйверът създава допълнителни DPC обекти, известни като CustomDPC подпрограми. Рутината DPCForlsr обработва няколко процеса; той завършва I / O операцията, описана от входно / изходните пакети за заявка (IRP), деактивира следващия IRP, задава състоянието на вход / изход в получената IRP и процеса за завършване на заявката.

Процедури

Обикновено драйверът на устройство, който има програма за прекъсване, има поне една програма DPCForIsr или CustomDPC, за да завърши обработката на I / O операции, управлявани от прекъсвания. Според Open Systems Resources, Inc., основната причина, поради която драйверът има една DPCForlsr рутина, набор от CustomDPC подпрограми или и двете зависи от естеството на основното му устройство и от множеството I / O заявки, които трябва да поддържа. ISR на драйвера трябва да извика IoRequestDPC за I / O операции, управлявани от прекъсвания, използващи рутинни процедури DPCForlsr. И обратно, за припокриващи се операции, управлявани от прекъсвания I / O операции, използващи CustomDPC рутини, ISR трябва да извика KeInsertQueueDPC.