Folgendes gilt für die x86-Architektur nur, aber auch andere Architekturen könnten auch nach dem gleichen Muster:
Es ist ein Prozessor-Flag IF
(Interrupt Flag) genannt, der steuert, ob Hardware-Interrupts verarbeitet werden können, oder müssen in die Warteschleife gelegt werden. Wenn IF = 0 ist, werden Interrupts verschoben, bis das Flag erneut aktiviert wird (mit Ausnahme des NMI, des nicht maskierbaren Interrupts, der als ein Nur-Not-Interrupt gedacht ist, der nicht blockiert werden kann).
Die IF
wird automatisch vom Prozessor gelöscht, bevor eine Interrupt-Wartungsroutine aufgerufen wird. Dies ist notwendig, um zu verhindern, dass Interrupt-Aufrufe außer Kontrolle geraten. Beachten Sie, dass der Interrupt-Servicing-Code selbst dies nicht selbst tun konnte, denn wenn IF
vor dem Aufruf der Routine nicht deaktiviert wurden, konnten mehr Interrupts auftreten, bevor der Service-Code Zeit hatte, selbst einen einzelnen Befehl auszuführen. Dann würde ein "Firehose" von Interrupts sofort (in allen Dingen) zu einem Stapelüberlauf führen.
Also, als Antwort auf Ihre direkte Frage: In der Regel, wenn eine zweite Hardware-Interrupt auftritt, während eine erste gewartet wird, wird dieser Interrupt in die Warteschleife gesetzt, bis der erste abgeschlossen ist.
Wie immer ist die ganze Geschichte ein bisschen komplizierter. Die Intel Architecture Software Developer’s Manual auf der Intel-Website gibt eine ausführlichere Beschreibung ab Seite 10-4.