24.
APIC – Advanced Programmable Interrupt Controller
24.1.1 Wozu APICs • Unterstützung von Multiprozessorsystemen: − Signalisierung zwischen Prozessoren, − Interruptverteilung, − Initialisierung.
• Verbesserte Interrupt-Architektur: − − − − − −
Mindestens 24 Interrupts pro IO-APIC, Keine Sideband Kommunikation, Peer-to-Peer Szenarium, Kein separater Vektor, Kein Handshake, 8259 optional.
CPU
CPU
CPU
local APIC
local APIC
local APIC
RAM IOAPIC
IOAPIC
• Legacy Interrupts weiterhin möglich. • Evtl. APIC abschalten (Vorsicht Chipfehler !). 24-1
Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-1
PDF created with pdfFactory trial version www.pdffactory.com
24.2. Unterlagen (460) MultiProcessor Specification, Version 1.4, Intel Inc. May 1997 (970) IA-32 Intel® Architecture Software Developer’s Manual, Volume 3: System Programming Guide, Order Number: 253668-017, September 2005 (180) AMD Hammer Family Processor BIOS and Kernel Developer’s Guide, AMD 2002..4. (230) Intel® 82801DBM I/O Controller Hub 4 Mobile (ICH4-M), Datasheet January 2003 (200) Intel® 82806AA PCI 64 Hub (P64H), Datasheet, Intel Inc. November 1999 (200) Intel® 82801AA (ICH) & Intel® 82801AB (ICH0) I/O Controller Hub, Intel Inc., June 1999 (320) 82378ZB System I/O (SIO) and 82379AB System I/O APIC (SIO.A), Intel Inc. 1996 (115) Intel I/O Controller Hub 6 (ICH6) Family, Intel Inc. January 2005. (220) 82093AA I/O advanced programmable Interrupt Controller (IOAPIC), Intel Inc. May 1996 (79) Pentium® II Processor Developer’s Manual, 243502-001, Intel Inc., October 1997 (69) Intel® E7210 Memory Controller Hub (MCH) Chipset, Datasheet, Revision 1.0, February 04 (32) Intel® 820 Chipset: 82820 Memory Controller Hub (MCH), Intel Inc. November 1999. Hans-Peter Messmer, Klaus Dembowski: PC Hardwarebuch, 7. Auflage, Addison-Wesley 2003 24-2
Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-2
PDF created with pdfFactory trial version www.pdffactory.com
24.3. Interruptarchitektur mit APIC 24.3.1 Architekturvariante 1 mit externem Intel 82489DX APIC: • Veralteter ICC-Bus zur Kommunikation mit anderen APICS: − Messages zwischen CPUs zur Kommunikation und Arbitrierung, − Einfacher serieller Bus mit APICCLK, APICD[0], APICD[1].
• Einerseits lokale Interupt-Einheit:
82489DX
Reset, Initialisierung, nonmaskable Int. für CPU, Lokale Interruptpins[0,1] mit Handshake, Berücksichtigung der Taskpriorität, Tabelle mit Interrupt-Atributen, Bussteuerung.
APIC Timer
− − − − −
PRST PINT PNMI
Lokale Einheit Prioritätsgeber Vektorfeld ICC Steuerung ICC-Bus
• Anderseits EA-Interrupt Einheit:
E/A Einheit ICC Steuerung
− Logische oder physikalische Interruptumleitung, − Bussteuerung & Interruptleitungen.
Umleitungstabelle Request Register
• Programmierung über Befehlsregister im IO-Raum ? => Messmer & Dembowski. 24-3
LINT0 LINT1
IRQ0 .. IRQ15
Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-3
PDF created with pdfFactory trial version www.pdffactory.com
24.3.2 Architekturvariante 2 • Lokaler APIC im CPU-Chip integriert ab Intel Pentium Pro. • Kommunikation über seriellen APIC Bus oder über Systembus (ab P4). • IO-APIC verteilt im Chipset integriert.
Lokale APIC Prioritätsgeber Vektorfeld ICC Steuerung
LINT0 LINT1
PRST PINT PNMI
ICC-Bus
24-4
Lokale APIC Prioritätsgeber Vektorfeld Bus Steuerung
LINT0 LINT1
PRST PINT PNMI
APIC Timer
CPU
APIC Timer
CPU
System Bus FSB
Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-4
PDF created with pdfFactory trial version www.pdffactory.com
24.4. Lokaler APIC
− erzeugt durch anderen lokalen APIC, − SMI, NMI, INIT, STARTUP ...
CPU
• Lokaler Geräteinterrupt: − − − − − −
ohne Vermittlung eines I/O APIC, An einem CPU Pin LINT0, LINT1, Performance Monitoring Interrupt. Lokaler APIC Timer Interrupt. Temperatur sensor interrupt. APIC Error Interupts.
24-5
Lokaler APIC
Interrupt Tabelle
24.4.1 Interruptkategorien • Externer Geräteinterrupt, vermittelt durch einen I/O APIC. • IPI - Interprozessor Interrupt:
LVT Lokaler Int.
IPI I/O APIC
Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-5
PDF created with pdfFactory trial version www.pdffactory.com
24.4.2 LVT Format • LVZ = Lokale Vektortabelle. • Keine Weiterleitung an andere CPUs für lokale Interrupts. • Hält Attribute und Vektor nur für lokale Interrupts. • Maximal 18 aus 128 Bit genutzt: 17 16 15 14 13 12 10-8 7-0
Timer Modus (single Shot?), Maskierung des Interrupts Flanken- oder Pegeltriggerung Remote IRR, „CPU working on it“, Polarität des Eingangssignals, Auslieferungszustand Auslieferungsmodus Interruptvektor
24-6
Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-6
PDF created with pdfFactory trial version www.pdffactory.com
24.4.3 Registersatz für Local APIC im P4 • Im Prinzip 128 Bit Register. FEE0_0020 FEE0_0080 FEE0_00B0 FEE0_00D0 FEE0_00E0 FEE0_00F0 FEE0_0100 FEE0_0180 FEE0_0200 FEE0_0280 FEE0_0300 FEE0_0310 FEE0_0320 FEE0_0340 FEE0_0350 FEE0_0370 FEE0_0380
-
Local APIC ID, Local APIC Version, Task-, Arbitration-, Prozessor-Priorität, EOI Register, Logical Destination, Destination Format, Spurious Interrupt Vector, In Service Register (128 Bytes), Trigger Mode (128 Bytes), Interrupt Request (128 Bytes), Error Status, Interrupt Command Register Low (Bits 0-31), Interrupt Command Register High (Bits 32-63), Local Vector Table Timer, Temperaturfühler, Local Vector Table Performance Monitor, Local Vector Table LINT0, Local Vector Table LINT1, Local Vector Table Error, Timer Register bis … E0,
24-7
Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-7
PDF created with pdfFactory trial version www.pdffactory.com
24.5. APIC Kommunikation 24.5.1 Buszugriffsprotokoll und Arbitrierung • Ausführungsformen:
− Alter serieller ICC-Bus mit separatem APIC, neuer ICC-Bus ab Pentium, − Interrupt-Ablieferung über FSB-Nachricht seit Pentium 4.
• Auf dem ICC Bus durch separates Protokoll: − − − −
Buszugriff durch Dominanz von binären Einsen, Gleichzeitig Auswahl des Zieles mit der niedrigsten Priorität, Erweiterung der ICC-Nachricht „on the fly“. Prüfsummen und Retries.
• Bei FSB-Kommunikation: − − − − −
Ab P4 und XEON geschieht die APIC Kommunikation über den Systembus. Schreiben an FEE0_xxxx hex oder FEC0_xxxx hex (I/O APIC), Interrupt-Zyklus auf dem FSB, ähnlich dem PCI Interrupt-Zyklus, Besonderer FSB Zyklus zur prioritätsgesteuerten Interruptverteilung, Zugriffsteuerung durch Standardbusarbitrierung.
24-8
Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-8
PDF created with pdfFactory trial version www.pdffactory.com
24.5.2
Interruptauslieferung Empfangen
Wegwerfen
nein
Adresse ?
Ja
NMI etc. ?
Ja
Annehmen
nein Retry
Ja
Free Slot ?
fixed
Delivery ?
Low Prio.
nein Ja
Retry ?
nein
nein Retry
Free Slot ? Ja Arbitrieren
have Fokus ? nein other Focus
Ja
Ja
Annehmen
Wegwerfen
nein
Winner ?
Ja
Annehmen
nein Annehmen
24-9
Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-9
PDF created with pdfFactory trial version www.pdffactory.com
24.5.3 Auslieferungsmodus (Delivery Mode) • Physikalisch Zieladressierung:
− Ein Prozessor aus 16 oder aus 255 kann adressiert werden.
• Logische Zieladressierung:
− Logische APIC Adresse hat eines aus 8 Bits gesetzt, − Flat model: 8 Bit Nachrichtenaddresse wird mit der Logischen APIC Adresse „anded“, − Flat cluster model: o 4-Bit Clusternummer für 16 Clusters, o gefolgt von 4 Bit Maske für die Auswahl aus 4 APICs aus dem Cluster, − Hierarchisches Cluster Modell: o Mehrere APIC Busse, o 4-Bit Clusternummer für 15 Clustermanager, o Jeder Clustermanager steuert 4 Agenten mit eigenem Bus.
• Auslieferungsmodus:
− Fest, Auslieferung an adressierte Prozessoren, − Prioritätsgesteuert, an den adressierten Prozessor mit der niedrigsten Priorität, − System Management interrupt, Nonmaskable Interrupt, Initialisierung, Startup..
24-10
Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-10
PDF created with pdfFactory trial version www.pdffactory.com
24.5.4 3 Arten von seriellen Nachrichten • Jeweils 2 Bit pro Takt. • EOI Nachrichten a 14 Zyklen: − Zum I/O APIC als Interrupt-Bestätigung.
• Short Messages à 21 Zyklen:
− Fixed Delivery, NMI, SMI, INIT, Extern, Startup, − Falls kein Fokusprozessor => Erweiterung auf 34 Zyklen.
• Nicht fokussierte Nachrichten à 34 Zyklen:
MSG Arb Arb Arb Arb DM.. DLV TRIG VEC VEC VEC VEC DST DST DST DST CHK 0 ST0 ST1 PRIO PRIO PRIO PRIO PRIO PRIO PRIO PRIO A-ID A-ID A-ID A-ID STA 0
MSG Arb Arb Arb Arb DM.. DLV TRIG VEC VEC VEC VEC DST DST DST DST CHK 0 ST0 ST1 0
EOI Arb Arb Arb Arb VEC VEC VEC VEC Chk 0 ST0 ST1 0
− Vergabe an den APIC mit niedrigster Priorität, − Arbitrierung im Laufe der Nachricht.
24-11
Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-11
PDF created with pdfFactory trial version www.pdffactory.com
24.6. Interrupt Betriebsarten: 24.6.1 PIC Modus • emuliert eine Hardware ohne APIC, nur mit 8259 PIC. • Interrupt Mode Configuration Register (IMCR): − indirekt adressierbar über Port 22hex und 23hex, − schaltet den Interrupt-Request um, − INTR und NMI ... CPU 1 IMCR INTR
&
NMI
I/OAPIC 24-12
CPU 3
INTR
INTR
NMI
NMI
&
Local APIC 8259A
CPU 2
LINTIN0..1
ICC
Local APIC LINTIN0..1
ICC
Local APIC LINTIN0..1
ICC
LINTIN0 LINTIN1 / NMI
ICC Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-12
PDF created with pdfFactory trial version www.pdffactory.com
24.6.2 Virtual Wire Modus A • IO-APIC transportiert Interrupt zum Prozessorkern. • Keine Leitungen für Sideband Interrupt erforderlich.
CPU 1
CPU 2
CPU 3
NMI
NMI
NMI
INTR
Local APIC LINTIN0..1
8259A
I/OAPIC
24-13
ICC
INTR
Local APIC LINTIN0..1
INTR
Local APIC
ICC
LINTIN0..1
ICC
LINTIN0 LINTIN1 / NMI
ICC Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-13
PDF created with pdfFactory trial version www.pdffactory.com
24.6.3 Virtual Wire Modus B • Lokaler APIC transportiert Interrupt zum internen INTR-Eingang. • Der historische INTR Pin ist evtl. nicht mehr nach draussen geführt.
CPU 1
CPU 2
CPU 3
INTR
INTR
INTR
NMI
Local APIC LINTIN0..1
ICC
Local APIC LINTIN0..1
8259A I/OAPIC
24-14
NMI
ICC
NMI
Local APIC LINTIN0..1
ICC
LINTIN0 LINTIN1 / NMI
ICC
Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-14
PDF created with pdfFactory trial version www.pdffactory.com
24.6.4 Symmetrischer E/A Modus • für Multiprozessoren mit „native APIC Betrieb“. • Interrupt-Verteilung über APIC Kommunikationskanal. • Mischbetrieb von IO-APIC und 8259A möglich. • Kommunikation über seriellen Bus oder über Systembus. • Evtl. mehrere I/O APICs. •
CPU 1
CPU 2
CPU 3
NMI
NMI
NMI
INTR
Local APIC LINTIN0..1
ICC
Local APIC LINTIN0..1
24-15
ICC
INTR
Local APIC LINTIN0..1
ICC
LINTIN0 LINTIN1 / NMI
8259A I/OAPIC
INTR
ICC Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-15
PDF created with pdfFactory trial version www.pdffactory.com
24.7. I/O-APIC 24.7.1 z.B. Integriert im I/O Controller Hub (Intel 82801...) • Device 31 (LPC), Funktionen 0..3: − LPC (Legacy Peripheral Chips) & IO-APIC, − IDE Controller, SATA Controller, SMBus.
CPU lokaler APIC
• Device 30, Funktionen 0..3:
− PCI-to-PCI Brücke, …, AC `97 Audio, AC `97 Modem.
• Device 29, Funktionen 0..3,7:
82820 - MCH Memory Controller Hub
− USB UHCI Controller 1..4, USB 2.0 EHCI Controller.
• Device 28, Funktionen 0..3:
− LAN Controller
24-16
EOI mData rIndex
Device 27
• Bus 1(?), Device 8, Funktion 0:
I/O APIC
Device 28
− Intel High Definition Audio Controller.
Device 29
• Device 27, Funktion 0:
Device 30
− PCI Express Ports 1..4.
Device 31
82801 - ICH I/O Controller Hub
Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-16
PDF created with pdfFactory trial version www.pdffactory.com
24.7.2 Registersatz für IO-APIC im 82801 • Direkte Register, zugreifbar über Speicheradressen (MMIO): IND – Indexregister @ FEC0_0000h, DAT – Datenregister @ FEC0_0010h. EOIR – End of Interrupt Register @ FEC0_0040h
• Indirekt zugreifbare Register (32/64 Bit breit): ID - APIC Identifier @00, VER - APIC Version @01, RDIR - Interupt Umleitungstabelle, beginnend @10.
rIndex mData
• 64 Bit Eintrag in der Umleitungstabelle: − − − − − − − −
4 oder 8-Bit Zieladresse für diesen Interrupt, 8-Bit Erweiterung der Zieladresse für xAPIC, Maskierungsbit für diesen Interrupt, Flanken- oder Pegelgesteuerter Interrupt, Remote IRR, Polarität, Idle, Physical/Logical Delivery, Delivery Mode, Int. Vektor.
24-17
64 Bit Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-17
PDF created with pdfFactory trial version www.pdffactory.com
24.8. Programmierung • IPI von anderen CPU über Interrupt Command Register erzeugen • APIC Präsenz als Bit 9 in Edx nach CPUID (eax=1) • Enabling/Disabling des lokalen APIC: − Entweder beim Systemstart, − Oder programmgesteuert über
• Zugriff auf den lokalen APIC durch die CPU erzeugt keine Buszyklen. • Memory mapped APIC Register. − Speicherattribut aus Sicht der CPU:unacheable, physical.
• Lokaler APIC @ FEE0_0000 hex. • I/O APIC @ FEC0_0000 hex. • IA32_APIC_BASE MSR. − Relozierung des lokalen APIC, − Ein- und Ausschalten per Software.
24-18
Systemprogrammierung II, Winter 2005/06, P. Schulthess 24-18
PDF created with pdfFactory trial version www.pdffactory.com