Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Interrupt

Interrupts (genauer: Hardware-Interrupts) werden durch asynchrone externe Ereignisse ausgelöst. Asynchron bedeutet in diesem Zusammenhang, dass die laufende …

Inhalt5 Abschnitte
  1. 1. Begriff, Zweck und Grundidee
  2. 2. Arten und Eigenschaften
  3. 3. Ablauf der Verarbeitung
  4. 4. Priorität, Maskierung und Reaktionszeit
  5. 5. Beispiele und x86-Umsetzung

Begriff, Zweck und Grundidee

Ein Interrupt ist eine kurzfristige Unterbrechung der normalen Programmausführung. Er ermöglicht es dem Prozessor, einen meist kurzen, aber zeitkritischen Vorgang zu bearbeiten. Das auslösende Ereignis heißt Unterbrechungsanforderung oder Interrupt Request (IRQ). Daraufhin führt der Prozessor eine Unterbrechungsroutine aus, auch Interrupt Service Routine (ISR) oder Interrupt Handler genannt. Diese läuft bei geeigneten Prozessoren mit erweiterten Privilegien. Danach stellt der Prozessor seinen vorherigen Zustand einschließlich der Privilegierung wieder her und setzt das unterbrochene Programm an der Unterbrechungsstelle fort.

Interrupts sind besonders für Ein- und Ausgaben wichtig, etwa bei Tastatur, Festplatte, Netzwerk oder Zeitgeber. Während ein Gerät einen Auftrag bearbeitet, kann die CPU andere Aufgaben erledigen. Erst wenn beispielsweise ein Eingabepuffer voll, ein Ausgabepuffer leer, ein Fehler aufgetreten oder ein Timer abgelaufen ist, fordert das Gerät Aufmerksamkeit an.

Die Alternative ist Polling, also das regelmäßige, programmierte Abfragen eines Gerätezustands. Polling ist einfacher und benötigt keine zusätzliche Hardware, beansprucht die CPU aber wesentlich stärker. Seine Reaktionszeit hängt außerdem vom Abstand zwischen den Abfragen ab. Interrupts entsprechen dagegen einer Türklingel: Man arbeitet weiter, bis ein Ereignis Aufmerksamkeit verlangt. Präemptive Multitasking-Betriebssysteme benötigen Interrupts, um laufende Programme zu verdrängen, per Timesharing zwischen ihnen umzuschalten und gleichzeitig Ein-/Ausgabegeräte zu bedienen.

Arten und Eigenschaften

Hardware-Interrupts werden durch externe Ereignisse über einen IRQ-Kanal oder einen Prozessorpin ausgelöst. Sie sind gegenüber dem laufenden Programm asynchron: Der Interrupt kann das Programm an einer nicht vorherbestimmten Stelle treffen. Deshalb darf eine ISR ohne besondere Synchronisierung nicht direkt auf gemeinsam verwendete Programmvariablen oder Geräte zugreifen. ISRs sind keine Tasks des Betriebssystems.

Ein Software-Interrupt wird dagegen ausdrücklich durch einen Maschinenbefehl wie „INT nn“ ausgelöst. Er ähnelt eher einem Unterprogrammaufruf und ist nicht asynchron. Da die Routine auf einer höheren Privilegierungsebene laufen kann, verwenden manche Betriebssysteme diesen Mechanismus für Systemaufrufe. Auch Traps nutzen einen ähnlichen Ablauf. Sie können etwa bei geschützten Zugriffen, verbotenen Instruktionen, Division durch null, Singlestep-Debugging oder Ereignissen der Speicherverwaltung entstehen.

Weitere Einteilungen sind:

  • Präzise Interrupts hinterlassen die Maschine in einem wohldefinierten Zustand, unpräzise Interrupts nicht.
  • Maskierbare Interrupts können vorübergehend gesperrt werden. Nicht maskierbare Interrupts (NMI) lassen sich auch durch die Systemsoftware nicht verhindern und sind für besondere Fälle wie Stromausfall oder Hardwarefehler vorgesehen.
  • Level-sensitive Interrupts bleiben aktiv, solange ein bestimmter Logikpegel anliegt; möglich sind aktiv-high und aktiv-low. Flanken-sensitive Interrupts werden durch einen Wechsel des Logikpegels ausgelöst und für eine vorgegebene Zeitspanne, gewöhnlich einige Taktzyklen, gehalten.
  • Prozessor-Interrupts beziehungsweise Exceptions werden als Aborts, Faults oder Traps eingeordnet. Aborts melden sehr wichtige Fehler wie Hardwarefehler. Faults treten vor Abschluss einer Anweisung auf, Traps danach und werden unter anderem beim Debuggen verwendet.

Bei einem NMI sperrt die CPU die maskierbaren Interrupts und springt zu einer vom CPU-Hersteller festgelegten Adresse. Die dortige ISR veranlasst meist einen Neustart oder eine globale Fehlerbehandlung.

