Interrupt

In der Informatik versteht man unter Interrupt (lat. interruptus, Unterbrechung) die kurzfristige Unterbrechung eines laufenden Programmes oder, genauer gesagt, einer von der CPU abzuarbeitenden Befehlssequenz, um einen anderen Prozess, die Interrupt-Routine (Interrupt Service Routine, ISR), auszuführen. Anschließend wird die Ausführung des Programmes an der Unterbrechungsstelle fortgesetzt.

Sinn eines Interrupts ist z.B. die Möglichkeit einer schnellen Reaktion auf Signale von Ein/Ausgabe-Bausteinen oder Zeitgebern (Timern). Auch Multitasking wäre ohne Interrupts kaum möglich.

Ausgelöst werden Interrupts meist durch Elektronikkomponenten mittels einer so genannten "Unterbrechungs-Anfrage" (engl. Interrupt Request - IRQ). Die meisten Prozessoren kennen auch spezielle Interrupt-Befehle, um so genannte Software-Interrupts auszulösen. Bei den Hardwareinterrupts unterscheidet man zwischen maskierbaren Interrupts, deren Auslösung man (bei gewissen zeitkritischen Routinen) unterbinden kann, und nicht-maskierbaren Interrupts (NMI), die immer einen Sprung des Prozessors in die Interruptroutine auslösen.

Hardware-Beispiel x86-Architektur

Bei x86-Prozessoren gibt es 256 Interrupts. Wird ein Interrupt aufgerufen, egal ob von der Software oder von der Hardware, so werden Flagregister, Codesegment und Instruction Pointer auf dem Stack gesichert und zu einer Funktion gesprungen, deren Adresse - auch Interruptvektor genannt - in der Interrupttabelle steht.

Im Real Mode befindet sich diese Tabelle in dem ersten Kilobyte des Hauptspeichers (0000h:0000h-0000h:0400h). Jede Interruptnummer benötigt 4 Bytes, 2 Bytes für das Codesegment und 2 für den Offset innerhalb des Segments.

Im Protected Mode der CPU wird die Position in der Interrupt-Deskriptor-Tabelle festgelegt. Hier benötigt sie jedoch mehr Speicher, da hier für jeden Interrupt ein Deskriptor gebraucht wird.

Ablaufbeispiel

Aufgaben der untersten Schicht eines Betriebssystems beim Auftreten einer Unterbrechung:

  1. Hardware sichert Befehlszähler
  2. Hardware holt neuen Befehlszähler vom Interruptvektor
  3. Assemblerfunktion (oder Hardware) speichert Register
  4. Assemblerfunktion erzeugt neuen Stack
  5. C-Unterbrechungsroutine läuft (puffert Ein- und Ausgaben)
  6. Scheduler sucht nächsten Prozess
  7. C-Funktion kommt zur Assemblerfunktion zurück
  8. Assemblerfunktion startet neuen aktuellen Prozess

Weblinks

See also: Interrupt, Befehlszähler, Betriebssystem, CPU, Deskriptor (Prozessor), Hardwareinterrupt, Informatik, Interrupt Request, Latein, Multitasking