www.heise.de/ct - ciw - Mail an ciw

Interrupts, IRQs und Ressourcenkonflikte:

Artikel zum Thema:

FAQ:

  1. Was ist der Unterschied zwischen Interrupts und IRQs sowie zwischen ISA- und PCI-IRQs (2.1.2001)
  2. Wie löse ich Konflikte bei PCI-IRQs (3.1.2001)

c't-Hotline-Tipps:

  1. Probleme mit TV-Karten
  2. Probleme mit Soundblaster-Karte
  3. Probleme mit Promise-Ultra-ATA/100-Controller auf Asus A7V
  4. Tipp für internes Modem (alt)

Interrupt, IRQs bei ISA und PCI:

Das englische Wort "Interrupt" bedeutet einfach Unterbrechung. Diese Bezeichnung verwendet man allgemein für Anweisungen an den PC-Hauptprozessor, den gerade laufenden Prozess zu unterbrechen und (vorübergehend) einen anderen Befehl abzuarbeiten.

In der PC-Technik kommen verschiedene Arten von Interrupts vor, die man nicht miteinander verwechseln sollte.

BIOS-Interrupt:

Über die so genannten BIOS-Interrupts stellt das BIOS bestimmte Funktionen bereit. Diese nutzt das Betriebssystem oder irgend ein Programm durch Aufruf des BIOS-Interrupts, ähnlich wie ein Unterprogramm. Bekannt ist etwa der INT 13h, über den man große Festplatten ansprechen kann.

Interrupt Request oder IRQ:

Als IRQ bezeichnet man eine elektrisches Signal, das eine PC-Hardwarekomponente auslösen kann, um die CPU zur Abarbeitung von Befehlen aufzufordern. So meldet etwa ein SCSI- oder EIDE-Hostadapter dem Hauptprozessor, dass angeforderte Daten bereitstehen und jetzt verarbeitet werden müssen. Auch eine Soundkarte teilt über einen IRQ mit, dass sie jetzt neue Daten benötigt, die die CPU berechnen oder aus dem Speicher liefern soll.

Die CPU besitzt nur einen Eingang für Interruptanforderungen. Um zu entscheiden, welche Hardwarekomponente die Aufmerksamkeit des Prozessor braucht, gibt es eine festgelegte Vorgehensweise: Ein spezieller Controller im Chipsatz, der Programmable Interrupt Controller (PIC), stellt mehrere Eingänge für IRQ-Anforderungen von Hardwarekomponenten zur Verfügung. 

Löst nun eine Hardwarekomponente einen IRQ aus, so schickt der PIC seinerseits eine Interruptanforderung an die CPU und übermittelt dieser gleichzeitig eine Speicheradresse, an der die jetzt auszuführenden Anweisungen stehen. Diese arbeitet die CPU dann ab.

Der PIC hat sich historisch aus der XT-Architektur entwickelt. Damals bot er nur acht Eingänge (IRQ 0-7). Mit der AT-Architektur kam ein zweiter PIC hinzu, der an den IRQ2 des ersten PIC angeschlossen ist. In modernen Chipsätzen ist diese Bauform nicht mehr vorhanden, aber die Funktionsweise blieb so. 

Die Nummerierung der IRQs drückt tatsächlich auch eine gewisse Rangfolge der Wichtigkeit dieser IRQs aus; diese ist aber nicht absolut zu nehmen. Außerdem unterscheidet die PC-Architektur noch zwischen normalen Interrupts und Non-maskable-Interrupts, den NMIs. Letztere muss die CPU unmittelbar verarbeiten, da sie bei zeitkritischen Unterbrechungsanforderungen zum Einsatz kommen.

Die meisten der 15 verschiedenen IRQs sind fest belegt, andere lassen sich je nach Konfiguration des PC unterschiedlich nutzen:

00 Systemtaktgeber
01 Tastatur
02 programmierbarer Interrupt-Controller
03 serielle Schnittstelle COM2 (E/A-Bereich 02F8)
04 serielle Schnittstelle COM1 (E/A-Bereich 03F8)
05 frei, oft Soundkarte (Soundblaster-Emulation) oder LPT2
06 Diskettenlaufwerk
07 parallele (Drucker-)Schnittstelle LPT1 (E/A-Bereich 0378)
08 Echtzeitsystemuhr
09 frei
10 frei
11 frei
12 PS/2-Mausanschluss
13 Koprozessor (ob separat oder in CPU integriert)
14 primärer IDE-Kanal
15 sekundärer IDE-Kanal

