Archive-name: de/comp/hardware/cpu+mainboard/kapitel_6
Posting-frequency: monthly Last-modified: 2004-09-07 URL: http://dch-faq.de/kap06.html Disclaimer: Approval for *.answers is based on form, not content. See reader questions & answers on this topic! - Help others by sharing your knowledge 6. Interrupt Requests (IRQs) ============================ Interrupt ReQuests (kurz "IRQs") gehören immer noch zu den Problemkindern schlechthin. Und das, obwohl die PCI-Spezifikation 2.0, welche das Teilen von Interrupt Requests (IRQ-sharing) und Interruptleitungen erlaubt, schon über 8 Jahre auf dem Buckel hat. Trotzdem ist ein Ende der Fragen um die IRQs nicht in Sicht. Warum das so ist, soll in diesem Kapitel verdeutlicht werden. 6.1 Wozu IRQs? ============== Jeder, der schon mal Probleme mit den IRQs hatte, wird sich diese Frage wohl schon gestellt haben. Dabei sind IRQs durchaus sinnvoll. Um den verschiedenen Anforderungen der einzelnen Geräte Herr zu werden, könnte die CPU z.B. alle Geräte immer wieder nacheinander abfragen (sog. Polling), um so festzustellen, ob das entsprechende Gerät Arbeit für die CPU hat oder eben nicht. So würden aber auch Geräte abgefragt, die grade gar nichts zu tun haben, denn von einer Tastatur kommen ja normalerweise weniger Daten als von einer Festplatte etc. Das würde dann die CPU unnötig belasten, da CPU-Zeit verbraucht wird. Genau deshalb gibt es IRQs, die auch Unterbrechungsanforderungen genannt werden. Hat ein Gerät eine Aufgabe für die CPU, teilt es dies der CPU per IRQ mit, die dann die ankommenden Aufgaben entgegennimmt. Um zwischen den verschiedenen Geräten unterscheiden zu können, gibt es im Chipsatz den PIC (Programmable Interrupt Controller), welcher der CPU via Speicheradresse die genaue Aufgabe für das Gerät mitteilt. Die ersten PIC zur IBM XT-Zeit waren nur 8 Bit breit und hatten so nur 8 IRQs. Zur Einführung des IBM AT wurde dann ein zweiter PIC eingebaut, womit 16 IRQs möglich waren. Viele der 16 möglichen IRQs sind im System schon festgelegt. Dazu hier eine Übersicht: IRQ-Nummer | Verwendung | evtl. freischaltbar ===========+============================+===================== 00 | PC-Taktgeber | Nein -----------+----------------------------+--------------------- 01 | Tastatur | Nein -----------+----------------------------+--------------------- 02 | 2. PIC | Nein -----------+----------------------------+--------------------- 03 | Seriell COM2 | Ja -----------+----------------------------+--------------------- 04 | Seriell COM1 | Ja -----------+----------------------------+--------------------- 05 | frei | - -----------+----------------------------+--------------------- 06 | Diskettenlaufwerk | Ja (*) -----------+----------------------------+--------------------- 07 | Parallel LPT1 | Ja -----------+----------------------------+--------------------- 08 | Echtzeitsystemuhr | Nein -----------+----------------------------+--------------------- 09 | frei | - -----------+----------------------------+--------------------- 10 | frei | - -----------+----------------------------+--------------------- 11 | frei | - -----------+----------------------------+--------------------- 12 | PS/2-Mausanschluss | Ja (*) -----------+----------------------------+--------------------- 13 | Koprozessor | Nein -----------+----------------------------+--------------------- 14 | Erster IDE-Controller | Ja -----------+----------------------------+--------------------- 15 | Zweiter IDE-Controller | Ja -----------+----------------------------+--------------------- (*) nur bei modernen Chipsätzen wirklich möglich Wie leicht zu erkennen ist, sind von den 16 möglichen IRQs normalerweise nur 4 wirklich frei. 7 weitere können im besten Fall freigegeben werden, macht maximal 11 freie Interrupt-Leitungen. 6.2 Warum diese Anzahl an IRQs? =============================== Das ist, wie bereits angedeutet, ein Relikt aus IBM´s AT-Zeit und der ISA-Architektur, die pro PIC nur 8 IRQ-Eingänge vorsah. Im AT wurden 2 PIC verwendet, so kommt man auf 16 IRQs. Jede ISA-Karte hatte dabei für jeden Interruptleitung einen separaten Kontaktpin. In 8 Bit ISA-Karten standen nur die IRQs 3-7 zur Verfügung, was ein äusserst enger Spielraum war, als man noch viele ISA-Karten unterzubringen hatte. Erst mit 16 Bit ISA-Karten konnten auch die höheren IRQs verwendet werden. 6.3 IRQs, ISA und Plug & Play ============================= Elektrisch gesehen sind die "Legacy-Geräte" aus der Tabelle in 6.1 die einen eigenen IRQ haben ISA-Geräte. Sie belegen also je eine eigene Leitung. Das führt dazu, dass allein bei der Präsenz zweier ISA-Geräte auf einem IRQ keins von beiden läuft, selbst wenn sie einzeln angesprochen werden. Der Grund dafür ist, dass der PIC die IRQs von ISA-Karten an der Impuls-Flanke erkennt (sog. "Edge-Triggering"), und somit IRQs von 2 Geräten auf der selben Leitung verloren gehen können. Dieses Problem könnte mit dem Erkennen der IRQs an der Signalamplitude (sog. "Level-Triggering") umgangen werden; leider unterstützen ISA-Karten diesen Modus nicht. Für 'Insider' sei angemerkt: Prinzipiell wären auch ISA-Karten IRQ-Sharing fähig: Ob ein IRQ flanken- oder pegelgesteuert ausgelöst wird, kann im PIC einzeln eingestellt werden, und viele gängige Bausteine (z.B. der UART) können ebenfalls in beiden Betriebsarten arbeiten. Es bleibt nur das Problem, dass die IRQs auf dem ISA-Bus mit einem Aktiv-H-Pegel arbeiten, so dass man mit einfachen OC-Treibern und Wired-OR nicht weiter kommt. Man muss zusätzlich eine Schottky-Diode verbauen, die einen Stromfluss in den IRQ-Ausgang hinein verhindert. Bleibt nur noch das Problem mit den Treibern, aber das ist natürlich wieder eine Angelegenheit des Betriebssystems. Linux kann z.B. serielle Schnittstellen auf dem ISA-Bus mit IRQ-Sharing ansteuern. Auf alten ISA-Karten wird der IRQ meist noch per Jumper festgelegt. Modernere Karten kommen mit Setup-Programmen daher, mit denen man den gewünschten IRQ auswählen kann. Plug-and-Play-ISA-Karten können dem BIOS sogar selber mitteilen, welchen IRQ sie gerne hätten. Die Daten dazu legt das BIOS im ESCD-Speicherbereich (ESCD = Extended System Configuration Data) des BIOS-EEPROMs ab, von wo aus das Betriebssystem darauf zugreifen kann. Vor der Inbetriebname einer alten ISA-Karte sollte man den IRQ und ggf. auch den Input/Output- Bereich im BIOS fest reservieren, da diese Daten sonst auch an PCI- oder ISA-Plug&Play-Geräte vergeben werden könnten. 6.4 PCI und IRQ-Lines ===================== Um den Beschränkungen der ISA-Karte aus dem Weg zu gehen, wurde mit der PCI-Spezifikation auch das gemeinsame Verwenden von IRQs durch mehrere PCI-Geräte erlaubt (sog. IRQ-sharing). Dabei teilen sich mehrere Geräte eine physikalische Leitung. Die Treiber müssen nun selber herausfinden, welches Gerät den IRQ tatsächlich ausgelöst hat. Dies geschieht mittels des bereits erwähnten Level-Triggering. Im ungünstigen Fall braucht die CPU natürlich ein Paar Takte länger, um den richtigen Treiber zu finden, was mehr Zeit kostet, als den betreffenden Treiber im ISA-Fall einfach direkt zu laden. Das kann genau dann zu Problemen führen, wenn auf leistungsschwache Systemen zeitsynchrone Anwendungen laufen sollen. Durch die IRQ-Teilung und die dadurchh entstehenden minimalen Verzögerungen kann es zu Problemen z.B. mit der Video-Darstellung kommen. Letzlich ist es eine Sache der PCI-Gerätetreiber, ob das Teilen der IRQs funktioniert oder nicht. Hersteller, die es immer noch nicht geschafft haben, dieses beinahe uralte Feature in ihre Karten zu implementieren, gehören eigentlich vom Markt verbannt. Besonders Karten der Marke "Creative" sind in der Vergangenheit häufig negativ aufgefallen, ebenso wie TV- oder Videocapture-Karten. Wer also viele PCI-Geräte (AGP-Karte, PCI-Karten, USB, evtl. Onboard-RAID etc.) einbauen und verwenden will, sollte sich vor dem Kauf von der Fähigkeit des IRQ-sharing der PCI-Kartentreiber überzeugen. Obwohl viele Mainboards heute AGP und 4 oder mehr PCI-Plätze bieten, sind für PCI-Karten nur 4 Interruptleitungen pro Steckplatz vorgesehen. Ausserdem gab es eine Zeit lang auch nur 4 Leitungen pro Chipsatz, die auf die verschiedenen Slots verteilt werden konnten. Nur wenige moderne Chipsätze wie der SiS735 bieten hier 6 oder gar 8 Leitungen, die dann besser auf die Steckplätze verteilt werden können. Die 4 Kontakte am Steckplatz werden INTA# bis INTD# genannt. Dies sind jedoch keine direkten Verbindungen zu den Interruptleitungen 0 bis 15. Für die Zuordnungen der Interrupt-Lines zu einem konkreten IRQ ist der IRQ-Router zuständig, der meist in der Southbridge oder dem ICH sitzt. Früher wurde dies noch durch Jumper auf dem Board realisiert. Ist nun eine PCI-Karte installiert, kann diese sich die Interrupt-Line nicht selber aussuchen, sondern nimmt immer erst die Interrupt-Line INTA# (es sei denn, dass der INT# auf der Karte explizit vorgegeben werden kann). Erst wenn mehrere Controller auf derselben Karte sitzen (z.B. mehrkanal SCSI-Adapter), werden die weiteren Leitungen verwendet. Damit nun nicht alle Adapter auf dieselbe Interrupt-Line zugreifen, werden die 4 Interrupt-Leitungen möglichst gleichmässig auf die verschiedenen PCI-Steckplätze verteilt. So sollte es auch in vollgestopften System noch machbar sein, möglichen IRQ-Konflikten aus dem Weg zu gehen. Leider veröffentlichen die Mainboardhersteller nur in den seltensten Fällen, wie sie ihre Interrupt-Lines tatsächlich verteilt haben. Die allerwenigsten halten sich an die folgende vom PCI-Konsortium vorgeschlagene Verteilung: Empfohlenes Schema nach PCI-Spezifikation: ------------------------------------------ AGP | PCI 1 | PCI 2 | PCI 3 | PCI 4 | PCI 5 | PCI 6 | USB | AC'97 ======+=======+=======+=======+=======+=======+=======+=======+======= INTA# | INTA# | INTB# | INTC# | INTD# | INTA# | INTB# | INTD# | INTC# ------+-------+-------+-------+-------+-------+-------+-------+------- INTB# | INTB# | INTC# | INTD# | INTA# | INTB# | INTC# | - | - ------+-------+-------+-------+-------+-------+-------+-------+------- - | INTC# | INTD# | INTA# | INTB# | INTC# | INTD# | - | - ------+-------+-------+-------+-------+-------+-------+-------+------- - | INTD# | INTA# | INTB# | INTC# | INTD# | INTA# | - | - ------+-------+-------+-------+-------+-------+-------+-------+------- INT-Schema mit separatem IRQ für Slot 2 (z.B. ASUS K7V): -------------------------------------------------------- AGP | PCI 1 | PCI 2 | PCI 3 | PCI 4 | PCI 5 | PCI 6 | USB | AC'97 ======+=======+=======+=======+=======+=======+=======+=======+======= INTA# | INTA# | INTB# | INTD# | INTD# | INTA# | - | INTD# | INTC# ------+-------+-------+-------+-------+-------+-------+-------+------- INTB# | INTB# | INTC# | INTA# | INTA# | INTB# | - | - | - ------+-------+-------+-------+-------+-------+-------+-------+------- - | INTC# | INTD# | INTB# | INTB# | INTC# | - | - | - ------+-------+-------+-------+-------+-------+-------+-------+------- - | INTD# | INTA# | INTC# | INTC# | INTD# | - | - | - ------+-------+-------+-------+-------+-------+-------+-------+------- INT-Schema mit separatem IRQ für Slot 5 (z.B. Abit KA7): -------------------------------------------------------- AGP | PCI 1 | PCI 2 | PCI 3 | PCI 4 | PCI 5 | PCI 6 | USB | AC'97 ======+=======+=======+=======+=======+=======+=======+=======+======= INTA# | INTA# | INTB# | INTB# | INTD# | INTC# | INTD# | INTD# | - ------+-------+-------+-------+-------+-------+-------+-------+------- INTB# | INTB# | INTD# | INTA# | INTA# | INTD# | INTB# | - | - ------+-------+-------+-------+-------+-------+-------+-------+------- - | INTC# | INTC# | INTD# | INTB# | INTA# | INTC# | - | - ------+-------+-------+-------+-------+-------+-------+-------+------- - | INTD# | INTA# | INTC# | INTC# | INTB# | INTA# | - | - ------+-------+-------+-------+-------+-------+-------+-------+------- INT-Schema für 3 PCI-Slots mit separatem IRQ für Slot 2: -------------------------------------------------------- AGP | PCI 1 | PCI 2 | PCI 3 | PCI 4 | PCI 5 | PCI 6 | USB | AC'97 ======+=======+=======+=======+=======+=======+=======+=======+======= INTA# | INTA# | INTB# | INTC# | - | - | - | INTD# | INTC# ------+-------+-------+-------+-------+-------+-------+-------+------- INTB# | INTB# | INTC# | INTD# | - | - | - | - | - ------+-------+-------+-------+-------+-------+-------+-------+------- - | INTC# | INTD# | INTA# | - | - | - | - | - ------+-------+-------+-------+-------+-------+-------+-------+------- - | INTD# | INTA# | INTB# | - | - | - | - | - ------+-------+-------+-------+-------+-------+-------+-------+------- Wie aus den Tabellen ersichtlich wird, haben AGP und PCI verschieden viele Abgriffe an INT-Leitungen. Dies ist mit dem Layout der AGP- und PCI-Slots begründet. Die Steckerbelegung der Steckplätze sieht wie folgt aus: Steckerbelegung des AGP- und PCI-Steckplatzes: ---------------------------------------------- | AGP-Slot || PCI-Slot +----------+----------++----------+---------- Pin | Leiste B | Leiste A || Leiste B | Leiste A =====+==========+==========++==========+========== 1 | OVRCNT# | + 12 V || - 12 V | TRST# -----+----------+----------++----------+---------- 2 | + 5 V | TYPEDET# || TCK | + 12 V -----+----------+----------++----------+---------- 3 | + 5 V | Reserved || Masse | TMS -----+----------+----------++----------+---------- 4 | USB + | USB - || TDO | TDI -----+----------+----------++----------+---------- 5 | Masse | Masse || + 5 V | + 5 V -----+----------+----------++----------+---------- 6 | INTB# | INTA# || + 5 V | INTA# -----+----------+----------++----------+---------- 7 | CLK | RST# || INTB# | INTC# -----+----------+----------++----------+---------- 8 | REQ# | GNT# || INTD# | +5V (I/O) -----+----------+----------++----------+---------- (Pinbelegung bei Draufsicht auf die Platine von der Bestückungsseite, die Nummerierung beginnt bei den Kontakten, die der Platinenkante am nächsten sind, die Leiste "B" liegt dann links) Pinbelegung des AGP- und PCI-Steckplatzes, unten: ------------------------------------------------- | AGP-Slot || PCI-Slot +---------------+---------------++---------------+-------------- Pin | Leiste A | Leiste B || Leiste A | Leiste B =====+===============+===============++===============+============== 1 | +12V | OVRCNT# || TRST# | -12V -----+---------------+---------------++---------------+-------------- 2 | TYPEDET# | +5V || +12V | TCK -----+---------------+---------------++---------------+-------------- 3 | Reserved | +5V || TMS | Masse -----+---------------+---------------++---------------+-------------- 4 | USB- | USB+ || TDI | TDO -----+---------------+---------------++---------------+-------------- 5 | Masse | Masse || +5V | +5V -----+---------------+---------------++---------------+-------------- 6 | INTA# | INTB# || INTA# | +5V -----+---------------+---------------++---------------+-------------- 7 | RST# | CLK || INTC# | INTB# -----+---------------+---------------++---------------+-------------- 8 | GNT# | REQ# || +5V(I/O) | INTD# -----+---------------+---------------++---------------+-------------- (Pinbelegung bei Sicht auf die Platine von der Unterseite her, die Nummerierung beginnt bei den Kontakten, die der Platinenkante am nächsten sind, die Leiste "A" liegt dann links, die Pins sind versetzt angeordnet) Mit den Daten der Pinbelegung an der Unterseite des Mainboards kann man im Zweifelsfall auch durch einen Blick auf das Mainboard herausfinden, wo welche INT-Leitung verläuft. 6.5 ACPI und APIC ================= Auf allen modernen Boards wird heute ACPI (Advanced Configuration and Power Management Interface) implementiert. ACPI bietet dabei weit mehr als nur fortschrittlichere Energie Spar-Modi, wie sie seit dem Advanced Power Management (APM) bekannt sind. ACPI ermöglicht es, die Kontrolle über die Vergabe der Interrupts komplett an das Betriebssystem abzugeben. Dazu teilt das BIOS dem virtuellen ACPI-Gerät einen IRQ zu. Dieser Interrupt beherrscht zwar IRQ-sharing, steht aber nicht mehr für PCI-Karten zur Verfügung, die kein IRQ-sharing können. Ein ACPI-BIOS verwaltet somit weit mehr als nur die IRQ-Routing Tabellen, durch die Windows sonst seine Geräte konfiguriert. Auf Ein-Prozessor-Systemen teilt z.B. Windows 2000 allen PCI-Geräten den selben IRQ zu. Solange die Systeme einwandfrei arbeiten, besteht auch kein Grund dieses Verhalten zu ändern. Wer jedoch die IRQ-Verteilung ändern muss, weil es zu Problemen gekommen ist, muss komplett auf ACPI verzichten. So richtig kompliziert wird die Interrupt-Verteilung erst, wenn es sich um Systeme mit mehreren CPUs handelt. In einem SMP-System (Symmetric Multiprocessing) müssen nicht nur die PCI-Geräte IRQs auslösen können, sondern auch die CPUs selber müssen sich untereinander mittels IRQ verständigen. Damit das noch funktioniert, hat der PIC einen Nachfolger bekommen, den APIC (Advanced PIC), der aber nicht auf SMP-Systeme beschränkt ist; mitlerweile kann man auch Single-CPU System im APIC-Mode laufen lassen. Solch ein APIC steuert nicht nur eine einfache Leitung an einem Prozessor, sondern kommuniziert auf vielen Leitungen mit mehreren Prozessoren und anderen APICs nach einem bestimmten Protokoll. Alle Intel-Prozessoren und der AMD Athlon ab Model 2 ("K75") können im APIC-Modus laufen, auf den Mainboards selber befindet sich bei Dual-Systemen ein weiterer APIC. Dieser Mainboard-APIC kümmert sich um die IRQs für PCI- und Onboard-Geräte und nennt sich deshalb IOAPIC (Input Output APIC). Der IOAPIC kann aber noch mehr: statt der 16 IRQs können jetzt 24 (teilweise auch deutlich mehr; je nach Ausführung) IRQs verwendet werden. Diese lassen sich aber nur in APIC-fähigen Betriebssystemen (wie Windows 2000 oder Linux) verwenden. Wer Probleme mit ACPI hat oder sich weiter einlesen möchte, dem sei http://www.tu-chemnitz.de/informatik/HomePages/RA/news/stack/kompendium/vortraege_99/power/ACPI_1.html empfohlen. 6.6 Was tun bei IRQ-Problemen? ============================== Leider, leider - ein Patentrezept gibt es nicht. Es gibt durchaus Fälle, in dem nur der Kauf neuer Hardware ein Problem löst. Doch vorher sollte man alle legitimen Möglichkeiten ausgetestet haben. Wenn man an seinem PC IRQ-Probleme vermutet, sollte man ihn zunächst in der Minimalkonfiguration starten. Das bedeutet: Alle zum Betrieb des PCs nicht benötigten Karten fliegen raus. In den PC gehört nur eine Grafikkarte, egal ob AGP oder PCI. Damit wird dann der PC neu gestartet. Ist das Problem noch nicht beseitigt, kann man zusätzlich versuchen, alle momentan nicht benötigten onboard-Komponenten abzuschalten, wie USB, LPT1, COM1 und COM2, Sound etc. Dann schaltet man nacheinander alle Features wieder ein und erfährt so, bei welchem Gerät genau das Problem auftritt. Diesem Gerät ist dann per BIOS möglichst ein separater IRQ zuzuweisen, sofern das BIOS einen solchen Eingriff gestattet. Nun kann man mit der erneuten Installation der PCI-Karten beginnen. Sobald auch hier ein Problem auftritt, kann man dies meist durch einen eigenen IRQ für das betroffenen Gerät beheben. Manchmal kommt es auch vor, dass sich nur 2 bestimmte Karten nicht mögen, die aufgrund der IRQ-Lines den gleichen IRQ verwenden. Dann hilft nur das Ausprobieren der verschiedenen Steckplätze für die beiden PCI-Karten. In solchen Fällen heist es, die Ruhe zu bewahren und vor allem systematisch vorzugehen. Bei 6 PCI-Slots und 6 PCI-Karten gibt es immerhin 720 mögliche Konfigurationen. Also nicht den Mut verlieren... User Contributions: |
Comment about this article, ask questions, or add new information about this topic: