Interrupt, IRQs bei 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
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 (mitlerweile auch bis zu 8 INTs). 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.
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.
Der 1. PCI-Slot und der AGP-Slot teilen fast immer einen IRQ.
Der 2. PCI-Slot ist bei den meisten Boards der einzige, für den sich wirklich ein ungeteilter IRQ einstellen lässt (damit das so bleibt, schließen manche Boardhersteller den 6. PCI-Slot lieber an INT_C an).
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 ist dabei Windows 2000 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?
Ganz eindeutig: Nein. 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.
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:
neue Treiber für den Chipsatz und die betroffenen Geräte zu beschaffen
im Geräte-Manager die Ressourceneinstellungen zu ändern (funktioniert meistens nicht)
die Steckkarten in andere Slots zu stecken
ein BIOS-Update des Mainboards
Hilft das alles nichts, so kann man als nächstes versuchen, die IRQ-Zuteilung manuell fest einzustellen:
Kontrolliere (anhand des Mainboard-Handbuches), ob die "verdächtigen" Steckkarten nicht in Slots sitzen, die elektrisch an dieselbe IRQ-Leitung angeschlossen sind. Stecke die Karten andernfalls um.
Rufe das BIOS-Setup auf. Schalte die Option "Plug-and-Play OS installed" auf "No"
Für diesen Schritt brauchst Du ein BIOS mit der Option, bestimmten PCI-Slots bestimmte IRQs zuteilen zu können. Stelle 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 kannst Du nur versuchen, durch Kartentausch in den Slots die gewünschte "Entflechtung" herzustellen.
Starte Windows, rufe den Geräte-Manager auf. Unter "Systemgeräte" öffne das Gerät "PCI-Bus". Deaktiviere 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.
Wie immer bei Windows: Neustart!