Für Komponenten, die über den ISA-Bus angeschlossen sind, muss aus elektrischen Gründen jeweils eine eigene, ungeteilte IRQ-Leitung zur Verfügung stehen. Es gibt nur eine Ausnahme, das sind die COM-Ports: Stehen mehr als zwei serielle Schnittstellen zur Verfügung, so teilen sich COM1 und COM3 den IRQ4 und COM2 und COM4 den IRQ3; die E/A-Bereiche von COM1 und COM3 bzw. COM2 und COM4 sind jedoch verschieden. Eine tatsächlich gleichzeitige Benutzung der IRQ-Leitung etwa durch COM1 und COM3 führt jedoch zu Problemen – angesichts der früher üblichen geringen Datenraten funktionierte das Ganze aber recht gut.

ISA-Steckkarten machten eine lange Entwicklung durch, die außer der Leistungsfähigkeit vor allem auch bei der Konfiguration tiefgreifende Änderungen brachte. Im folgenden eine grobe Einteilung der ISA-Steckkarten nach ihren Konfigurationsproblemen:

ISA-Karten ohne Konfigurationsmöglichkeiten:

Die ältesten 8-Bit-ISA-Steckkarten boten manchmal keinerlei Einstellmöglichkeiten. Manche Netzwerkkarte nutze IRQ5 – eine andere IRQ-Wahl war nicht möglich. Wollte man eine solche Karte einsetzen, so musste der IRQ5 frei sein.

ISA-Karten mit Jumpern:

Etwas mehr Auswahl bieten die heute noch vereinzelt anzutreffenden ISA-Steckkarten mit Jumpern zur Auswahl von IRQ-Leitung und manchmal auch E/A-Adressbereichen. Allerdings ist die Auswahl an IRQ-Leitungen begrenzt: Bei 8-Bit-Steckkarten kann man als höchsten IRQ den IRQ7 einstellen; die IRQs 8 bis 15 sind nur mit 16-Bit-Steckkarten nutzbar.
Für alle ISA-Steckkarten gilt: Ohne genaue Dokumentation sind sie fast nicht nutzbar. Meist muss man nicht nur die Hardware, sondern auch die Treiber exakt konfigurieren. Letztere muss man mit bestimmten Optionen aufrufen, Umgebungsvariablen setzen oder Initialisierungsdateien anlegen. Beispiel: Bei alten Soundblaster-Steckkarten legte in der autoexec.bat die Zeile:
               SET BLASTER= A220 I5 D1
die E/A-Adresse 220, den IRQ5 und den DMA-Kanal 1 fest. 

ISA-Karten ohne Jumper:

Komfortabler lassen sich ISA-Steckkarten mit speziellen Setup-Programmen einstellen. Man muss dann den Rechner für Konfigurationsänderungen nicht mehr öffnen oder die Karte zum Umstecken von Jumpern ausbauen. Vom Funktionsprinzip sind die Software-konfigurierbaren Karten aber nicht anders als jene mit Jumpern. Für eine spätere Weiternutzung ist es unbedingt nötig, dass man die entsprechenden Setup-Tools aufbewahrt.
Tipp:
Viele alte NE2000-kompatible ISA-Netzwerkkarten lassen sich mit den Tools "AN16" oder "PN16" von Addtron einstellen.

Plug-and-Play-ISA-Steckkarten:

Die Königsklasse des Komforts stellten vor dem Aufkommen von PCI die PnP-ISA-Karten dar. Die PnP-Konfigurationsmethode setzt außer einer PnP-tauglichen ISA-Steckkarte auch ein PnP-fähiges BIOS des Mainboards voraus. Auf dem Microsoft-Server liegen die nötigen Spezifikationen, nach denen sich Steckkarte und Mainboard-BIOS auf eine lauffähige Konfiguration einigen.

Bei nicht funktionierender PnP-Konfiguration ist Abhilfe kompliziert. Oft ist, besonders bei älteren Low-Cost-Mainboards, ein fehlerhaftes BIOS schuld. Hilft ein BIOS-Update nicht, so kommt man manchmal mit Intels ISA Configuration Utility (ICU) für DOS und Windows 3.1 weiter.


www.heise.de/ct - ciw - Mail an ciw

PCI-Steckkarten

