Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik

Abstraktion des in der CPU integrierten local APICs.In modernen PCs besitzt jede CPU einen sogenannten "local APIC". Dieser vermittelt zwischen dem I/O APIC, an den die externen Interruptquellen angeschlossen sind, und der CPU. Interruptnachrichten, welche den lokalen APIC von aussen erreichen, werden an den zugeordneten Prozessorkern weitergereicht, um dort die Interruptbearbeitung anzustoßen. Mehr ...

Klassen

union  DestinationFormatRegister
 Destination Format Register. Mehr ...
 
union  IdentificationRegister
 Local APIC ID (für Pentium 4 und später) Mehr ...
 
union  LogicalDestinationRegister
 Logical Destination Register. Mehr ...
 
union  SpuriousInterruptVectorRegister
 
union  TaskPriorityRegister
 Task Priority Register. Mehr ...
 
union  VersionRegister
 Local APIC Version. Mehr ...
 

Typdefinitionen

typedef uint32_t Register
 

Aufzählungen

enum  Model { Cluster = 0x0, Flat = 0xf }
 
enum  APICSoftware { APICDisabled = 0, APICEnabled = 1 }
 Spurious Interrupt Vector Register. Mehr ...
 
enum  FocusProcessorChecking { CheckingEnabled = 0, CheckingDisabled = 1 }
 
enum  SuppressEOIBroadcast { Broadcast = 0, SuppressBroadcast = 1 }
 
enum  Index : uint16_t {
  Identification = 0x020, Version = 0x030, TaskPriority = 0x080, EOI = 0x0b0,
  LogicalDestination = 0x0d0, DestinationFormat = 0x0e0, SpuriousInterruptVector = 0x0f0, InterruptCommandRegisterLow = 0x300,
  InterruptCommandRegisterHigh = 0x310, TimerControl = 0x320, TimerInitialCounter = 0x380, TimerCurrentCounter = 0x390,
  TimerDivideConfiguration = 0x3e0
}
 System Programming Guide 3A, p. 9-8 - 9-10. Mehr ...
 

Funktionen

Register read (Index idx)
 
void write (Index idx, Register value)
 
uint8_t getID ()
 Liefert die ID des in der aktuellen CPU integrieren APICs. Mehr ...
 
uint8_t getLogicalID ()
 
uint8_t getVersion ()
 Liefert Versionsnummer des local APICs. Mehr ...
 
void init (uint8_t logicalID)
 Initialisiert den local APIC der jeweiligen CPU und setzt die lokale APIC ID im LDR Register. Mehr ...
 
void endOfInterrupt ()
 Signalisiert EOI (End of interrupt) Mehr ...
 
void setLogicalID (uint8_t id)
 

Variablen

volatile uintptr_t base = 0xfee00000
 

Ausführliche Beschreibung

Abstraktion des in der CPU integrierten local APICs.

In modernen PCs besitzt jede CPU einen sogenannten "local APIC". Dieser vermittelt zwischen dem I/O APIC, an den die externen Interruptquellen angeschlossen sind, und der CPU. Interruptnachrichten, welche den lokalen APIC von aussen erreichen, werden an den zugeordneten Prozessorkern weitergereicht, um dort die Interruptbearbeitung anzustoßen.

In Multiprozessorsystem ist es darüberhinaus noch möglich mit Hilfe des lokalen APICs Nachrichten in Form von Interprozessorinterrupts an andere CPUs zu schicken bzw. zu empfangen.

Dokumentation der Aufzählungstypen

◆ APICSoftware

Spurious Interrupt Vector Register.

System Programming Guide 3A, p. 9-64

◆ Index

enum LAPIC::Index : uint16_t

System Programming Guide 3A, p. 9-8 - 9-10.

Aufzählungswerte
Identification 

Local APIC ID Register, R/W.

Version 

Local APIC Version Register, RO.

TaskPriority 

Task Priority Register, R/W.

EOI 

EOI Register, WO.

LogicalDestination 

Logical Destination Register, R/W.

DestinationFormat 

Destination Format Register, bits 0-27 RO, bits 28-31 R/W.

SpuriousInterruptVector 

Spurious Interrupt Vector Register, bits 0-8 R/W, bits 9-1 R/W.

InterruptCommandRegisterLow 

Interrupt Command Register 1, R/W.

InterruptCommandRegisterHigh 

Interrupt Command Register 2, R/W.

TimerControl 

LAPIC timer control register, R/W.

TimerInitialCounter 

LAPIC timer initial counter register, R/W.

TimerCurrentCounter 

LAPIC timer current counter register, RO.

TimerDivideConfiguration 

LAPIC timer divide configuration register, RW.

Dokumentation der Funktionen

◆ endOfInterrupt()

void LAPIC::endOfInterrupt ( )

Signalisiert EOI (End of interrupt)

Teilt dem local APIC mit, dass die aktuelle Interruptbehandlung abgeschlossen ist. Diese Funktion muss gegen Ende der Unterbrechungsbehandlung aufgerufen werden und zwar bevor prozessorseitig die Unterbrechungen wieder zugelassen werden.

◆ getID()

uint8_t LAPIC::getID ( )

Liefert die ID des in der aktuellen CPU integrieren APICs.

Rückgabe
lAPIC ID

◆ getVersion()

uint8_t LAPIC::getVersion ( )

Liefert Versionsnummer des local APICs.

Rückgabe
Versionsnummer

◆ init()

void LAPIC::init ( uint8_t  logicalID)

Initialisiert den local APIC der jeweiligen CPU und setzt die lokale APIC ID im LDR Register.

Parameter
logicalIDzu setzende APIC ID