Friedrich-Alexander-Universität UnivisSuche FAU-Logo
Techn. Fakultšt Willkommen am Department Informatik FAU-Logo
Logo I4
Lehrstuhl für Informatik 4
Betriebssysteme
 
  Vorlesung
    - UnivIS-Infos
    - Inhalt
    - Folien
 
  Übungen
    - UnivIS-Infos
    - Inhalt
    - Ergänzendes Material
    - Terminübersicht
    - Aufgaben
       * Umgebung
       * Typische Fehler
       * A 1
       * A 2
       * A 3
       * A 4
       * A 5
       * A 6
       * A 7
 
  Evaluation
Department Informatik  >  Informatik 4  >  Lehre  >  WS 2007/08  >  Betriebssysteme  >  Übungen  >  Aufgaben  >  Aufgabe 3

Aufgabe 3: Interruptsynchronisation für OOStuBS mit dem Pro-/Epilogmodell

Lernziel

  • Schutz kritischer Abschnitte mit Hilfe des Pro-/Epilogmodells

Aufgabenbeschreibung

Die Synchronisation der Aktivitäten innerhalb von OOStuBS soll auf die Verwendung des Pro-/Epilogmodells umgestellt werden. Euer bisheriges Programm (Aufgabe 2) soll also so verändert werden, dass die Synchronisation nicht mehr durch Interruptsperren (harte Synchronisation) erfolgt.

Hierzu müssen die Klassen Keyboard, Panic, Gate und guardian () angepasst bzw. erweitert werden. Die Klassen Locker, Guard, Secure müssen neu erstellt werden. Außerdem müsst ihr natürlich eure Applikation entsprechend umstellen.

Außerdem soll ein globales Guard-Objekt guard angelegt werden, mit dessen Hilfe alle kritischen Abschnitte geschützt werden.

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 des Pro-/Epilogmodells 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 von 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. Die Implementierungen sind jedoch nicht unterbrechungstransparent! Entweder ihr synchronisiert also an geeigneter Stelle hart, oder ihr schreibt eine eigene, unterbrechungstransparente Implementierung.
  Impressum Stand: 2007-11-26 10:22   OS, WH