OOStuBS/MPStuBS
|
Eintrag in der IO Redirection Table. Mehr ...
#include <ioapic_registers.h>
Öffentliche Attribute | |
unsigned int | logical_destination:8 |
Menge von Zielprozessoren. | |
Eintrag in der IO Redirection Table.
Jeder Eintrag in der IO Redirection Table symbolisiert eine externe Interruptquelle. Für jeden externen Interrupt lassen sich hier folgende Einstellungen vornehmen:
DELIVERY_MODE_LOWESTPRI
verwendet werden. Da die einzelnen CPUs alle dieselbe Priorität besitzen, werden so die auftretenden Interrupts gleich über alle CPUs verteilt.DESTINATION_MODE_LOGICAL
verwendet werden.POLARITY_HIGH
verwenden.TRIGGER_MODE_EDGE
für die Tastatur und den Timer, die (optionale) serielle Schnittstelle jedoch TRIGGER_MODE_LEVEL
1
maskiert die dem Eintrag entsprechende Interruptquelle aus, 0
lässt den Interrupt zu.1
, für MPStuBS müssen in der Bitmaske die untersten n
Bits auf 1
gesetzt sein, wobei n
die Anzahl der im System vorhandenen CPUs ist (siehe APICSystem::getNumberOfCPUs()). Damit kommen alle CPUs als Empfänger infrage und die Interruptlast wird so gleichmäßig über alle CPUs verteilt. Hinweis: In QEMU funktioniert dies nicht. Dort bekommt immer CPU 0
, also der BSP alle Interrupts.Ein Tabelleneintrag besteht dabei aus zwei 32bit breiten Wörtern IOREDTBL_H bzw. IOREDTBL_L
Die Redirection Tabelle beginnt bei IOAPIC-Register 0x10
und endet bei 0x3f
. Jeder Eintrag umfasst 64 bit, also 2 Register des IOAPICs. IOREDTBL_L ist niederwertige Wort, IOREDTBL_H das höherwertige. Eintrag 0 in der Tabelle wären dann die Register 0x10
(entspricht IOREDTBL_L) und 0x11
(entspricht IOREDTBL_H).