Interrupt

Aus Lowlevel
Wechseln zu:Navigation, Suche

Ein Interrupt ist ein Ereignis, welches die Arbeit der CPU unterbricht, um eine andere Routine auszuführen. Die CPU kann durch verschiedene Ursachen unterbrochen werden:

  • ein Peripheriegerät fordert die Behandlung eines Interrupts (IRQ)
  • im Programmfluss wird mit der Instruktion int <n> ein Software-Interrupt ausgelöst
  • im Programm tritt eine Exception auf

Arten von Interrupts

Es wird zwischen synchronen und asynchronen Unterbrechungen unterschieden. Als asynchrone Unterbrechungen werden Interrupts bezeichnet, die nicht vorhersagbar und nicht reproduzierbar sind. Sie treten bei wiederholter Ausführung des Programms nicht wieder oder nicht an der selben Stelle auf. Synchrone Interrupts werden hingegen ausgelöst, wenn die CPU genau definierte Bedingungen vorfindet, während sie eine Instruktion ausführt. Sie sind somit reproduzierbar und vorhersagbar.

Synchrone Interrupts

Synchrone Interrupts werden bei der Intel Architektur in 3 Klassen aufgeteilt:

  • Traps: Breakpoints, Overflow (INTO)
  • Exceptions: z.B. Division durch 0, Page Faults
  • Aborts: Double Fault

Asynchrone Interrupts

Asynchrone Interrupts treten bei Ereignissen auf, die nicht vom Programm gezielt hervorgerufen wurden. Darunter fallen IRQs, die von Peripheriegeräten ausgelöst werden, und z.B. (aus Sicht eines Programms) Page Faults in Folge einer Auslagerung von Seiten aus dem RAM auf die Festplatte durch das Betriebssystem.

Interrupt-Behandlung

Wenn ein Interrupt ausgelöst wird, sichert die CPU die Register EFLAGS, CS und EIP auf dem Stack. Danach wird eine Behandlungsroutine angesprungen, die in der IDT (Protected Mode) bzw. in der IVT (Real Mode) angegeben ist. Diese kehrt nach ihrer Ausführung im Allgemeinen mit dem Befehl iret zur Stelle, an der unterbrochen wurde, zurück.

In Interrupt-Behandlungsroutinen sollte je nach Art des Interrupts reagiert werden:

  • In IRQs muss in der Regel das entsprechende Gerät ausgelesen werden. Außerdem muss der Erhalt der IRQs beim PIC quittiert werden.
  • Bei Software Interrupts sollte z.B. eine Systemfunktion im Kernel ausgeführt werden
  • Exceptions müssen entweder gelöst werden, oder zum Abbruch des Programms führen

Sperrung der Interrupts

Interrupts können mit Hilfe der Instruktionen sti und cli ein- bzw. ausgeschaltet werden. Dabei wird das Interrupt Flag im Register EFLAGS gesetzt bzw. zurückgesetzt. Der Aufruf von Software-Interrupts, sowie Non-Maskable Interrupts können damit nicht unterbunden werden.

Siehe auch

Links