Unterbrechungsanforderung

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Die Artikel Interrupt und Unterbrechungsanforderung überschneiden sich thematisch. Hilf mit, die Artikel besser voneinander abzugrenzen oder zusammenzuführen (→ Anleitung). Beteilige dich dazu an der betreffenden Redundanzdiskussion. Bitte entferne diesen Baustein erst nach vollständiger Abarbeitung der Redundanz und vergiss nicht, den betreffenden Eintrag auf der Redundanzdiskussionsseite mit {{Erledigt|1=~~~~}} zu markieren. Nachtigall 14:54, 5. Mai 2007 (CEST)

Eine Unterbrechungsanforderung oder englisch Interrupt Request (IRQ) löst eine Unterbrechung (Interrupt) der Prozessbearbeitung eines Prozessors aus. In der Regel wird die Unterbrechungsanforderung von Geräten im System durch eine Busleitung mit Namen IRQ dem Prozessor signalisiert, worauf der Prozessor den Kontext wechselt und die Unterbrechungsroutine ausführt. Nach deren Beendigung wird IRQ zurückgesetzt und die unterbrochene Aufgabe fortgesetzt.

Beispiele[Bearbeiten]

Beispielsweise sendet die Tastatur einen Interrupt Request, wenn eine Taste gedrückt wurde. Die Unterbrechungsroutine kann daraufhin das jeweilige Zeichen von der Tastatursteuerung lesen und es an die jeweilige Anwendung weiterleiten.

Weitere Beispiele, in denen Geräte einen Interrupt Request generieren können:

  • Netzwerkkarte: wenn Daten empfangen wurden und im Puffer bereitliegen
  • Festplatte: wenn die vorher angeforderten Daten gelesen wurden und abholbereit sind (das Lesen von der Festplatte dauert relativ lange)
  • Grafikkarte: wenn das aktuelle Bild fertig gezeichnet wurde
  • Soundkarte: wenn wieder Sound-Daten zum Abspielen benötigt werden, bevor der Puffer leer wird.

Funktionsweise[Bearbeiten]

Die an den Hauptprozessor (CPU) angeschlossene Hardware muss interruptfähig sein, d. h. bei Eintreffen eines bestimmten Ereignisses über die sogenannte Interrupt-Leitung ein Ausgangssignal (elektrische Spannung an einem Ausgangs-Pin) erzeugen. Die CPU besitzt im einfachsten Falle einen entsprechenden Eingangs-Pin. Erscheint an diesem Pin eine elektrische Spannung, so startet innerhalb der CPU eine Sequenz von Befehlen, die die Unterbrechungsroutine einleiten.

Unterbrechungsanforderungen können zeitweise von der CPU ignoriert werden, zum Beispiel wenn gerade ein anderer Interrupt behandelt wird. Diese Maskierung gilt für alle Interrupts bis auf die nicht maskierbaren (NMI: Non Maskable Interrupt), die für spezielle Fälle vorgesehen sind (Hardwarefehler, Reset usw.), und für die so genannten Software-Interrupts, die durch einen Befehl in einem Programm ausgelöst werden (z. B. 'int IRQNUMMER' bei x86 – dieser Befehl wird beispielsweise von Linux genutzt, um von normalen Anwendungen über Systemaufrufe (syscalls) in den Kernel-Modus zu wechseln).

Latenz[Bearbeiten]

Die Zeit zwischen dem Anlegen des IRQ-Signals und dem Beginn der entsprechenden Verarbeitung nennt man Latenz. Für einen IRQ der höchsten vergebenen Priorität hängt die Latenz vor allem von der Hardware ab – mit Schattenregistern kann der Kontextwechsel in einem Taktzyklus gelingen –, für IRQs mit geringerer Priorität von der Ausführungsdauer der bevorzugten Interrupt-Routinen. Echtzeitbetriebssysteme sind so organisiert und konfigurierbar, dass damit Echtzeitanforderungen leichter und beweisbar erfüllt werden können.

IBM-kompatible PCs[Bearbeiten]

Die Unterbrechungsanforderungen der Geräte werden zuerst vom Programmable Interrupt Controller entgegengenommen, der sie an einen Prozessor weiterleitet, und ihn damit unterbricht. Laufende Befehle werden daraufhin beendet, und der Interrupt wird dem Controller bestätigt. Als Nächstes liest die CPU die Nummer des entsprechenden IRQ (Vektor) vom Controller und verwendet ihn als Index in der Interruptvektortabelle, welche die jeweilige Behandlungsroutine für jeden IRQ enthält, die dann die entsprechende gerätespezifische Aktion durchführen soll.

Bei modernen Systemen (zum Beispiel PCI-Systemen) können sich in der Regel mehrere Geräte einen Interrupt teilen (Interrupt-Sharing genannt). Die Behandlungsroutine für einen solchen Interrupt muss dann alle Treiber, deren Geräte diesen Interrupt ausgelöst haben könnten, aufrufen (am IRQ kann dies nicht festgestellt werden). Dabei kann es zu Problemen kommen, wenn einzelne Treiber zu lange aktiv sind, und in der Zwischenzeit im Gerät, welches den Interrupt ursprünglich ausgelöst hat, beispielsweise der Puffer voll wird und überläuft. Im schlimmsten Fall führt dies zu einem Datenverlust.

Bei modernen Peripheriegeräten vergeben der Computer und das Betriebssystem selbst die IRQ-Nummern (PnP = Plug-and-Play-Geräte); während bei alten Steckkarten, beispielsweise bei ISA-Karten, die IRQs von Hand eingestellt werden müssen oder fest auf den Karten verdrahtet sind.

Unter Linux kann man die Interrupts mit folgendem Befehl abfragen: cat /proc/interrupts

Unter Windows Vista sowie Windows XP kann man die Interrupts mit folgendem Befehl abfragen: msinfo32.exe → Hardwareressourcen → IRQs

IRQ-Geräte-Tabelle
(Diese Liste unterscheidet sich von System zu System)
IRQ Verwendung
0 System-Taktgeber
1 Tastatur
2 Kaskadiert zu IRQ 9 (für 8-15)
3 COM 2,4,6,8 (EIA-232/RS-232)
4 COM 1,3,5,7
5 LPT 2 (IEEE 1284) oder Soundkarte
6 Diskettenlaufwerk (Floppy)
7 LPT 1
8 Echtzeituhr (RTC)
9 Zu IRQ 2 umgeleitet (aber auch VGA und NIC, IRQ 16–23)
10 Frei ggf. PCI-Bus
11 Frei ggf. Adaptec-SCSI
12 PS/2 (Maus, andere Eingabegeräte)
13 mmaeinheit|Mathematischer Coprozessor (FPU)
14 Primärer IDE oder ATA
15 Sekundärer IDE oder ATA

Weblinks[Bearbeiten]