Interrupt
Ein Interrupt ist ein Signal, das von einem an einen Computer angeschlossenen Gerät oder von einem Programm innerhalb des Computers ausgegeben wird. Es verlangt vom Betriebssystem, dass es anhält und herausfindet, was als nächstes zu tun ist. Ein Interrupt hält vorübergehend einen Dienst oder einen laufenden Prozess an oder beendet ihn. Die meisten E/A-Geräte verfügen zu diesem Zweck über eine Bussteuerleitung, die Interrupt Service Routine (ISR) genannt wird.
Ein Interrupt-Signal kann geplant (das heißt von einem Programm speziell angefordert) oder ungeplant sein (das heißt durch ein Ereignis ausgelöst werden, das nicht unbedingt mit einem gerade auf dem System laufenden Programm zusammenhängt).
Heutzutage sind fast alle Computersysteme Interrupt-gesteuert. Das heißt, sie folgen der Liste der Computeranweisungen in einem Programm und führen die Anweisungen aus, bis sie das Ende erreichen oder bis sie ein Interrupt-Signal wahrnehmen. Im letzteren Fall setzt der Computer entweder das aktuelle Programm fort oder beginnt mit dem Ausführen eines anderen Programms. In beiden Fällen muss er den Betrieb unterbrechen, um über die nächste Aktion zu entscheiden. Wenn der Geräteprozessor Interrupts verarbeitet, informiert er das Gerät, das eine Interrupt-Anforderung (IRQ) erkannt wurde. Dann hört das Gerät auf, das IRQ-Signal zu senden.
Ein Betriebssystem enthält in der Regel Code, der als Interrupt-Handler bezeichnet wird, um Interrupts zu priorisieren und sie in einer Warteschlange zu speichern, wenn mehr als ein Interrupt darauf wartet, bearbeitet zu werden. Außerdem verfügt es über ein Scheduler-Programm, das das nächste Programm bestimmt, das die Kontrolle erhält.
Wenn ein Interrupt auftritt, startet der zugehörige Dienst möglicherweise nicht sofort. Das Zeitintervall zwischen dem Auftreten des Interrupts und dem Beginn der ISR-Ausführung wird als Interrupt-Latenzzeit bezeichnet.
Arten von Interrupts
Interrupts werden in zwei Typen unterteilt:
- Hardware-Interrupts
Ein Hardware-Interrupt ist ein elektronisches Signal von einem externen Hardware-Gerät, das anzeigt, dass es die Aufmerksamkeit des Betriebssystems benötigt. Ein Beispiel dafür ist das Bewegen einer Maus oder das Drücken einer Tastaturtaste. Bei diesen Interrupts muss der Prozessor anhalten, um die Mausposition oder den Tastendruck zu diesem Zeitpunkt zu lesen.
Bei dieser Art von Interrupt sind alle Geräte mit der Interrupt Request Line (IRL) verbunden. In der Regel hat ein Hardware-IRQ einen Wert, der ihn mit einem bestimmten Gerät verknüpft. Auf diese Weise erkennt der Prozessor, welches Gerät durch das Auslösen des IRQ einen Dienst anfordert, und stellt den Dienst dann entsprechend bereit.
Es gibt drei Arten von Hardware-Interrupts:
Maskierbare Interrupts
Ein prozessorinternes Interrupt-Maskenregister schaltet Hardwareanforderungen selektiv ein und aus. Wenn das Maskenbit gesetzt ist, ist der Interrupt aktiviert. Wenn es gelöscht ist, ist der Interrupt deaktiviert. Signale, die von der Maske betroffen sind, sind maskierbare Interrupts.
Nicht maskenfähige Interrupts
In einigen Fällen lässt sich die Interrupt-Maske nicht deaktivieren, so dass sie einige Interrupt-Signale nicht beeinflusst. Solche nicht maskierbare Interrupts sind in der Regel Ereignisse mit hoher Priorität, die nicht ignoriert werden können.
Störende Interrupts
Auch als Phantom-Interrupt oder Ghost-Interrupt bekannt, ist ein Spurious Interrupt ein Hardware-Interrupt, für das es keine ermittelbare Quelle gibt. Sie sind schwer zu identifizieren, wenn sich ein System nicht korrekt verhält. Wenn der ISR die Möglichkeit solcher Interrupts nicht berücksichtigt, können sie das ganze System blockieren.
- Software-Interrupts
Ein Software-Interrupt tritt auf, wenn ein Anwendungsprogramm beendet wird oder bestimmte Dienste des Betriebssystems anfordert. Normalerweise fordert der Prozessor einen Software Interrupt an, wenn bestimmte Bedingungen erfüllt sind, indem er einen speziellen Befehl ausführt. Dieser Befehl ruft den Interrupt auf und funktioniert wie ein Unterprogrammaufruf. Software-Interrupts sind notwendig, wenn das System mit Gerätetreibern interagiert oder wenn ein Programm Betriebssystemdienste anfordert.
In einigen Fällen werden Software-Interrupts unerwartet durch Fehler bei der Programmausführung ausgelöst. Diese Interrupts werden als Exceptions oder Traps bezeichnet.
Interrupts versus Polling
Polling ist ein Zustand der kontinuierlichen Überwachung, bei dem ein Mikrocontroller in einem Computersystem ständig den Status aller Geräte überprüft. Das erste Gerät, das er mit dem IRQ-Bit antrifft, bedient er zuerst und ruft die entsprechende ISR auf, um dieses Gerät zu bedienen. Das System ist einfach zu implementieren und gewährleistet, dass die Komponente, die bedient werden muss, bekommt, was sie braucht.
Da der Mikrocontroller jedoch seine gesamte Verarbeitungszeit für das Polling verwendet, kann er zeitgleich keine weiteren Operationen durchführen. Außerdem verschwendet die Abfrage des IRQ-Bits aller Geräte viel Zeit. Interrupts bieten eine Lösung für dieses Problem. Mit ihnen muss der Controller den Status der Geräte nicht regelmäßig überwachen. Stattdessen reagiert er nur, wenn ein Interrupt auftritt. Wenn also ein Interrupt auftritt, wird der Controller benachrichtigt, dass er bedient werden muss.
Was ist eine ISR?
Für jeden Interrupt gibt es eine ISR. Die Adresse jedes ISR ist an einer festen Stelle im Speicher abgelegt. Ein ISR kann asynchrone Interrupts aufrufen und sowohl maskierbare als auch nicht-maskierbare Interrupts behandeln.
Wenn ein Interrupt auftritt, führt der Mikrocontroller die ISR aus. Zu Beginn deaktiviert der ISR die Interrupt-Dienste aller anderen Geräte, hält den Befehl an, der gerade verarbeitet wird, und speichert seine Konfiguration in einem Register. Dann lädt sie den Programmzähler des Interrupts von einer in der Interrupt-Vektortabelle angegebenen Stelle. Sobald die ISR-Ausführung abgeschlossen ist, werden alle Interrupt-Dienste neu initialisiert.
Es gibt zwei Haupttypen von Interrupt-Handlern:
- First-Level-Interrupt-Handler (FLIH). Ein harter oder schneller Interrupt-Handler, der maskierbare Interrupts behandelt und während der Prozessausführung Jitter hat
- Interrupt-Handler der zweiten Ebene (SLIH). Ein langsamer und weicher Interrupt-Handler mit weniger Jitter als FLIH
Arten von Interrupt-Methoden
Es gibt zwei Arten von Interrupt-Auslösungsmethoden oder -modulen:
Level-getriggerte Interrupts
Dieses Interrupt-Modul erzeugt einen Interrupt, indem es das Interrupt-Signal auf einem bestimmten aktiven logischen Pegel hält. Das Signal wird negiert, sobald der Prozessor den Befehl dazu gibt, nachdem das Gerät gewartet wurde. Der Prozessor tastet das Interrupt-Signal während jedes Befehlszyklus ab und erkennt, wenn es während des Abtastvorgangs eingefügt wird. Nachdem er ein Gerät bedient hat, kann der Prozessor weitere Geräte bedienen, bevor er den ISR verlässt.
Mit pegelgesteuerten Interrupts können sich mehrere Geräte ein gemeinsames Signal über verdrahtete ODER-Verbindungen teilen. Für Firmware ist es jedoch oft mühsam, mit ihnen umzugehen.
Edge-getriggerte Interrupts
Dieses Modul erzeugt nur dann einen Interrupt, wenn es einen durchsetzungfähigen Edge der Interrupt-Quelle feststellt. Dabei erzeugt das Gerät, das einen Interrupt signalisieren will, einen Impuls, der den Pegel der Interrupt-Quelle ändert.
Edge-getriggerte Interrupts bieten eine flexiblere Möglichkeit, Interrupts zu behandeln. Sie können sofort bedient werden, unabhängig davon, wie sich die Interrupt-Quelle verhält. Außerdem verringern sie die Komplexität des Firmware-Codes und reduzieren die Anzahl der für die Firmware erforderlichen Bedingungen. Der Nachteil ist, dass, wenn der Impuls zu kurz ist, um erkannt zu werden, spezielle Hardware erforderlich sein kann, um die Unterbrechung zu erkennen und zu bedienen.