Ein Interrupt tritt auf, wenn ein Mikroprozessor seine aktuelle Arbeit unterbricht, um auf ein Ereignis zu reagieren, das von außen kommt und nicht Teil des aktuellen Programms ist. Meistens werden Unterbrechungen von der Hardware ausgelöst — zum Beispiel durch ein Signal, das an den Prozessor gesendet wird — aber sie können auch durch laufende Software verursacht werden. Häufige Auslöser sind das Drücken einer Taste auf einer Tastatur, das Ablaufen eines Timers, das Ende einer Datenübertragung oder jedes andere Ereignis, das eine sofortige Reaktion des Prozessors erfordert. Unterbrechungen können jederzeit auftreten, während der Prozessor ein Programm ausführt, unabhängig davon, wo im Quellcode sich der Prozessor gerade befindet.
Typen von Interrupts
- Hardware-Interrupts: Von Peripheriekomponenten (z. B. Tastatur, Netzwerkadapter, Timer, DMA-Controller) erzeugt.
- Software-Interrupts: Explizit durch Instruktionen im Programm erzeugt (z. B. Systemaufrufe) oder durch fehlerhafte Bedingungen.
- Maskierbare vs. nicht-maskierbare Interrupts: Maskierbare Interrupts können vorübergehend deaktiviert (maskiert) werden; nicht-maskierbare Interrupts (NMI) müssen sofort behandelt werden, z. B. bei kritischen Fehlern.
- Synchronous vs. Asynchronous: Synchronous (z. B. Ausnahmen/Exceptions) treten als direkte Folge einer Instruktion auf; asynchronous (z. B. externe Hardware-Interrupts) können zu beliebigen Zeiten eintreten.
Wie ein Interrupt technisch abläuft
Der typische Ablauf einer Interrupt-Behandlung umfasst mehrere Schritte:
- Erkennung: Der Prozessor erkennt das Interrupt-Signal (extern oder intern).
- Vektorierung: Dem Interrupt wird eine Nummer bzw. Adresse (Interrupt-Vektor) zugeordnet, die auf die entsprechende Interrupt-Service-Routine (ISR) verweist.
- Kontext speichern: Registerinhalt, Programmzähler und Status werden gesichert, damit später an der gleichen Stelle weitergearbeitet werden kann.
- ISR ausführen: Die zugeordnete Routine bearbeitet das Ereignis (z. B. Lesepuffer füllen, Status zurücksetzen).
- Kontext wiederherstellen: Nach Beendigung der ISR werden gesicherte Register und Status wiederhergestellt und die Ausführung des unterbrochenen Programms fortgesetzt.
Wichtige Konzepte
- Interrupt-Service-Routine (ISR): Spezielle Funktion, die das Interrupt-Ereignis behandelt. ISRs müssen kurz, deterministisch und reentrant bzw. geschützt sein.
- Interrupt-Vektor und Tabellen: Moderne Systeme nutzen eine Interrupt-Tabelle, die Vektoren auf ISRs enthält. x86-Systeme z. B. haben ein Interrupt Descriptor Table (IDT).
- Prioritäten und Maskierung: Mehrere Interrupts können gleichzeitig auftreten; Prioritätssysteme (oder Controller wie PIC/APIC) bestimmen die Reihenfolge. Maskierung verhindert oder erlaubt bestimmte Interrupts vorübergehend.
- Verschachtelung (Nested Interrupts): Höherprioritäre Interrupts können eine laufende ISR unterbrechen, sofern das System dies erlaubt.
- Interrupt-Latenz: Zeit zwischen Auslösen des Interrupts und Beginn der ISR. Kritisch in Echtzeitsystemen.
Interrupts vs. Polling
Polling bedeutet, dass die CPU regelmäßig prüft, ob ein Gerät etwas zu tun hat. Interrupts sparen CPU-Zeit, weil die CPU nur reagiert, wenn wirklich ein Ereignis eintritt. Polling kann einfacher implementiert sein, ist aber ineffizienter und weniger reaktionsschnell, besonders bei seltenen Ereignissen.
Anwendungsbereiche
- Echtzeitsysteme (z. B. Steuerungen) — schnelle Reaktion auf Sensoren und Timer.
- Betriebssysteme — Verwaltung von Ein-/Ausgabe, Systemaufrufen und Kontextwechseln.
- Peripheriegeräte und Treiber — Signalisierung abgeschlossener DMA-Transfers oder neuer Daten.
- Fehlerbehandlung — nicht-maskierbare Interrupts für Hardwarefehler.
Vor- und Nachteile
- Vorteile: Reaktionsschnell, effizienter Ressourcenverbrauch, ermöglicht asynchrone Ereignisverarbeitung.
- Nachteile: Komplexere Programmierung (Race-Conditions, Synchronisation), Overhead durch Kontextwechsel, schwierige Echtzeitgarantien ohne sorgfältiges Design.
Praxis-Tipps
- Halte ISRs so kurz wie möglich und delegiere aufwändige Arbeit an Hintergrundtasks oder Threads.
- Vermeide in ISRs blockierende oder lang laufende Operationen.
- Nutze geeignete Synchronisationsmechanismen (z. B. atomare Operationen) zwischen ISR und Hauptprogramm.
- Teste Interrupt-Latenzen und Prioritäten in realen Szenarien, besonders in zeitkritischen Anwendungen.
Zusammengefasst sind Interrupts ein zentrales Mittel, damit Prozessoren effizient und zeitgerecht auf externe und interne Ereignisse reagieren können. Ihr korrektes Design und ihre Handhabung sind entscheidend für Stabilität, Performance und Vorhersagbarkeit eines Systems.
