Skip to main content.

Navigation:

Schleusensynchronisations

Lernziel

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).

Hilfestellung