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
    - Mailingliste
    - 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 2010/11  >  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 Stand: 2010-11-30 12:25   BO, DL