Ablauf der Verarbeitung

Eine interruptfähige Hardware erzeugt bei einem bestimmten Ereignis ein elektrisches Signal auf einer Interrupt-Leitung. Häufig verwaltet ein Interrupt-Controller mehrere Quellen, ihre Prioritäten und die zugehörigen Interruptvektoren. Ein Interruptvektor ist eine Nummer, mit der die CPU die passende ISR bestimmt.

Der typische Ablauf ist:

  • Ist der betreffende Interrupt maskiert, geschieht zunächst nichts. Nicht maskierte Anforderungen werden erst nach Abschluss der gerade ausgeführten Maschineninstruktion angenommen und bleiben normalerweise bis dahin bestehen.
  • Liegen mehrere IRQs an, wählt der Interrupt-Controller die nicht maskierte Anforderung mit der höchsten Priorität aus. Weitere Anforderungen werden anschließend bearbeitet.
  • Die CPU akzeptiert den IRQ und führt ihren Interruptzyklus aus. Sie liest je nach Architektur den Interruptvektor vom Datenbus und sperrt den Interrupteingang zunächst automatisch, damit nicht unbegrenzt viele verschachtelte Interrupts den Stack überlaufen lassen.
  • Der alte Befehlszähler wird auf dem Stack gespeichert; bei x86 betrifft dies Codesegment und Instruction Pointer, bei manchen Architekturen zusätzlich das Statusregister. Anhand des Vektors lädt die CPU den Einstieg der passenden ISR.
  • Die ISR sichert alle Prozessorregister, die sie verändern wird. Fehler dabei können schwer nachvollziehbare Störungen in dem unterbrochenen Programm verursachen.
  • Nun bearbeitet die ISR das Ereignis. Sie kann beispielsweise Ein- oder Ausgabedaten in einem Ringpuffer zwischenspeichern und über eine Betriebssystemfunktion einen Task wecken. Die Reihenfolge der Daten bleibt dabei gewöhnlich erhalten, Zeitbezüge können verloren gehen. Die IRQ-Anforderung muss vor oder während der ISR gelöscht werden, damit sie nicht erneut ausgelöst wird.
  • Abschließend stellt die ISR die gesicherten Register wieder her. Eine besondere Rücksprunganweisung, RTI beziehungsweise Interrupt Return, lädt den alten Befehlszähler und gegebenenfalls das Statusregister vom Stack. Dadurch wird meist auch die vorherige Interruptmaskierung wiederhergestellt. Das unterbrochene Programm läuft anschließend weiter; ein geweckter Task kann die gepufferten Daten später verarbeiten.

Wird die Maskierung schon innerhalb einer ISR aufgehoben, sind Interruptschachtelung durch andere ISRs und ein erneuter Eintritt derselben ISR möglich. Dafür sind besondere Softwarekonzepte nötig.

Priorität, Maskierung und Reaktionszeit

Maskierung bedeutet, dass die CPU bestimmte Unterbrechungsanforderungen zeitweise ignoriert. Das kann während einer anderen Interruptbehandlung oder in zeitkritischen und synchronisierenden Routinen, etwa Gerätetreibern, notwendig sein. Alle Interrupts außer NMI können grundsätzlich maskiert werden; laut Artikel sind auch durch Programmbefehle ausgelöste Software-Interrupts nicht maskierbar.

Die Zeit zwischen dem Anlegen des IRQ-Signals und dem Beginn seiner Verarbeitung heißt Latenz. Bei einem Interrupt mit der höchsten Priorität hängt sie vor allem von der Hardware ab. Mit Schattenregistern kann ein Kontextwechsel in einem Taktzyklus gelingen. Bei Interrupts niedrigerer Priorität kommt die Ausführungsdauer der bevorzugten Interrupt-Routinen hinzu. Echtzeitbetriebssysteme sind so organisiert und konfigurierbar, dass sich vorgegebene Echtzeitanforderungen leichter und nachweisbar einhalten lassen.

In hardwarenahen, ereignisgesteuerten Anwendungen, besonders in eingebetteten Systemen, kann ein großer Teil der Funktionalität in ISRs oder in von ihnen gestarteten Tasks liegen. Die CPU befindet sich dann häufig in einem energiesparenden Ruhezustand und erwacht durch externe Ereignisse. Im Extremfall initialisiert das Hauptprogramm nur das System und läuft danach in einer Endlosschleife, die im Wesentlichen immer wieder den Ruhezustand aktiviert.

Beispiele und x86-Umsetzung

