Programmable Interrupt Controller

Aus Lowlevel
Wechseln zu:Navigation,

Der Programmable Interrupt Controller (PIC) empfängt Unterbrechungsanforderungen (Interrupt Requests, kurz IRQs) von der Hardware und gibt sie an die CPU weiter.

Nach einer gewissen Zeit benötigte man mehr als die 8 IRQ-Kanäle, die von einem PIC zur verfügung gestellt wurden. Deshalb wurde ein zweiter PIC über den IRQ2-Anschluss an den ersten PIC angeschlossen. Man erhielt so 15 IRQ-Kanäle.
Heutzutage werden keine echten PICs verwendet und es gibt eine verbesserte Variante namens Advanced Programmable Interrupt Controller (APIC). Aus gründen der Abwährtskompatibilität emulieren jedoch alle PCs die alte variante mit 2 PICs, bis man diese emulation ausschaltet.

Die Verwendung der einzelnen IRQ-Kanäle wurde früher fest vorgegeben, da sie direkt mit der Hardware verdrahtet waren. Die restlichen, freigebliebenen IRQs werden heutzutage dynamisch vergeben. (etwa über PnP)

Ein Spurious Interrupt wird ausgelöst, wenn der PIC irrtümlicherweise einen Interrupt an die CPU meldet und erst dannach bemerkt, dass er eigentlich gar kein Interrupt ausglösen hätte dürfen. Darum ruft die CPU den Spurious Interrupt auf, welcher sich je nach Konfiguration am letzten Eingang des Master oder Slave PIC befindet. Um ihn von den "normalen" Interrupts (LPT oder ATA) zu unterscheiden kann man im ISR Register des jeweiligen PICs schauen, ob dieser gerade einen "normalen" Interrupt bearbeitet oder eben nicht. Ein Spurious Interrupt kann einfach mit einem iret beendet werden ohne dass anderer Code nötig ist.

IRQ  Hardware/Funktion

PIC1
 0  PIT (Proganable Interrupt Timer)
 1  KBC (Tastatur)
 2  Verbindung zum PIC2
 3  RS-232 port 2 and 4
 4  RS-232 port 1 and 3
 5  LPT 2
 6  Floppy
 7  LPT 1 / Spurious Interrupt

PIC2
 8  RTC (CMOS Real Time Clock)
 9
10
11
12  KBC (PSAUX, meist PS/2-Maus)
13  FPU
14  Primary ATA/ATAPI   (aka IDE EIDE)
15  Secondary ATA/ATAPI (aka IDE EIDE) / Spurious Interrupt