Volání odložené procedury (DPC) je mechanismus zpracování přerušení v operačním systému Microsoft Windows, na který mohou ovladače odkazovat při spuštění určitých procesů. DPC umožňuje aktivaci úlohy, ale neprovedení z vysoce prioritní úrovně požadavku na přerušení (IRQL). To umožňuje ovladači rychle zpracovat rutinu služby přerušení na vysoké úrovni (ISR) a odložit provádění kódů IRQL nižší úrovně. Řidiči používají DPC k plánování operací vstupu / výstupu (I / O). Ovladače jsou software používaný systémem Windows ke komunikaci s hardwarovými zařízeními.
Převody
Ovladač zařízení v režimu jádra běžně zpracovává přenos audio nebo video datového proudu z nebo do externího zařízení. Zpracování dat ovladačů zařízení je řízeno přerušením. Externí hardware běžně generuje přerušení, aby požádal ovladač zařízení o přenos další dávky dat. Ovladač zařízení nemůže ve své rutině přerušení zpracovávat data okamžitě; operační systém tedy potřebuje spustit rutinu zpětného volání, což je DPC. Režim jádra nebo režim systému a režim uživatele jsou režimy provozu vaší centrální procesorové jednotky. Jádro řídí všechny činnosti zpracování systému.
Plánování
Koncept volání odložené procedury existuje pouze v režimu jádra. Operační systém udržuje DPC naplánované ovladači zařízení ve frontě. Pokud váš systém potřebuje zpracovat přerušení, jádro zkontroluje frontu DPC a provede první DPC, pokud neexistují žádná přerušení a nejsou spuštěny žádné procesy DPC. DPC je vlákno s nejvyšší prioritou v systému, protože zpracování fronty DPC nastane dříve, než dispečer vybere vlákno a přiřadí jej CPU. DPC mají tři úrovně priority: nízkou, střední a vysokou.
Procesy
Každý DPC je propojen s jedním systémem definovaným objektem DPC. Když ovladač zaregistruje rutinu DPCForslr, systém inicializuje dříve definovaný objekt DPC. Pokud je vyžadováno více než jeden DPC, ovladač vytvoří další objekty DPC známé jako rutiny CustomDPC. Rutina DPCForlsr zpracovává několik procesů; dokončí I / O operaci popsanou pakety požadavků na vstup / výstup (IRP), zruší další IRP, nastaví stav vstupu / výstupu v přijatém IRP a proces k dokončení požadavku.
Rutiny
Ovladač zařízení, který má rutinu služby přerušení, má normálně alespoň jednu rutinu DPCForIsr nebo CustomDPC k dokončení zpracování I / O operací řízených přerušením. Podle Open Systems Resources, Inc., základní důvod, proč má ovladač jednu rutinu DPCForlsr, sadu rutin CustomDPC nebo obojí, závisí na povaze jejího základního zařízení a na sadě požadavků I / O, které musí podporovat. ISR řidiče musí volat IoRequestDPC pro I / O operace řízené přerušením pomocí rutin DPCForlsr. Naopak pro překrývající se operace, operace I / O řízené přerušením pomocí rutin CustomDPC musí ISR zavolat KeInsertQueueDPC.