OOStuBS/MPStuBS
|
Das Interrupt Subsystem. Mehr ...
Klassen | |
class | Gate |
Klasse von Objekten, die in der Lage sind, Unterbrechungen zu behandeln.Die Klassen aller Objekte, die in der Plugbox eingetragen werden sollen, müssen von Gate abgeleitet werden und die virtuelle Methode prologue() definieren. Für die virtuelle Methode epilogue() kann in Gate eine leere Implementierung angegeben werden, so dass abgeleitete Treiberklassen nicht unbedingt einen Epilog definieren müssen. Um feststellen, ob ein Gate-Objekt schon in eine Epilog-Warteschlange einhängt wurde, soll ein entsprechendes boolesches Attribut in die Klasse aufgenommen werden, das durch Zugriffsfunktionen gesetzt und abgefragt werden kann. Mehr ... | |
class | Guard |
Synchronisation des BS-Kerns mit Unterbrechungen.Die Klasse Guard dient der Synchronisation zwischen "normalen" Kernaktivitäten (zur Zeit Ausgaben, später Systemaufrufe) und Unterbrechungsbehandlungsroutinen. Dazu besitzt Guard eine Warteschlange (Queue-Objekt) je CPU, in die Gate-Objekte eingereiht werden können. Das ist immer dann erforderlich, wenn zum Zeitpunkt des Auftretens einer Unterbrechung der kritische Abschnitt gerade besetzt ist, die epilogue() Methode also nicht sofort bearbeitet werden darf. Die angesammelten Epiloge werden behandelt, sobald der kritische Abschnitt wieder freigegeben wird. Mehr ... | |
class | Secure |
Die Klasse Secure dient dem bequemen Schutz kritischer Abschnitte.Dabei wird die Tatsache ausgenutzt, dass der C++ Compiler für jedes Objekt automatisch Konstruktor- und Destruktoraufrufe in den Code einbaut und dass ein Objekt seine Gültigkeit verliert, sobald der Bereich (Scope), in dem es deklariert wurde, verlassen wird. Mehr ... | |
class | IOAPIC |
Abstraktion des IO-APICs, der zur Verwaltung der externen Interrupts dient.Kernstück des IOAPICs ist die IO-Redirection Table. Dort lässt sich frei konfigurieren, welchem Interruptvektor eine bestimmte externe Unterbrechung zugeordnet werden soll. Ein Eintrag in dieser Tabelle ist 64 Bit breit. struct IOREDTBL_L und struct IOREDTBL_H sind Bitfelder, die die einzelnen Einstellungen eines Eintrages zugänglich machen. Mehr ... | |
class | LAPIC |
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 ... | |
class | Plugbox |
Abstraktion einer Interruptvektortabelle.Damit kann man die Adresse der Behandlungsroutine fuer jeden Hardware- und Softwareinterrupt und jede Prozessorexception festlegen. Jede Unterbrechungsquelle wird durch ein Gate-Objekt repräsentiert. Diese liegen in einem Feld (256 Elemente). Der Index in diesen Feld ist dabei die Vektornummer. Mehr ... | |
Funktionen | |
void | guardian (uint32_t vector, cpu_context *context) |
Low-Level Interrupt-Behandlung.Zentrale Unterbrechungsbehandlungsroutine des Systems. Diese Funktion wird von dem Assembler Teil der Unterbrechungsbehandlung aufgerufen. Beim Betreten der Funktion sind die Unterbrechungen auf dieser CPU gesperrt. Mehr ... | |
Das Interrupt Subsystem.
Das Interrupt Subsystem von OO/MPStubBS beinhaltet alle Funktionalität um Unterbrechungen von der Hardware anzunehmen und diese abzuarbeiten. In späteren Übungen werden dann die Interrupts mit der Anwendungs-aktivierten Kernausführung (Systemaufrufe) synchronisiert. Der Eintrittspunkt für das Interrupt Subsystem ist die Funktion guardian.
void guardian | ( | uint32_t | vector, |
cpu_context * | context | ||
) |
Low-Level Interrupt-Behandlung.Zentrale Unterbrechungsbehandlungsroutine des Systems. Diese Funktion wird von dem Assembler Teil der Unterbrechungsbehandlung aufgerufen. Beim Betreten der Funktion sind die Unterbrechungen auf dieser CPU gesperrt.
vector | gibt die Nummer des aufgetretenen Interrupts an. |
context | beinhaltet einen Pointer auf den eigenen Stack, über den auf den Unterbrechungskontext zugegriffen werden kann. |