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 6

Aufgabe 6: Ereignisbearbeitung und Synchronisation

Lernziel

  • Synchronisation mit Hilfe von Semaphoren und anderen Kernobjekten

Aufgabenbeschreibung

OOStuBS soll nun um Synchronisationsobjekte erweitert werden, mit denen Threads sich gegenseitig über verschiedene Ereignisse informieren bzw. auf Ereignisse "warten" können. Folgende Synchronisationsobjekte sollen in dieser Aufgabe erstellt werden:

  • Mit Hilfe von Semaphoren besteht die Möglichkeit, Anwendungsprozesse miteinander zu synchronisieren. Darüberhinaus sollen sie dazu verwendet werden, Anwendungsprozesse bei der Tastaturabfrage zu blockieren, bis eine Taste gedrückt wurde.
  • Durch Buzzer (Wecker) können Threads sich für eine bestimmte Zeit schlafen legen.

Hierzu müssen die Klassen Waitingroom, Semaphore, Customer, Organizer, Bell, Bellringer, Buzzer, Guarded_Buzzer, Guarded_Organizer, Guarded_Semaphore und Guarded_Keyboard implementiert, die Klasse Keyboard erweitert und die Klassen Thread sowie Watch angepasst werden.

Die Klasse Guarded_Scheduler wird nicht länger benötigt, da Guarded_Organizer ihre Aufgabe übernimmt. Ebenso soll das globale Guarded_Scheduler-Objekt scheduler durch ein globales Guarded_Organizer-Objekt organizer ersetzt werden.

Chain List Bellringer Bell Buzzer Guarded_Buzzer thread object Meeting syscall user device

Bearbeitung

Teil a

Beginnt am besten mit der Implementierung der Semaphoren. Dazu müssen zunächst die Klassen Waitingroom, Semaphore, Customer, Organizer, Guarded_Organizer und Guarded_Semaphore implementiert werden. Mit Hilfe von Semaphorvariablen solltet ihr nun verhindern können, dass sich eure Anwendungsprozesse bei der Bildschirmausgabe gegenseitig behindern.

Teil b

Im nächsten Schritt könnt ihr dann die Klasse Keyboard um die getkey ()-Methode erweitern, durch die Prozesse nun mit Hilfe einer Semaphore beim Lesen von der Tastatur blockieren, falls keine Taste gedrückt wurde. Erweitert euer Programm dahingehend, dass einer der Prozesse Tastaturabfragen vornimmt (und in irgendeiner sichtbaren Weise darauf reagiert).

Teil c

Anschließend können die Klassen Bell und Bellringer implementiert und getestet werden. Von Bellringer sollte eine globale Instanz bellringer angelegt werden. Wenn klar ist, dass insbesondere der bellringer funktioniert, wie er sollte, könnt ihr die Klassen Buzzer und Guarded_Buzzer erstellen. Damit lassen sich nun sehr einfach periodische Prozesse erstellen, indem ein Prozess sich immer wieder für ein paar Millisekunden schlafen legt und dann z. B. eine Ausgabe macht. Auch dafür sollt ihr ein geeignetes Beispiel vorbereiten.

Vorgaben

Die Implementierung der Klasse List haben wir bereits für euch erledigt.

  Impressum Stand: 2007-11-27 09:12   OS, WH