Bei PCI-Karten ist alles ganz anders als von den ISA-Karten gewohnt. Hier gibt es keine Konfigurationsmöglichkeiten per Jumper oder Setup-Utility mehr. Diese Aufgabe übernimmt das BIOS, das Betriebssystem und/oder der Treiber. 

Das komplizierte Zusammenspiel dieser Elemente funktioniert in den weitaus meisten Fällen problemlos. Wenn es aber knirscht, ist ein Eingriff relativ schwierig –  die PCI-Konfigurations- und Zugriffsmechanismen sind wesentlich komplexer.

Als wichtigen Vorteil gegenüber ISA-Steckkarten können sich PCI-Geräte IRQ-Leitungen teilen. Man nennt dies IRQ-Sharing, diese Technik ist seit der ersten PCI-Spezifikation beschrieben und eigentlich vorgeschrieben. Trotzdem gibt es auch heute noch Steckkarten und Treiber, die nicht mit IRQ-Sharing zurecht kommen.

Was ist der Unterschied zwischen PCI- und ISA-IRQs?

Während die ISA-IRQs als festgelegte Signalleitungen im ISA-Bus geführt sind, gibt es im PCI-Bus nur die vier IRQ-Leitungen INT_A bis INT_D. And diesen hängen alle PCI-Geräte, also nicht nur die Steckkarten, sondern auch Onboard-Geräte wie Onboard-Sound oder der oder die USB-Controller sowie die AGP-Grafikkarte. Das bedeutet: Wenn man außer der AGP-Grafikkarte, PCI-Sound und USB-Controller noch mehr als eine weitere PCI-Steckkarte einsetzen will, muss man unweigerlich mit IRQ-Sharing leben.

(Es gibt eine Ausnahme: Bei Multiprozessorsystemen kommt statt eines PIC ein Advanced PIC zum Einsatz. Dieser bietet mehr als nur die 16 zuvor beschriebenen IRQs. Einige Betriebssysteme (Windows NT, 2000, Linux u.a.) können auf Multiprozessorboards dann mit mehr Interrupts arbeiten.)

Wie hängen PCI- und ISA-IRQs miteinander zusammen?

Eine Logikschaltung ordnet die vier PCI-Interruptleitungen den 15 IRQ-Eingängen des PIC zu. Man muss nun darauf achten, dass keiner der PCI-Interrupts einer IRQ-Leitung zugeordnet wird, die eine ISA-Karte bereits benutzt. Deshalb muss man diese von ISA-Karten benötigten IRQs per BIOS-Setup für die Verwendung durch PCI-Geräte sperren.

Bei besseren Mainboards kann man per BIOS-Setup noch weiter in die Zuordnung der PCI-Interrupts eingreifen und etwa festlegen, welcher PCI-Slot welche IRQ-Nummer bekommen soll. Das funktioniert natürlich nur im Rahmen der elektrischen Gegebenheiten, also: Wenn zwei PCI-Slots elektrisch an dieselbe Interruptleitung angeschlossen sind, kann man das nicht per BIOS-Setup ändern. In diesem Fall muss man die Karten in den PCI-Slots vertauschen.

Die PCI-Spezifikation empfiehlt folgendes Zuordnungsmuster:

Gerät: Onboard-Sound Onboard-USB 6. PCI-Slot 5. PCI-Slot 4. PCI-Slot 3. PCI-Slot 2. PCI-Slot 1. PCI-Slot AGP-Slot
INT_A       X       X X
INT_B     X       X    
INT_C X         X      
INT_D   X     X        

Manche Boardhersteller weichen jedoch von diesem Schema ab. Hat man keine Informationen (bei guten Boards im Handbuch zu finden), gilt meist folgendes:

Wer teilt den PCI-Geräten die Interruptleitungen zu?

Das ist eine komplizierte Geschichte: Bei der Zuteilung der IRQ-Leitungen zu den PCI-Geräten wirken das Mainboard-Layout (siehe Tabelle), das BIOS, das BIOS-Setup und das Betriebssystem zusammen.

Wenn man nicht manuell per BIOS-Setup in die IRQ-Zuordnung eingegriffen hat, so verteilt das BIOS die gefundenen PCI-Geräte auf die IRQs. Steht die Option "Plug-and-Play-OS installed" im BIOS-Setup auf "Yes", so konfiguriert das BIOS bei vielen Mainboards nur die zum Booten wichtigen Geräte und teilt etwa einer Soundkarte noch gar keinen IRQ zu.

