Informatik · Klasse 10–13 · aktualisiert
Interrupt erklärt: Ablauf, IRQ und sichere ISR
Du unterscheidest Interrupt, IRQ und ISR, erklärst den Ablauf, vergleichst mit Polling und wendest Maskierung und Prioritäten an.
0 von 9 Aufgaben gelöst
Kurz gesagt
Ein Interrupt unterbricht kurzfristig das laufende Programm. Der IRQ ist die Anforderung, die ISR die Routine, die danach läuft. Die ISR sichert die Register, die sie benutzt, stellt sie am Ende wieder her und löscht den IRQ. Polling fragt dagegen zyklisch ab.
Du drückst eine Taste, während die CPU gerade ein anderes Programm abarbeitet. Die Tastatur meldet sich dann mit einer Unterbrechungsanforderung. Hier lernst du, wie das abläuft. Du lernst auch, warum Fehler beim Sichern der Register in fremden Programmen schwer zu verfolgen sind.
Deine Lernziele
Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Mela das Ziel für dich ab.
4 Abschnitte
Normalerweise arbeitet die CPU ein Programm Befehl für Befehl ab. Ein Interrupt unterbricht das kurzfristig, um einen in der Regel kurzen, aber zeitlich kritischen Vorgang abzuarbeiten. Das Wort kommt vom englischen „to interrupt“, also unterbrechen.
Drei Begriffe gehören dazu, und sie meinen verschiedene Dinge. Der IRQ (Interrupt Request, Unterbrechungsanforderung) ist das auslösende Ereignis. Danach führt der Prozessor eine Unterbrechungsroutine aus, kurz ISR (Interrupt Service Routine). Ein Beispiel: Die Festplatte meldet sich, wenn die zuvor angeforderten Daten gelesen wurden und zur Abholung bereitstehen.
Hardware-Interrupts werden durch asynchrone externe Ereignisse ausgelöst. Asynchron heißt: Das laufende Programm wird nicht an immer der gleichen Stelle unterbrochen. Bei vielen Prozessoren kann ein Interrupt auch vom Programmcode selbst kommen, und zwar mit einem Maschinenbefehl („INT nn“). Das ist ein Software-Interrupt. Er ist eher mit einem Unterprogramm-Aufruf vergleichbar.
Definition
Interrupt
Eine kurzfristige Unterbrechung der normalen Programmausführung, um einen in der Regel kurzen, aber zeitlich kritischen Vorgang abzuarbeiten.
| Begriff | Bedeutung | Rolle |
|---|---|---|
| Interrupt | kurzfristige Unterbrechung der Programmausführung | die ganze Unterbrechung |
| IRQ | Unterbrechungsanforderung | das auslösende Ereignis |
| ISR | Unterbrechungsroutine | läuft nach der Anforderung ab |
Merke: Der IRQ ist die Anforderung, die ISR die Routine, die der Prozessor danach ausführt.
Teste dich
Das Gerät muss interruptfähig sein: Bei einem bestimmten Ereignis erzeugt es über die Interrupt-Leitung ein Ausgangssignal. Mehrere Geräte hängen oft an einem Interrupt-Controller. Das ist ein Baustein, der mehrere Interrupt-Eingänge zu einem Signal zusammenführt.
Schritt 1: Solange der Interrupteingang der CPU oder der einzelne Interrupt im Interrupt-Controller maskiert (gesperrt) ist, passiert nichts weiter. Anforderungen werden nur nach Ablauf der gerade laufenden Instruktion akzeptiert. Normalerweise bleiben sie bestehen, bis sie akzeptiert werden.
Schritt 2: Der Interrupt-Controller bestimmt den Interruptvektor des IRQs mit der höchsten Priorität, der nicht maskiert ist. Schritt 3: Die CPU akzeptiert die Anforderung und führt den Interruptzyklus durch. Je nach CPU liest sie dabei den Interruptvektor vom Datenbus. Danach wird der Interrupteingang automatisch maskiert, damit nicht beliebig viele geschachtelte Interruptsequenzen auftreten und den Stack überlaufen lassen.
Schritt 4: Im Interruptzyklus wird der alte Befehlszählerstand auf dem Stack gespeichert, einem Speicherbereich für Zwischenwerte. Bei einigen Architekturen gilt das auch für das Statusregister. Der neue Befehlszählerstand wird aus bestimmten Speicherstellen oder aus einer Interrupttabelle gelesen.
Schritt 5: Die ISR startet. Sie muss zunächst die Inhalte aller Register, die sie selbst benutzen wird, auf den Stack kopieren. Register sind Speicherplätze in der CPU. Schritt 6: Die eigentliche Behandlung läuft ab. Vor oder während der ISR wird die bearbeitete Anforderung gelöscht, damit sie nicht erneut ausgelöst wird.
Schritt 7: Die ISR stellt alle von ihr gesicherten Register wieder her. Schritt 8: Der Rücksprung (RTI) holt den alten Befehlszähler vom Stack zurück. Das Programm steht dann wieder da wie vor der Unterbrechung, so als wäre nichts gewesen.
Definition
Interruptvektor
Die Programmadresse, an die bei einem Interrupt gesprungen wird. Dort steht die ISR. Jede Interruptquelle hat einen eigenen Interruptvektor.
Beispiel: Ein Tastendruck (Ablauf in groben Schritten)
- 1Die Tastatur legt ein Signal auf den Bus oder an einen IRQ-Eingang der CPU.
- 2Ist der Interrupt nicht maskiert, bestimmt der Interrupt-Controller den passenden Vektor.
- 3Die CPU legt den alten Befehlszählerstand auf dem Stack ab und springt zur ISR.
- 4Die ISR sichert ihre Register und liest das Zeichen von der Tastatursteuerung.
- 5Sie stellt die Register wieder her. Der Rücksprung setzt das unterbrochene Programm fort.
Merke: Reihenfolge: Befehlszähler auf den Stack, Register sichern, behandeln, Register wiederherstellen, Rücksprung.
Teste dich
Es gibt zwei Wege, wie die CPU erfährt, dass ein Gerät etwas will. Beim Polling fragt sie in regelmäßigen, kurzen Abständen bei jedem Gerät nach, ob ein Ereignis eingetreten ist. Bei der Interruptsteuerung meldet sich das Gerät von selbst mit einem IRQ.
Polling ist einfacher und braucht keine zusätzliche Hardware. Es ist aber sehr viel ineffizienter als Interrupts, weil es die CPU viel stärker in Anspruch nimmt. Eine naive Polling-Lösung kann die Systemlast sogar auf 100 % treiben. Außerdem hängt die Reaktionsgeschwindigkeit davon ab, wie viel Zeit zwischen den Abfragen vergeht. Das kann kritisch sein, wenn sofort reagiert werden muss. Bei Multitasking-Betriebssystemen ist Polling als alleinige Methode nicht möglich.
Bei Interrupts kann sich die CPU mit voller Leistung einer Anwendung widmen und wird nur kurz unterbrochen. Selbst bei sehr schnellem Schreiben kann die CPU viele Millionen von Befehlen zwischen zwei Tastenbetätigungen ausführen. Millionen Male nachzusehen, ob es etwas Neues von der Tastatur gibt, wäre „unwirtschaftlich“. Dafür ist die Behandlung von Interrupts erheblich schwieriger zu programmieren. Mehrere Ereignisse können gleichzeitig eintreten, deshalb müssen Prioritäten gesetzt werden.
Polling kann trotzdem sinnvoll sein. Das gilt zum Beispiel bei einer sehr schnellen Abfrage, die binnen Mikrosekunden den gewünschten Zustand erreicht. Es gilt auch, wenn ohnehin eine zyklische Aktivität läuft, in der das Polling stattfinden kann.
Definition
Polling
Eine zyklische Abfrage, die den Status von Hard- oder Software oder eine Wertänderung ermittelt.
| Kriterium | Polling | Interrupt |
|---|---|---|
| Programmieren | einfacher, keine zusätzliche Hardware | erheblich schwieriger, Prioritäten nötig |
| CPU-Belastung | nimmt die CPU viel stärker in Anspruch | CPU wird nur kurz unterbrochen |
| Reaktionszeit | hängt vom Abstand der Abfragen ab | Gerät meldet sich von selbst |
Beispiel: Türklingel oder Milch?
- 1Mit Türklingel (Interrupt): Du erledigst deine Aufgaben und wendest dich dem Gast zu, wenn es klingelt.
- 2Ohne Klingel (Polling): Du müsstest immer wieder an der Tür nachschauen, ob Besuch da ist.
- 3Milch erhitzen: Hier ist es wohl besser, nicht auf das Überkochen zu warten, sondern den Vorgang regelmäßig zu überwachen.
Teste dich
Maskierung heißt: Die CPU ignoriert Unterbrechungsanforderungen zeitweise. Das kann zum Beispiel nötig sein, wenn gerade ein anderer Interrupt behandelt wird. Maskiert werden können alle Interrupts bis auf die nicht maskierbaren Interrupts (NMI). Die sind für spezielle Fälle gedacht, etwa Stromausfall oder Hardwarefehler. Der INTR-Eingang der CPU lässt sich dagegen sperren. Meist wird er nur für eine sehr kurze Zeit gesperrt, damit die CPU in kritischen Phasen nicht durch einen weiteren Interrupt gestört wird. Eine gesperrte Anforderung bleibt normalerweise bestehen, bis sie akzeptiert wird.
Treffen mehrere IRQs gleichzeitig ein, wählt der Interrupt-Controller den wichtigsten aus, der nicht maskiert ist. Die anderen werden im Anschluss bearbeitet. Beim 8259, einem Interrupt-Controller mit 8 Eingängen, hat im Normalfall der Eingang 0 die höchste und der Eingang 7 die niedrigste Priorität.
Die ISR hat drei Pflichten. Erstens sichert sie die Register, die sie selbst benutzen wird, auf dem Stack. Sonst können die Daten des unterbrochenen Programms nicht wiederhergestellt werden. Machst du dabei Fehler, führt das zu zufälligen Fehlerauswirkungen in fremden Programmen, die nur schwer zu verfolgen sind. Zweitens stellt sie am Ende alle gesicherten Register wieder her. Ob das Statusregister die CPU automatisch sichert oder die ISR, hängt von der Architektur ab.
Drittens muss die bearbeitete Anforderung (IRQ) vor oder während der ISR gelöscht werden, damit sie nicht erneut ausgelöst wird. Bei Intel(=PC)-kompatiblen Architekturen geschieht das durch Input/Output-Instruktionen in der Routine. Die Maskierung innerhalb einer ISR aufzuheben, ist nur mit besonderen Softwarekonzepten erlaubt. Sonst kann ein fremder Interrupt dazwischenfunken, oder derselbe Interrupt kann erneut eintreten, bevor die ISR fertig ist.
Definition
Maskierung
Die zeitweilige Sperrung (Deaktivierung) von Unterbrechungsanforderungen. Sie ist für alle Interrupts bis auf den NMI möglich.
Beispiel: Tastatur und Festplatte melden sich zugleich
- 1Die Tastatur hat die zweithöchste Priorität. Der Festplattencontroller (IRQ 14) hat eine relativ geringe.
- 2Sind beide nicht maskiert, kommt die Tastatur zuerst dran.
- 3Schafft die CPU den IRQ 14 hin und wieder nicht rechtzeitig, ist das nicht so schlimm wie eine verpasste Taste.
- 4Grund: Nach einer weiteren Umdrehung der Festplatte (dauert 8 Millisekunden) kommen die Daten erneut am Lesekopf vorbei.
Merke: Eine ISR sichert die Register, die sie benutzt, stellt sie am Ende wieder her und sorgt dafür, dass der bearbeitete IRQ gelöscht wird.
Teste dich
Alles auf einen Blick
Interrupt
Begriffe
Der IRQ ist die Anforderung, die ISR die Routine danach, der Interrupt die Unterbrechung.
Ablauf
Maskierung prüfen, Vektor bestimmen, Befehlszähler auf den Stack, ISR läuft, Rücksprung.
Polling
einfacher, aber sehr viel ineffizienter, weil die CPU stärker beansprucht wird.
Maskierung
Alle Interrupts außer dem NMI lassen sich zeitweise sperren.
ISR-Pflichten
Benutzte Register sichern, wiederherstellen und den bearbeiteten IRQ löschen.
Musteraufgabe · Schritt für Schritt
Drei IRQs gleichzeitig (ausgedachtes Beispiel)
- 1Annahme: Am 8259 melden sich gleichzeitig die Eingänge 1, 4 und 6. Es gilt der Normalfall: Eingang 0 höchste, Eingang 7 niedrigste Priorität.
- 2Teil a) Nichts ist maskiert. Die Reihenfolge nach Priorität ist Eingang 1, dann 4, dann 6.
- 3Teil b) Nur der Einzelinterrupt an Eingang 4 ist maskiert. Maskierte zählen nicht, also kommt zuerst Eingang 1, dann Eingang 6.
- 4Der IRQ von Eingang 4 löst zunächst nichts aus. Normalerweise bleibt er bestehen, bis er akzeptiert wird.
- 5Teil c) Die ISR an Eingang 1 benutzt das Register R1 (ausgedachter Name). Sie kopiert R1 zuerst auf den Stack und stellt es am Ende wieder her.
- 6Außerdem sorgt sie dafür, dass der IRQ gelöscht wird, damit er nicht erneut ausgelöst wird.
Fehler finden
Prüfe die Aussagen zu einer ISR für eine Netzwerkkarte (ausgedachtes Beispiel) In einer Zeile steckt ein Fehler. Tippe sie an.
Fehler in Zeile 4Die ISR stellt nicht nur ein Register wieder her, sondern alle, die sie gesichert hat. Sonst fehlen dem unterbrochenen Programm Daten. Richtig: Sie stellt A und B wieder her.
Lückentext
Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.
Der Prozessor führt nach der Unterbrechungsanforderung eine Routine aus, die heißt. Ein Interrupt, den die CPU nicht sperren kann, kommt über den Pin , zum Beispiel bei einem Stromausfall. Im Normalfall hat beim 8259 der Eingang 0 die Priorität.
Karteikasten
Erst selbst überlegen, dann umdrehen.
Übung mit Feedback