Eine Tastatur erzeugt beim Tastendruck einen IRQ. Die ISR liest das Zeichen aus der Tastatursteuerung und leitet es an die zuständige Anwendung weiter. Eine Maus kann bei einer Positionsänderung oder einem Tastendruck einen Interrupt senden; Gesten wie ein Doppelklick müssen jedoch von Software erkannt werden. Weitere typische Quellen sind Netzwerkkarten nach dem Empfang von Daten, Festplatten nach Abschluss eines Lesevorgangs, Grafikkarten nach dem Zeichnen eines Bildes und Soundkarten, wenn ihr Ausgabepuffer weitere Audiodaten benötigt.

Bei x86-Prozessoren nimmt ein spezieller Signaleingang maskierbare Interrupts entgegen. Ein Programmable Interrupt Controller (PIC) kann mehrere Eingänge zusammenführen, priorisieren und im Interruptzyklus den passenden Vektor bereitstellen. Bei neueren Prozessoren sind diese Funktionen in den Hauptprozessor integriert.

Die x86-Architektur kennt 256 Interruptvektoren. Die CPU liest einen Vektor als 8-Bit-Wert vom Datenbus. Im Real Mode wird der Vektor mit 4 multipliziert, weil jeder Eintrag eine 32-Bit-Sprungadresse aus 2 Bytes für das Codesegment und 2 Bytes für den Offset enthält. Die Interrupttabelle liegt dort im ersten Kilobyte des Hauptspeichers, von 0000h:0000h bis 0000h:03FFh. Im Protected Mode wird der Vektor mit 8 multipliziert, da jeder Eintrag der Interrupt-Deskriptor-Tabelle 8 Bytes lang ist.

Moderne Systeme erlauben häufig Interrupt-Sharing: Mehrere Geräte teilen sich einen Interrupteingang. Die Behandlungsroutine muss dann die Treiber aller Geräte aufrufen, die den Interrupt verursacht haben könnten. Arbeitet ein Treiber zu lange, kann währenddessen beispielsweise der Puffer des tatsächlich auslösenden Geräts überlaufen; im schlimmsten Fall gehen Daten verloren. Bei Plug-and-Play-Geräten vergeben Computer und Betriebssystem die IRQ-Nummern selbst. Bei älteren Steckkarten wie ISA-Karten mussten sie dagegen von Hand eingestellt werden oder waren fest verdrahtet.

Lernvideos zu Interrupt

Weiterlesen

Informatik Als einfache Rechengeräte leisteten Abakus und später der Rechenschieber unschätzbare Dienste. 1641 konstruierte Blaise Pascal eine mechanische … Partizip Perfekt Passiv Es wird als „Passiv“ bezeichnet, obwohl es bei manchen Verben mit einem Perfekt im Aktiv zu umschreiben wäre (nämlich wenn ein unakkusativisches Verb vorliegt). Prozessor Aufbau und Funktionale Einheiten · Hauptprozessor (CPU) und Mehrprozessorkerne · Steuer- bzw. Leitwerk · Rechenwerk und Register · Datenleitungen · Caches und MMU. Englische Sprache Die englische Sprache (Eigenbezeichnung: [ˈɪŋɡlɪʃ]) ist eine ursprünglich in England beheimatete germanische Sprache, die zum westgermanischen Zweig gehört. Betriebssystem Betriebssysteme bestehen in der Regel aus einem Kernel (deutsch: Kern), der die Hardware des Computers verwaltet, sowie speziellen Programmen, die beim Start … Gerätetreiber Dazu kommuniziert der Treiber auf der einen Seite meist direkt mit dem Gerät und tauscht Steuersignale und Daten mit dem Gerät aus, über den Kommunikationsbus ( … Netzwerkkarte Ihre primäre Aufgabe ist die Herstellung einer physikalischen Verbindung zum Netzwerk über ein geeignetes Zugriffsverfahren (z. B. CSMA/CD) und die … Festplattenlaufwerk Ein Festplattenlaufwerk (englisch hard disk drive, Abkürzung HDD), früher auch Festplatten-Speichersystem oder Festplatten-System, oft auch als Festplatte … Edsger W. Dijkstra Unter seinen Beiträgen zur Informatik finden sich der Dijkstra-Algorithmus zur Berechnung eines kürzesten Weges in einem Graphen (1959 in einem dreiseitigen … Eingabe und Ausgabe Mit Ein-/Ausgabe (abgekürzt E/A; englisch input/output, kurz I/O) bezeichnet man – als Begriff aus der EDV bzw. der Informatik – die Kommunikation / Interaktion … Polling (Informatik) Polling ist in der Informatik der Ausdruck für eine zyklische Abfrage, die den Status von Hard- oder Software oder das Ereignis einer Wertänderung ermittelt … Multitasking Der Begriff Multitasking [ˌmʌltiˈtɑːskɪŋ] (engl.) bzw. Mehrprozessbetrieb bezeichnet die Fähigkeit eines Betriebssystems, mehrere Aufgaben (Tasks) …