Professor Dr. F. Schweiggert Abteilung Angewandte Informationsverarbeitung
Mario Jeckle und Ingo MelzerBlatt 3


Uni Logo



Systemnahe Software (SS 2000)


Abgabetermin 06. Juni 2000

Vertrauen ist gut... (10 Punkte)

was bisher geschah...
Schreiben Sie, aufbauend auf der Übung 2, ein C-Programm, welches nacheinander mehrere Prozesse erzeugt, die dasselbe Programme ausführen. Dieses Programm soll als separat ausführbare Datei abgelegt sein.

Das Programm inkrementiert den Zähler in der Datei um eine feste Anzahl Schritte (siehe letzte Übung).

Die Anzahl der zu erzeugenden Programminstanzen (kleiner 5) wird als Kommandozeilenparameter übergeben.


...und heiter weiter...
Nachdem wir bisher das Sperren und Entsperren dem Betriebssystem (aufgerufen durch die entsprechenden Systemcalls) überlassen haben, streben wir nun selbst nach Herrschaft (über unsere Datei).

Erstellen Sie ein Programm, welches als Lock-Manager die Schreibzugriffe auf die Datei kontrolliert und koordiniert. Jedes schreibwillige Programm muß vor dem eigentlichen Schreibvorgang die entprechende Berechtigung beim Lock-Manager beantragen und nach Abschluß der Schreiboperation wieder zurückgeben. Abhängig vom dort gespeicherten Zustand der Datei (exklusiv gesperrt oder freigegeben) wird die angeforderte Schreibberechtigung erteilt und die Datei gesperrt, oder die Berechtigung verweigert.
Wie bei der vertrauten Lock-Mimik üblich kann die Datei zu einem Zeitpunkt nur durch genau einen Prozeß exklusiv gesperrt werden.

Die Programme und der Lock-Manager kommunizieren über Signale miteinander.

Wie die einzelnen Schreibprozesse auch, wird der Lock-Manager durch den initialen Vaterprozess erzeugt.


...im Westen nichts Neues...
Kann ein Prozess die Datei dreimal nicht sperren, so soll er mit einem positiven Exit-Status terminieren.

Der Erzeuger soll auf die Beendigung aller von ihm erzeugten Kindprozesse warten und den zurückgelieferten Exit-Status ausgeben.

Hinweise

Es empfiehlt sich mit anwenderdefinierten Sinalen zu arbeiten, d.h. solchen die in sys/signal.h nicht vordefiniert sind. Je ein Signal für die Schreibanfrage (vom Prozeß in Richtung Lock-Manager), sowie die Gewährung bzw. Verweigerung des Schreibwunsches (Kommunikationsweg vom Lock-Manager in Richtung schreibwilliger Prozeß).



Ingo Melzer 2000-06-05