Local Advanced Programmable Interrupt Controller — Änderungen 10375 → 11142

Zeile 1: Zeile 1:
−
Die '''LAPIC''' oder '''Local APIC''' (= '''Local Advanced Programmable Interrupt Controller''') nimmt [[Interrupt | Interrupts]] von der [[I/O APIC]] (oder auch von der [[PIC]]) und anderen prozessorinternen Einheiten an und leitet diese an den Prozessorkern zum Abarbeiten weiter. Außerdem ist es nur über die LAPIC möglich [[IPI | IPIs]] zu senden und zu empfangen.
+
Der '''LAPIC''' oder '''Local APIC''' (= '''Local Advanced Programmable Interrupt Controller''') nimmt [[Interrupt | Interrupts]] vom [[I/O APIC]] (oder auch vom [[PIC]]) und anderen prozessorinternen Einheiten an und leitet diese an den Prozessorkern zum Abarbeiten weiter. Außerdem ist es nur über den LAPIC möglich [[IPI | IPIs]] zu senden und zu empfangen.
  
 
== Register ==
 
== Register ==
 
=== Aufbau ===
 
=== Aufbau ===
−
Die Register der ''Local APIC'' sind in den physischen Speicher eingeblendet. Jedes der Register beginnt an einer 16 Byte Grenze, erstreckt sich aber nur über die ersten 32 Bit. Falls das Register größer als 32 Bit ist, befinden sich die nächst höheren 32 Bit an der nächst höheren 16 Byte Grenze. Die ''Local APIC'' stellt folgende Register zur Programmierung bereit:
+
Die Register des ''Local APIC'' sind in den physischen Speicher eingeblendet. Jedes der Register beginnt an einer 16 Byte Grenze, erstreckt sich aber nur über die ersten 32 Bit. Falls das Register größer als 32 Bit ist, befinden sich die nächst höheren 32 Bit an der nächst höheren 16 Byte Grenze. Der ''Local APIC'' stellt folgende Register zur Programmierung bereit:
  
  
Zeile 134: Zeile 134:
  
 
=== Initialisierung ===
 
=== Initialisierung ===
−
Zuerstmal muss man die ''Local APIC'' über das ''Spurious Interrupt Vector Register'' aktivieren (und natürlich den Spurious Interrupt Vector setzten). Anschließend sind noch folgende Register zu initialisieren:
+
Zuerstmal muss man den ''Local APIC'' über das ''Spurious Interrupt Vector Register'' aktivieren (und natürlich den Spurious Interrupt Vector setzten). Anschließend sind noch folgende Register zu initialisieren:
 
* ''Task Priority Register''
 
* ''Task Priority Register''
 
* ''LVT Timer Register''
 
* ''LVT Timer Register''
Zeile 148: Zeile 148:
 
=== End of Interrupt ===
 
=== End of Interrupt ===
  
−
Ein ''End of Interrupt'' (EOI) wird der ''Local APIC'' signalisiert, in dem man in das ''EOI Register'' den Wert 0 schreibt.
+
Ein ''End of Interrupt'' (EOI) wird dem ''Local APIC'' signalisiert, in dem man in das ''EOI Register'' den Wert 0 schreibt.
  
 
== Timer ==
 
== Timer ==
−
Der locale APIC besitzt einen sehr genauen Timer, welcher eigentlich allen anderen Timern wie dem [[PIT]] oder der Real-time Clock vorgezogen werden sollte. Wenn das System mit mehreren Prozessoren (siehe auch [[SMP]]) oder mit dem [[I/O APIC]] (Symmetric Mode) läuft, dann ist er eigentlich die einzige Wahl, denn der PIT ist meistens nur mit dem PIC verbunden und damit nur an den [[Symmetrisches Multiprozessorsystem#Unterteilung der Prozessoren|BSP]] angeschlossen. Er kann somit nicht effizient für SMP verwendet werden.
+
Der ''Local APIC'' besitzt einen sehr genauen Timer, welcher eigentlich allen anderen Timern wie dem [[PIT]] oder der Real-time Clock vorgezogen werden sollte. Wenn das System mit mehreren Prozessoren (siehe auch [[SMP]]) oder mit dem [[I/O APIC]] (Symmetric Mode) läuft, dann ist er eigentlich die einzige Wahl, denn der PIT ist meistens nur mit dem PIC verbunden und damit nur an den [[Symmetrisches Multiprozessorsystem#Unterteilung der Prozessoren|BSP]] angeschlossen. Er kann somit nicht effizient für SMP verwendet werden.
  
 
=== Register ===
 
=== Register ===