Organisation von DPC-Warteschlangen

Das System stellt eine DPC-Warteschlange für jeden Prozessor bereit. Treiber können steuern, welcher Warteschlange das System einen DPC zuweist, wo sich der DPC in der Warteschlange befindet und wann die Warteschlange verarbeitet wird.

DPCs, die der Warteschlange eines bestimmten Prozessors zugewiesen sind, werden auf diesem Prozessor ausgeführt. Wenn der Treiber KeInsertQueueDpc oder IoRequestDpc aufruft, wird der DPC standardmäßig auf dem derzeit aktiven Prozessor in die Warteschlange gestellt. Treiber können die Prozessorwarteschlange angeben, indem sie KeSetTargetProcessorDpc aufrufen, bevor KeInsertQueueDpc oder IoRequestDpc aufgerufen wird.

Unter Windows Vista und höheren Versionen von Windows verfügt das System auch über eine DPC-Threadwarteschlange für jeden Prozessor. Treiber können KeSetTargetProcessorDpc verwenden, um die Prozessorwarteschlange für Thread-DPCs anzugeben.

Die KeSetImportanceDpc-Routine steuert, wo ein DPC in der Warteschlange platziert wird. In der Regel wird der DPC am Ende der Warteschlange platziert. Wenn der Treiber jedoch zuerst KeSetImportanceDpc mit dem Importance-Parameter aufruft, der gleich HighImportance ist, wird der DPC am Anfang der Warteschlange platziert.

Für gewöhnliche (nicht threaded) DPCs bestimmt KeSetImportanceDpc auch, ob KeInsertQueueDpc oder IoRequestDpc sofort mit der Verarbeitung der DPC-Warteschlange beginnen. In der folgenden Liste werden die Regeln für die Verarbeitung der Warteschlange beschrieben:

  • Die Verarbeitung der DPC-Warteschlange beginnt sofort, wenn der DPC dem aktuellen Prozessor zugewiesen ist und die Wichtigkeit nicht gleich LowImportance ist, oder wenn Die Wichtigkeit gleich LowImportance ist und die DPC-Warteschlangentiefe des aktuellen Prozessors einen systemdefinierten Grenzwert überschreitet oder die DPC-Anforderungsrate unter ein systemdefiniertes Minimum gefallen ist. Andernfalls wird die Verarbeitung des DPC verzögert, bis die entsprechenden Warteschlangentiefe- und -ratenanforderungen erfüllt sind.

  • Die Verarbeitung der DPC-Warteschlange beginnt sofort auf dem Zielprozessor, wenn der DPC einem Prozessor zugewiesen ist, der sich vom aktuellen Prozessor unterscheidet und Die WichtigkeitmediumHighImportance oder HighImportance ist, oder wenn die DPC-Warteschlangentiefe des Zielprozessors einen systemdefinierten Grenzwert überschreitet. Andernfalls wird die Verarbeitung des DPC verzögert, bis die entsprechenden Warteschlangentiefe- und -ratenanforderungen erfüllt sind.