Freigeben über


Synchronisieren von Interruptcode

Die folgenden Faktoren erschweren den Treibercode, der Hardwareunterbrechungen auf Multiprozessorsystemen verarbeitet:

  • Jedes Mal, wenn ein Gerät unterbrochen wird, stellt es interruptspezifische Informationen bereit, die flüchtig sind, da es bei der nächsten Unterbrechung des Geräts überschrieben werden kann.

  • Geräte unterbrechen bei relativ hohen IRQLs, und ihre Interruptdienstroutinen (ISRs) können die Ausführung anderer Treibercodes unterbrechen.

  • Bei DIRQL-Interrupts muss die ISR bei DIRQL ausgeführt werden, während eine vom Treiber bereitgestellte Drehsperre beibehalten wird, damit die ISR zusätzliche Unterbrechungen verhindern kann, während flüchtige Informationen gespeichert werden. Der DIRQL verhindert eine Unterbrechung durch den aktuellen Prozessor, und die Drehsperre verhindert die Unterbrechung durch einen anderen Prozessor.

  • Die ISR muss schnell ausgeführt werden, da das Gerät während der Ausführung der ISR nicht unterbrechen kann. Lange ISR-Ausführungszeiten können das System verlangsamen oder möglicherweise zu Datenverlust führen.

  • Sowohl die ISR- als auch die DPC-Routine (Verzögerter Prozeduraufruf) müssen in der Regel auf einen Speicherbereich zugreifen, in dem der ISR die flüchtigen Daten des Geräts speichert. Diese Routinen müssen miteinander synchronisiert werden, damit sie nicht gleichzeitig auf den Speicherbereich zugreifen.

Aufgrund all dieser Faktoren müssen Sie beim Schreiben von Treibercode, der Interrupts behandelt, die folgenden Regeln verwenden:

Weitere Informationen zum Synchronisieren von Treiberroutinen finden Sie unter Synchronisierungstechniken für Framework-Based Treiber.