Das Betriebssystem kann die IRQ-Zuordnung des BIOS nun übernehmen oder aber nach eigenem Gutdünken verändern. Besonders berüchtigt sind dabei Windows 2000 und Windows XP in der ACPI-Installation (siehe dazu diesen Hotline-Tipp).

Woran erkenne ich IRQ-Sharing?

IRQ-Sharing liegt dann vor, wenn mehre PCI-Geräte eine IRQ-Leitun nutzen. Oft zeigt schon das BIOS beim Booten an, dass mehrere Geräte ein und dieselbe IRQ-Leitung benutzen.

Genauer ist die Kontrolle des IRQ-Sharing im Geräte-Manager von Windows. Aber Vorsicht: Das "Gerät" "IRQ Holder for PCI IRQ Steering" oder der "ACPI IRQ Holder for PCI IRQ Steering" ist kein wirkliches Gerät, sondern eine Art Treiber.

Sollte man IRQ-Sharing vermeiden?

Wenn alles funktioniert, gibt es keinen Grund, dem Betriebssystem die Verwaltung der Ressourcen abzunehmen. Im Gegenteil: Eigene Eingriffe können die Systemkonfiguration ganz schön durcheinander bringen.

Wieso gibt es mehr als 8 Jahre nach der Einführung von PCI immer noch IRQ-Probleme?

Weil PCI-Chips aus Kostengründen zu wenig Pufferspeicher enthalten und daher kritisch auf IRQ-Sharing reagieren. Weil die Hersteller die Treiberentwicklung aus Kostengründen vernachlässigen. Weil das IRQ-Sharing unter Umständen zuviel Zeit kostet, meint Microsoft

Wie löst man IRQ-Konflikte?

Wenn zwei oder mehr Geräte sich tatsächlich denselben IRQ teilen und eines oder mehrere davon nicht oder schlecht funktionieren, dann sollte man zunächst versuchen:

  1. neue Treiber für den Chipsatz und die betroffenen Geräte zu beschaffen
  2. im Geräte-Manager die Ressourceneinstellungen zu ändern (funktioniert meistens nicht)
  3. die Steckkarten in andere Slots zu stecken
  4. ein BIOS-Update des Mainboards
  5. unter Windows 2000 und XP kann man den APIC-Modus aktivieren; Beschreibung im o.g. Artikel

Hilft das alles nichts, so kann man als nächstes versuchen, die IRQ-Zuteilung manuell fest einzustellen:

  1. Wenn Sie Windows 2000 oder XP einsetzen, müssen Sie dazu auf ACPI und den APIC-Modus verzichten. Das System muss (bei Ein-Prozessor-Boards) den Treiber "Standard PC" für das Device "Computer" im Geräte-Manager verwenden. Das erfordert eine Neuinstallation oder "Reparatur" des Systems; manchmal funktioniert auch einfach die zwangsweise Auswahl des erwähnten Treibers (näheres im o.g. APIC-Artikel).
  2. Kontrollieren Sie (anhand des Mainboard-Handbuches), ob die "verdächtigen" Steckkarten nicht in Slots sitzen, die elektrisch an dieselbe IRQ-Leitung angeschlossen sind. Stecken sie die Karten andernfalls um.
  3. Rufen Sie das BIOS-Setup auf. Schalten Sie die Option "Plug-and-Play OS installed" auf "No"
  4. Für diesen Schritt brauchen Sie ein BIOS mit der Option, bestimmten PCI-Slots bestimmte IRQs zuteilen zu können. Stellen Sie im Menü "PnP/PCI Configuration" (oder ähnlich) freie IRQs für die PCI-Slots mit den "Problemkarten" ein. 
    Gibt es ein solches BIOS für Ihr Mainbaord nicht, dann können Sie nur versuchen, durch Kartentausch in den Slots die gewünschte "Entflechtung" herzustellen.
  5. Starten Sie Windows, rufen Sie den Geräte-Manager auf. Unter "Systemgeräte" öffnen Sie das Gerät "PCI-Bus". Deaktivieren Sie unter "IRQ-Steuerung" das Kästchen "IRQ-Steuerung verwenden". Nur dann behält Windows die vom BIOS vorgenommenen Einstellungen auch bei.
    Unter NT kann man die IRQ-Einstellung mit winmsd kontrollieren. Weicht sie von den BIOS-Einstellungen ab, so hängt man in der boot.ini-Datei an die jeweilige Startzeile die Option "/pci lock" an.
  6. Wie immer bei Windows: Neustart!

www.heise.de/ct - ciw - Mail an ciw