IRQ (Interrupt Request)

(aus einer Mail an einen Atari-User der Seerose vom 30. Januar 1999)

Die IRQs sind wie Portier-Klingeln für den Prozessor. An jedem IRQ kann ein Gerät hängen (wobei unter „Gerät“ hier auch einige interne Chips fallen). Wenn ein Gerät nun Daten anstehen hat und möchte, daß der Prozessor sie abholt, dann „klingelt“ es beim Prozessor, indem es „sein“ IRQ-Bit von 0 auf 1 setzt: „Hallo, ich hab da was, bitte einsammeln!“

Um das zu realisieren, hat man in die ersten PCs einen PIC (programmable interrupt controller) mit 8 Leitungen eingebaut. Dummerweise reichte der sehr bald schon nicht mehr aus, aber statt einen größeren zu bauen, verwendete man (und verwendet bis heute) einfach zwei davon, die auf besondere Art und Weise hintereinander geschaltet sind:

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      |
       |                +-------------+
       |
       +----- Steuerbus
        

Über den Steuerbus wird eine IRQ-Meldung an den Hauptprozessor weitergeleitet.

Die Reihenfolge, wann ein IRQ und damit „sein“ Gerät „dran“ sind (ein Prozessor kann ja schließlich immer nur eins 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).

Die typische Belegung der IRQs (in einem PC) sieht so aus:

0Timer (System-Zeitgeber)
1Keyboard
2Cascade
3Com2 (2. Modemschnittstelle)
4Com1 (1. Modemschnittstelle)
5HD-Controller (1. IDE-Controller)
6Floppy-Controller
7LPT1 (1. Druckerschnittstelle)
  
8Real Time Clock (Echtzeituhr)
9frei
10frei
11frei
12frei
13Coprozessor 80287/387 (ab 486er im Hauptprozessor)
14HD-Controller (alternativ bzw. 2. IDE-Controller)
15SCSI-Controller

Unveränderbar sind dabei die IRQs 0, 1 und 8. Von IRQ 9 sagen viele, man solle ihn nicht belegen wegen der Kaskade, aber es funktioniert trotzdem. Wir hatten hier lange Zeit die Netzwerkkarten bei allen Rechnern auf IRQ 9 liegen.

Die anderen können frei bestimmt werden. IRQ 3 und 4 lässt man aber üblicherweise so, ebenso 6, 7, 14 (falls vorhanden) und 15 (falls vorhanden). Wenn man eine Soundkarte einbaut, legt man die normalerweise auf IRQ 5 und verschiebt dafür den IDE-Controller (falls man nicht sowieso nur SCSI verwendet). Grafikkarten landen dagegen meist auf dem zweiten PIC - oder auf IRQ 7, falls man keine Druckerschnittstelle betreibt. Falls die Maus nicht auf einem Com-Port hängt, sondern über eine PS/2-Schnittstelle betrieben wird, kriegt sie natürlich auch noch einen eigenen IRQ.

(IDE-Controller: ein Controller kann zwei Geräte – Platten, Roms, ZIPs usw. – dranhängen haben, eins als Master, eins als Slave. Trotzdem benötigt er nur einen IRQ. Das gleiche gilt für einen SCSI-Controller: bis zu 7 Geräte belegen denselben IRQ, die interne Reihenfolge ist Job des SCSI-Controllers.)

Die typische Aufteilung am Atari dürfte nicht viel anders sein, nur daß sie wohl durchs TOS bestimmt wird und nicht frei eingestellt werden kann.

Um die Sache noch ein bißchen zu verkomplizieren, gibt es auf einigen (nicht allen) Betriebssystemen, auf welchen man die IRQs frei wählen kann, noch das IRQ-Sharing (to share = teilen): Zwei Geräte teilen sich einen IRQ. Knackpunkt: Sie dürfen nicht zeitgleich betrieben werden, sonst gibt's Datensalat. Es kann z. B. sinnvoll sein, ein Modem und einen CD-Brenner auf denselben IRQ zu legen, weil der Brenner nur benutzt werden kann, wenn sonst kein anderer Vorgang auf dem Rechner läuft, also auch keine Datenfernübertragung. CD-Brenner sind da nämlich sehr pingelig, was die Gleichmäßigkeit des Datenflusses angeht. Oder man könnte einen Scanner und eine Soundkarte oder einen Scanner und einen CD-Brenner auf denselben IRQ legen (sofern nicht sowieso beide über den SCSI-Controller laufen).

Den meisten Geräten muß man beim Einbau erst mal beibringen, welchen IRQ sie zu benutzen haben (logisch, kann ja überall anders sein). Allerdings gibt es da Karten, die sich nicht so einfach auf jeden IRQ konfigurieren lassen. Billige Netzwerkkarten bestehen z. B. manchmal darauf, IRQ 11 haben zu müssen, und einige Grafikkarten akzeptieren nur zwei oder drei bestimmte IRQs. Soundkarten bestehen oft auf IRQ 5, und wenn sie einen sehr großen Funktionsumfang haben, brauchen sie oftmals noch einen zweiten IRQ, meist IRQ 7.

Heute steht man im allgemeinen vor dem Problem, daß auch die kaskadierten PICs schnell voll belegt sind: Soundkarten, Grafikkarten, CD-Rom, CD-Brenner, Drucker, Scanner, Modems, ISDN-Karten, mehrere Plattencontroller usw. Das PIC-System ist eindeutig überholt. Da aber anscheinend noch niemand eine bessere Idee hat, verwendet man dieses veraltete System immer noch – und Atari hat es mangels eigener Ideen vom PC-System übernommen.


Nachtrag:

Diesen Artikel habe ich im Sommer 2003 unverändert bei Wikipedia eingestellt. Seitdem hat sich die dortige Variante heftig verändert, von meinem Ursprungstext ist nichts mehr übrig geblieben.