Ein Deferred Procedure Call (DPC) ist ein Interrupt-Behandlungsmechanismus im Microsoft Windows-Betriebssystem, auf den Treiber beim Ausführen bestimmter Prozesse verweisen können. DPC ermöglicht, dass eine Task von einem hochpriorisierten Interrupt-Request-Level (IRQL) aus aktiviert, aber nicht ausgeführt wird. Dies ermöglicht einem Treiber, eine Interrupt-Service-Routine (ISR) hoher Ebene schnell zu verarbeiten, während die Ausführung von IRQL-Codes niedrigerer Ebene verzögert wird. Treiber verwenden DPCs, um Eingabe-/Ausgabe-(I/O)-Operationen zu planen. Treiber sind Software, die von Windows verwendet wird, um mit Hardwaregeräten zu kommunizieren.
Überweisungen
Ein Gerätetreiber im Kernelmodus handhabt herkömmlicherweise die Übertragung eines Audio- oder Videodatenstroms von oder zu einem externen Gerät. Die Datenverarbeitung der Gerätetreiber ist Interrupt-gesteuert. Die externe Hardware erzeugt routinemäßig Interrupts, um den Gerätetreiber aufzufordern, den nächsten Datenstapel zu übertragen. Ein Gerätetreiber kann Daten in seiner Interrupt-Routine nicht sofort verarbeiten; Daher muss das Betriebssystem eine Callback-Routine auslösen, die DPC ist. Der Kernelmodus oder Systemmodus und der Benutzermodus sind die Betriebsmodi Ihrer Zentraleinheit. Der Kernel steuert alle Systemverarbeitungsaktivitäten.
Terminplanung
Das Konzept eines verzögerten Prozeduraufrufs existiert nur im Kernelmodus. Das Betriebssystem hält die von den Gerätetreibern geplanten DPCs in einer Warteschlange. Wenn Ihr System Interrupts verarbeiten muss, überprüft der Kernel die DPC-Warteschlange und führt den ersten DPC aus, wenn keine Interrupts vorhanden sind und keine DPC-Prozesse ausgeführt werden. Der DPC ist der Thread mit der höchsten Priorität im System, da die DPC-Warteschlangenverarbeitung stattfindet, bevor der Dispatcher einen Thread auswählt und diesen der CPU zuweist. DPCs haben drei Prioritätsstufen: niedrig, mittel und hoch.
Prozesse
Jeder DPC ist mit einem systemdefinierten DPC-Objekt verknüpft. Wenn ein Treiber eine DPCForslr-Routine registriert, initialisiert das System das zuvor definierte DPC-Objekt. Wenn mehr als ein DPC erforderlich ist, erstellt ein Treiber zusätzliche DPC-Objekte, die als CustomDPC-Routinen bekannt sind. Die Routine DPCForlsr verarbeitet mehrere Prozesse; es schließt die durch die Eingabe-/Ausgabe-Anforderungspakete (IRP) beschriebene E/A-Operation ab, ruft das nächste IRP ab, setzt den Eingabe-/Ausgabe-Status im empfangenen IRP und den Prozess zum Abschließen der Anforderung.
Routinen
Normalerweise verfügt ein Gerätetreiber, der über eine Interrupt-Dienstroutine verfügt, über mindestens eine DPCForIsr- oder CustomDPC-Routine, um die Verarbeitung von Interrupt-gesteuerten E/A-Vorgängen abzuschließen. Laut Open Systems Resources, Inc. hängt der Hauptgrund, warum ein Treiber eine einzelne DPCForlsr-Routine, eine Reihe von CustomDPC-Routinen oder beides hat, von der Art des zugrunde liegenden Geräts und der Reihe von I/O-Anforderungen ab, die er unterstützen muss. Der ISR eines Treibers muss IoRequestDPC für Interrupt-gesteuerte E/A-Operationen mit DPCForlsr-Routinen aufrufen. Umgekehrt muss ISR für überlappende Operationen, Interrupt-gesteuerte E/A-Operationen, die CustomDPC-Routinen verwenden, KeInsertQueueDPC aufrufen.