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
    - Videos
 
  Übungen
    - UnivIS-Infos
    - Inhalt
    - Module
    - 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 2012/13  >  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.

dot_a3.png
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: 2012-11-29 11:42   BO, DL