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