Aufgabe 3: Schleusensynchronisation für OO-Stubs
Lernziel
- Schutz kritischer Abschnitte mit Hilfe von Schleusen
Aufgabenbeschreibung
Die Synchronisation der Aktivitäten innerhalb von OO-Stubs soll
auf die Verwendung einer Schleuse umgestellt werden.
Euer bisheriges Programm (Aufgabe 2) soll
also so verändert werden, dass die Synchronisation nicht mehr durch Interruptsperren
erfolgt.
Hierzu müssen die Klassen Keyboard, Panic und Gate angepasst bzw. erweitert werden. Die Klassen
Locker,
Guard,
Secure müssen neu erstellt werden.
Außerdem soll ein globales Guard Objekt guard
angelegt werden, mit dessen Hilfe alle kritischen Abschnitte geschützt werden sollen.
Implementierungshinweise
- Das Testprogramm kann von Aufgabe 2 übernommen werden.
Auch diesmal sollen wieder Ausgaben an verschiedenen Positionen aus dem
Hauptprogramm und aus dem Interrupthandler gemacht werden.
-
- Da die Verwendung von Schleusen den Schutz kritischer Abschnitte mit
Hilfe von
CPU::disable_int()
und
CPU::enable_int()
weitgehend überflüssig macht,
sollten zunächst einmal wieder alle entsprechenden Aufrufe
entfernt werden.
- Da bei unserer Implementierung die Interrupts vor 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.