Schleusensynchronisations
Lernziel
- Schutz kritischer Abschnitte mit Hilfe von Schleusen
Aufgabe
Die Synchronisation der Aktivitäten innerhalb von oo-StuBS
soll auf die Verwendung einer Schleuse umgestellt werden. Euer bisheriges
System (Aufgabe 2) soll also so erweitert werden, dass die
Synchronisation nicht mehr durch das Sperren von Interrupts erfolgt.
Hierzu müssen die Klassen Keyboard
, Panic
und Gate
angepasst bzw. erweitert werden. Außerdem soll
ein globales Guard
-Objekt guard
angelegt werden,
mit dessen Hilfe alle kritischen Abschnitte geschützt werden sollen.
Dazu müssen die Klassen Locker
, Guard
und
Secure
neu erstellt werden.
Implementierung
Auch diesmal sollen wieder Ausgaben an verschiedenen Positionen durch
das Hauptprogramm und die Interruptbehandlungsroutine gemacht werden. Aus
diesem Grund kann das Testprogramm aus Aufgabe 2 auch für
diese Aufgabe übernommen werden.
Darüber hinaus macht die Verwendung von Schleusen den Schutz kritischer
Abschnitte mit Hilfe von CPU::disable_int()
und
CPU::enable_int()
weitgehend überflüssig, so das
zunächst einmal alle entsprechenden Aufrufe wieder entfernt werden
sollten.
Hinweis: Da bei unserer Implementierung die Interrupts vor
dem Aufruf des Guardian
gesperrt werden, müssen sie an
geeigneter Stelle von Hand wieder freigegeben werden.
Vorgaben
Zur Erstellung der Epilog-Warteschlange werden die Hilfsklassen
Queue
und Chain
vorgegeben
(siehe dritte Vorgabe).