|
|
|
|
Klasse Guard
Einordnung in die Gesamtstruktur
- Modul
- guard
- Basisklassen
- Locker
- abgeleitete Klassen
- keine
- Erstellungszeitpunkt
- Aufgabe 3
- Dateien
guard.h guard.cc
Beschreibung
Die Klasse Guard dient der Synchronisation zwischen "normalen"
Kernaktivitäten (zur Zeit Ausgaben, später Systemaufrufe) und
Unterbrechungsbehandlungsroutinen. Dazu besitzt Guard eine
Warteschlange (ein Queue
Objekt), 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.
öffentliche Methoden
void leave ()
- Mit dieser Methode wird der kritische Abschnitt verlassen und
die angestauten Epiloge abgearbeitet.
void relay (Gate* item)
- Mit dieser Methode kann im Prolog einer Unterbrechungsbehandlung
die Ausführung des zugehörigen Epilogs beantragt
werden. Ob der Epilog sofort behandelt oder zunächst nur
in die Epilogliste eingehängt wird, hängt davon ab,
ob der kritische Abschnitt frei oder besetzt ist.
Hinweise
- Die Epilogqueue stellt eine zentrale Datenstruktur dar, deren
Konsistenz geeignet gesichert werden muß.
- Da Gate Objekte nur einen einzigen Verkettungszeiger besitzen,
dürfen sie zu einem Zeitpunkt nur ein einziges Mal in der
Epilogliste aufgeführt sein. Wenn also zwei gleichartige
Interrupts so schnell aufeinanderfolgen, dass der
zugehörige Epilog noch gar nicht behandelt wurde, darf nicht
versucht werden, dasselbe Gate Objekt zweimal in die Epilogliste
einzutragen. Die Klasse Gate
bietet Methoden, dies zu vermerken bzw. zu prüfen.
- Ein Betriebssystem sollte Unterbrechungen immer nur so kurz wie
möglich sperren. Daher sieht das Konzept der Schleuse vor,
dass Epiloge durch Prologe unterbrochen werden können.
Für OO-Stubs bedeutet das, dass bereits vor der
Ausführung des Epilogs einer Unterbrechungsbehandlung
Interrupts wieder zugelassen werden sollten.
|
|
|
|