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
       * Aufgabe 1
          Dokumentation
       * Aufgabe 2
          Dokumentation
       * Aufgabe 3
          Dokumentation
       * Aufgabe 4
          Dokumentation
       * Aufgabe 5
          Dokumentation
       * Aufgabe 6
          Dokumentation
       * Aufgabe 7
          Dokumentation
 
  Evaluation
Department Informatik  >  Informatik 4  >  Lehre  >  WS 2009/10  >  Betriebssysteme  >  Ãœbungen  >  Aufgaben  >  Aufgabe 3

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

Lernziel

  • Schutz kritischer Abschnitte mit Hilfe des Prolog-/Epilogmodells.

Aufgabenbeschreibung

Die Synchronisation der Aktivitäten innerhalb von OOStuBS/MPStuBS 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 die Funktion guardian() angepasst bzw. erweitert werden. Die Klassen Locker, Guard, Secure kommen neu dazu. Außerdem ist es natürlich notwendig, dass ihr eure Applikation entsprechend anpasst.

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

In MPStuBS muss der Guard nicht nur gegen Interrupts schützen, sondern auch andere CPUs aussperren und so am Betreten des kritischen Abschnittes hindern. Dazu soll der Guard aktiv warten und die Abarbeitung des kritischen Abschnitts auf diese Weise serialisieren.

a3.dot

Klassenübersicht für Aufgabe 3

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() und in MPStuBS auch mit Hilfe eines eigenen Spinlocks 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.
  • In MPStuBS kann zum Schutz der kritischen Abschnitte im Guard zusätzlich zur Klasse CPU die Klasse Spinlock aus Aufgabe 2 verwendet werden, um auch gegen andere CPUs synchronisieren zu können.

Vorgaben

Zur Erstellung der Epilog-Warteschlange werden die Hilfsklassen Queue und Chain vorgegeben. Bei Verwendung müsst ihr jedoch auf die richtige Synchronisation achten.
  Impressum   Datenschutz Stand: 2010-07-19 12:33   BO, DL