Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

<2004-09-07> CPU+Mainboard FAQ - Kapitel 6/14 - IRQs

0 views
Skip to first unread message

CPU und Mainboard FAQ Team

unread,
Dec 2, 2009, 8:00:05 PM12/2/09
to
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.

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...

0 new messages