IRQ ist eine Abkürzung, aus dem Computerbereich und bedeutet Interrupt Request. Auf Deutsch kann man es als Unterbrechungsanforderung bezeichnen.
Varianten des IRQs sind NMI - Non Maskable Interrupt und RST - Reset.
Ein Interrupt ist ein Signal, meist von einem externen Gerät, mit dem der Prozessor aufgefordert wird, den aktuellen Programmablauf anzuhalten (zu unterbrechen) und eine sog. Unterbrechungsroutine aufzurufen.
Die an die CPU angeschlossene Hardware muss interruptfähig sein, d.h. bei Eintreffen eines bestimmten Ereignisses 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 aus Befehlen, die die Unterbrechungsroutine (Interrupt-Service-Routine, kurz ISR) einleiten. In einfachen Implementierungen wird nur der gegenwärtige Zustand aller internen CPU-Register auf dem Stack gesichert. Dann wird eine Sprungadresse geladen bzw ein Sprung in die ISR ausgeführt. Der Maschinencode der ISR ist meistens im Betriebssystem integriert. ISRs können aber auch vom Benutzer geschrieben werden (Spezialanwendungen, Industrie-Rechner, Embedded Systeme).
Interrupts stellen einen höchst effizienten Mechanismus dar, mit dem eine CPU von lästigen, Zeit raubenden, zyklischen Prüfvorgängen entlastet werden kann. Statt beispielsweise ständig in einer Programmschleife zu prüfen, ob ein Benutzer ein Zeichen auf einer Tastatur eingibt (sog. Polling), wird auf das Eintreffen eines Interrupts gewartet. Erst dann wird die CPU aktiv.
Durch spezielle Einstellungen kann verhindert werden, dass die CPU auf einen IRQ reagiert. Dies ist z.B. dann sinnvoll, wenn gerade ein IRQ behandelt wird. Diese Maskierung kann nur für IRQ vorgenommen werden - NMI (Non Maskable Interrupt) können demnach nicht verhindert werden. RST sind spezielle Interrupt-Signale (ebenfalls nicht-maskierbar) die die CPU auch in einen definierten Zustand versetzen können, bzw. die Verarbeitung an einer fest vorgegebenen Speicheradresse (neu) starten.
Je nach Typ der CPU können dieser nur einer oder mehrere, von einander unterscheidbare IRQ gemeldet werden. Mit einem IRQ ist eine Unterbrechungsroutine verbunden, diese kann dann entweder sofort die entsprechende Aktion durchführen, oder (wie bei den IBM-kompatible PCs) muss erst ermitteln, welches Gerät die Unterbrechung angefordert hat, und kann dann erst die Verarbeitung beginnen. Die Adressen der Unterbrechungsroutinen stehen im Interruptvectortable.
Die Zeit zwischen dem anlegen des IRQ-Signals und dem Beginn der entsprechenden Verarbeitung nennt man auch Latenzzeit. Man spricht im Zusammenhang mit Realtime- oder Echtzeit-Betriebssystem davon, dass diese Latenzzeit immer kleiner als ein definierter Wert bleibt (egal wie groß/klein dieser Wert ist und was die CPU gerade macht).
IBM-kompatible PCs
In den meisten IBM-kompatiblen PCs gibt es nur 16 IRQs. Diese 16 Adressen werden verschiedenen Peripheriegeräten und Steckkarten zugewiesen, um eine eindeutige Verwaltung derselben zu ermöglichen.
Über den IRQ-Kanal stehen Adapter, Karten und Teile der Peripherie eines PC mit der CPU in Verbindung.
Mit einem bestimmten IRQ wird dem Prozessor mitgeteilt, dass ein externes Gerät eine Behandlung benötigt, zum Beispiel eine Netzwerkkarte die Daten empfangen hat, oder die Festplatte die vorher angeforderten Daten bereit hält. Dies geschieht über so genannte Interrupt-Leitungen. Sobald ein Interrupt am Controller anliegt, wird der Prozessor "unterbrochen". Laufende Befehle werden beendet, und der Interrupt wird beim Controller bestätigt, worauf der Prozessor den IRQ, der behandelt werden soll, vom Controller liest. Die CPU führt dann die jeweilige gerätespezifische Aktion durch.
Der PIC (programmable interrupt controller) mit 8 Interrupt-Eingängen und einem Interrupt-Ausgang wurde in die ersten PCs eingebaut. Allerdings reichten diese 8 Eingänge sehr bald schon nicht mehr aus, und es wurden zwei PIC verwendet (bis heute, allerdings wird der APIC den PIC vorraussichtlich ablösen). Dabei wird der Ausgang des einen PIC (Slave) mit einem Eingang des anderen PIC (Master) verbunden (normalerweise IRQ 2).
PIC 1 (Master) +--------------+ PIC 2 (Slave) | IRQ 0 +- +-------------+ | IRQ 1 +- | IRQ 8 +- | IRQ 2 +---+ | IRQ 9 +- | IRQ 3 +- | | IRQ 10 +- | IRQ 4 +- | | IRQ 11 +- | IRQ 5 +- | | IRQ 12 +- | IRQ 6 +- | | IRQ 13 +- | IRQ 7 +- | | IRQ 14 +- +------+-------+ | | IRQ 15 +- | | +-----+-------+ | | | | +----------+ | +--->>> Zur CPU
Die Reihenfolge, wann ein IRQ und damit "sein" Gerät "dran" ist (ein Prozessor kann ja schließlich immer nur Eines auf einmal machen), wird durch die Position des IRQ bestimmt. Durch die Art der Schaltung sieht die Reihenfolge so aus:
0, 1, (2), 8, 9, 10, 11, 12, 13, 14, 15, 3, 4, 5, 6, 7.
Der IRQ 2 wird selbst nicht belegt, er ist die "Durchreiche" für die IRQs des zweiten PIC (Fachsprache: Kaskade, man spricht bei dieser Funktionsweise von Kaskadierung des PIC).
Belegen zwei Geräte die selbe Leitung, kann es zu Fehlfunktionen kommen. Bei einigen Betriebssystemen, auf welchen man die IRQs frei wählen kann, gibt es jedoch auch das IRQ-Sharing (to share = teilen): Zwei Geräte teilen sich einen IRQ. Bei PCI Geräten ist das durchaus üblich, die Behandlungsroutine für einen geteilten IRQ muss dann alle Geräte testen, die diesen IRQ ausgelöst haben könnten.
Bei neueren Peripheriegeräten kümmern sich der Computer und das Betriebssystem selbst um die Vergabe der IRQ-Nummern (PnP = Plug-and-Play-Geräte). Bei alten Steckkarten, z.B. ISA-Karten, müssen die IRQs von Hand eingestellt werden oder sind fest auf den Karten verdrahtet.
Unter Linux kann man die Interrupts mit folgendem Befehl abfragen: cat /proc/interrupts
IRQ-Geräte-Tabelle # (Diese Liste kann sich bei manchen Geräten anders darstellen)
- 0: Timer
- 1: Tastatur
- 2: umgeleitet auf IRQ 9
- 3: Serielle Schnittstelle (COM2)
- 4: Serielle Schnittstelle (COM1)
- 5: Frei (ggf. zweiter Parallelport)
- 6: Diskettencontroller
- 7: Parallele Schnittstelle (LPT1)
- 8: Echtzeituhr
- 9: Umleitung von IRQ 2, VGA-Karte
- 10: Frei
- 11: Frei
- 12: Bus-Maus
- 13: Mathematischer Coprozessor
- 14: erster Festplattencontroller
- 15: zweiter Festplattencontroller
Neuere PC's verwenden anstelle des PIC den "Advanced PIC" oder APIC. Damit stehen theoretisch unbegrenzt viele IRQs zur Verfügung. Außerdem ist er wesentlich flexibler und schneller zu programmieren als der PIC.