Maskierte Interrupts (hat nix mit Fasching zu tun)
-
Hi Zusammen,
ich habe mir jetzt schon so einige Artikel zu Interrupt Handling und IRQLs unter Windows durchgelesen, nur eine Frage bleibt scheinbar immer offen:
Es heißt ja immer, dass die Interrupts mit einer niedrigeren IRQL maskiert werden. Nur wie ? Die Hardware-Architektur unterstützt das ja nicht. Ich kenne bis jetzt nur 'sti' und 'cli', um Interrupts entweder komplett an- oder auszuschalten. Heißt das etwa, dass wenn der Interrupt auftritt, dann prüft Windows mittels einer eigenen Routine erst einmal ob die IRQL des Prozessors gerade niedriger ist als die des Gerätes, das den Interrupt angefordert hat und springt nur unter der Bedingung zur ISR ?
Das wäre dann doch blöd, weil ja der Interrupt dann *in einer Weise* trotzdem angenommen würde.Irgendwie geht mir gerade nicht ein, wo dieser IRQL-Vergleich stattfinden soll zwischen dem gerade laufenden Thread und dem Interrupt, bzw. diese "Maskierung". Oder wird bei Anhebung der IRQL-Einstellung auch der PIC neu programmiert oder so...?
Null Durchblick nenn' ich das mal

Würde mich freuen, wenn mir da jemand beim Bridgen der Knowledge-Gap helfen könnte ^^Greetings, Xzi-bit
-
Normalerweise müsste Windows auf dem PIC alle niedrigeren Interrupts maskieren.
Das wär allerdings furchtbar langsam.
Daher ist in HAL's die einen PIC verwenden ein Mechanismus namens "lazy IRQL" eingebaut.Das heisst, wenn ein Interrupt auftritt, setzt der Kernel nur eine Variable(pro CPU) im Speicher auf das aktuelle IRQL. Sobald jetzt aber ein IRQ mit niedriger Priorität auftreten *sollte*, merkt sich der Kernel diesen um ihn später zu behandeln und Maskiert *jetzt* die Interrupts im PIC.
Gute Informationen zu diesem und ähnlichen Themen findest du im Buch "Windows Internals" von MS Press.
Ich hoffe ich konnte dir helfen,
MFG TheRightWay
-
Ich hoffe ich konnte dir helfen
Ja und wie - hammergeil ! Danke, Mann.
Greetz, Xzi-bit