nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

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

Von: CPU und Mainboard FAQ Team (dchcm@dch-faq.de) [Profil]
Datum: 03.06.2010 02:00
Message-ID: <cpu+mainboard-faq-kapitel06-03.06.2010@news.dch-faq.de>
Followup-to: de.comp.hardware.cpu+mainboard.misc
Newsgroup: news.answers de.answers de.comp.hardware.cpu+mainboard.uebertakten de.comp.hardware.cpu+mainboard.intel de.comp.hardware.cpu+mainboard.amd de.comp.hardware.cpu+mainboard.misc
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...


[ Auf dieses Posting antworten ]