Übungen zu BS - Aufgaben (WS 2013/14)
Abstraktion für die Erkennung und das Booten eines PCs mit APIC. Mehr ...
#include <apicsystem.h>
Öffentliche Typen | |
enum | SystemType { MP_APIC, UP_APIC, UNDETECTED } |
Art des Systems. Mehr ... | |
enum | Device { timer = 0, keyboard = 1, com1 = 3, com2 = 4, floppy = 6, lpt1 = 7, rtc = 8, ps2mouse = 12, ide1 = 14, ide2 = 15 } |
Öffentliche Methoden | |
void | detectSystemType () |
Führt Systemerkennung aus. | |
bool | bootCPU (unsigned int cpu_id, void *top_of_stack) |
Startet einen Applikationsprozessor. | |
int | getCPUID () |
Liefert die CPUID der aktuellen CPU. | |
void | sendCustomIPI (unsigned char logicalDestination, unsigned char vector) |
Auslösen eines Interprozessorinterrupts. | |
void | initLAPIC () |
Initialisiert den Local APIC. | |
unsigned char | getIOAPICSlot (APICSystem::Device device) |
Liefert die Nummer des Pins, an dem das Gerät device hängt. | |
const char * | getCPUModel (unsigned int cpuID) |
SystemType | getSystemType () |
Abfrage des Systemtyps. | |
unsigned int | getNumberOfCPUs () |
Gibt die Anzahl der CPUs zurück. | |
unsigned int | getNumberOfOnlineCPUs () |
Gibt die Anzahl der erfolgreich gebooteten CPUs zurück. | |
unsigned char | getIOAPICID () |
Liefert die während des Bootvorgangs ausgelesene ID des IOAPICs. | |
unsigned char | getBSPID () |
Liefert die ID des Bootprozessors (BSP) | |
void | callin () |
void | waitForCallout () |
unsigned char | getAndIncNextLogicalAPICID () |
unsigned char | getLogicalLAPICID (unsigned char cpu) |
Ausführliche Beschreibung
Abstraktion für die Erkennung und das Booten eines PCs mit APIC.
Dokumentation der Aufzählungstypen
Dokumentation der Elementfunktionen
bool APICSystem::bootCPU | ( | unsigned int | cpu_id, |
void * | top_of_stack | ||
) |
Startet einen Applikationsprozessor.
- Parameter
-
cpu_id Gib an, welcher Prozessor gestartet werden soll. Applikationsprozessoren haben die IDs 1 bis n-1 top_of_stack Zeiger auf die oberste Adresse des Stacks, der von der zu startenden CPU verwendet werden soll.
- Rückgabe
- True, falls CPU Bootup erfolgreich; sonst false.
void APICSystem::detectSystemType | ( | ) |
Führt Systemerkennung aus.
Diese Funktion erkennt ein eventuell vorhandenes Mehrprozessorsystem. Nach erfolgter Erkennung kann der Systemtyp mit Hilfe der Methode getSystemType() abgefragt werden.
int APICSystem::getCPUID | ( | ) |
Liefert die CPUID der aktuellen CPU.
- Rückgabe
- CPUID der aktuellen CPU.
|
inline |
Abfrage des Systemtyps.
- Rückgabe
- Gibt den Systemtyp zurück
void APICSystem::sendCustomIPI | ( | unsigned char | logicalDestination, |
unsigned char | vector | ||
) |
Auslösen eines Interprozessorinterrupts.
Mit Hilfe dieser Methode kann ein Interprozessorinterrupt(IPI) an eine ganze Gruppe von Prozessoren geschickt werden. In MPStuBS ist das System derart konfiguriert, dass insgesamt 8 CPUs angesprochen werden können. Jede CPU wird wird durch ein Bit in logicalDestination repräsentiert. Dabei steht Bit 0 für CPU 0, Bit 1 für CPU 1 usw.. Welcher Interruptvektor dabei ausgelöst werden soll, wird durch vector festgelegt. Zum Senden eines IPIs soll dabei die Methode LAPIC::sendIPI() verwendet werden.
- Parameter
-
logicalDestination Menge von Prozessoren, die einen IPI erhalten sollen. vector Interruptvektor, der ausgelöst werden soll.
Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien:
- machine/apicsystem.h
- machine/apicsystem.cc