Hardware-Zone Schriftzug

Neueste Artikel

Interrupt-Behandlung

Die CPU ist ständig mit der Verarbeitung von Befehlen und Daten des laufenden Programms beschäftigt. Aus diesem Grund ist es nicht möglich, auf spontan auftretende Ereignisse, wie z.B. das Drücken einer Taste, sofort zu reagieren. Früher hat sie jedes einzelne Gerät regelmäßig abgefragt, ob ein wichtiges Ereignis ansteht. Dieses als Polling bezeichnete Verfahren war sehr ineffizient, da die CPU die meiste Zeit im Wartezustand verbracht hat, anstelle sich weiter um die Abarbeitung von Befehlen zu kümmern. Bei modernen CPUs meldet sich das jeweilige Gerät bei Auftreten eines Ereignisses von sich aus. Diese Anfrage bezeichnet man auch als Unterbrechungsanforderung (IRQ  = Interrupt ReQuest) oder einfach Interrupt, da die CPU den aktuellen Prozess als Reaktion darauf unterbricht.

Arten von Interrupts

Hardware-Interrupts

 

Hardware-Interrupts, auch externe Interrupts genannt, werden von Ein-/Ausgabegeräten oder von Controllern (Steuerungschips) ausgelöst, meist nach einer abgeschlossen Ein-/Ausgabeoperation. Ein wohl jedem bekannter Hardware-Interrupt wird durch den Reset-Schalter ausgelöst. Weitere Beispiele für Geräte und Ereignisse, die IRQs auslösen können:

  • Systemzeitgeber: Ablauf eines Timers (z.B. zur Synchronisation von Abläufen)
  • Tastatur, Maus: Drücken einer Taste
  • Grafikkarte: Fertig berechnetes Bild wurde in den Framebuffer (den auf dem Bildschirm sichtbaren Bereich des Grafikspeichers) geschrieben
  • Festplatten-Controller: Angefragter Datenblock wurde in den Arbeitsspeicher/auf die Festplatte geschrieben
  • Netzwerkkarte: Angeforderte Daten stehen im Puffer abholbereit zur Verfügung
  • Drucker: Eine Seite wurde ausgedruckt

Solche normalen Hardware-Interrupts (maskierbare Interrupts) können durch ein Programm auch deaktiviert werden. Es gibt aber auch nicht-maskierbare Hardware-Interrupts (NMIs), die nur bei kritischen Ereignissen (z.B. Auftritt eines Speicherfehlers) ausgelöst und deshalb behandelt werden müssen.

Software-Interrupts

Software-Interrupts werden durch laufende Programme ausgelöst, häufig beim Auftreten eines Fehlers. Sie werden auch als Traps (von der CPU selbst ausgelöst) oder Exceptions (von Programmen ausgelöst) bezeichnet. Beispiele:

  • Arithmetischer Überlauf (overflow): Ergebnis liegt außerhalb des darstellbaren Zahlenbereichs (z.B. wenn sich durch Additiion zweier 32-Bit-Werte ein 33-Bit-Wert ergibt, der nicht in ein 32-Bit breites Register passt)
  • Stapelüberlauf: Es wurde versucht Daten auf dem Stapel abzulegen, obwohl dieser bereits voll ist.
  • Ressource nicht gefunden: Die Daten, auf die das Programm zugreift, sind nicht mehr an der angegebenen Stelle auf der Festplatte/im Speicher vorhanden oder es kann nicht darauf zugegriffen werden.
  • Division durch 0
  • Seitenfehler
  • Schutzverletzung: Das Programm hat versucht, auf einen geschützten Speicherbereich zuzugreifen.

Ablauf

Die Behandlung eines Interrupts läuft wie folgt ab:

  1. Der aktuelle Prozess wird unterbrochen.
  2. Der Inhalt des Befehlszählers wird auf dem Stapel (Stack) abgelegt.
  3. Der dem Gerät zugeordnete Vektor bzw. Eintrag wird aus einer Tabelle im Arbeitsspeicher geholt. Die Vektortabelle enthält zu jeder Interruptquelle (das auslösende Gerät oder der auslösende Prozess) einen Verweis auf die Interrupt Service Routine (ISR), also die Befehle, die zur Behandlung dieses Interrupts ausgeführt werden.
  4. Die Unterbrechungsroutine wird ausgeführt. Bevor die ISR die Register überschriebt, übertragt sie deren Inhalte auf den Stack.
  5. Die ursprünglichen Inhalte werden wieder in die Register zurückgeschrieben und die ISR wird beendet.
  6. Der vorherige Zustand des Befehlszählers wird wiederhergestellt.
  7. Der Prozess wird fortgesetzt.
irq 3o66qkgj

Die Vektortabelle wird eingesetzt, um abhängig vom Gerät, das den Interrupt ausgelöst hat, ein eigenes Unterprogramm zur Behandlung einsetzen zu können. Ansonsten wäre die Verwendung mehrerer, unterschiedlicher Geräte gar nicht möglich.