PDF (2015-05-23)

KMS Summer 2015
Aufgabe 05
SYNCHRONISATION
In diesem Übungsblatt werden wir uns Synchronisationsverfahren widmen, um mehrere
Prozesse miteinander zu koordinieren.
Gegeben sei ein Computerhändler der eine gemeinsame Lagerhalle für Desktop-Rechner,
Server, und Monitore hat. Diese Lagerhalle ist nach oben hin begrenzt. Beliefert wird er von
einem Hersteller H, der bei jeder Lieferung 1 Server, 3 Desktop-Rechner und 2 Monitore bringt.
Ein Techniker D liefert je Ausfahrt 1 Desktop-Rechner und 1 Monitor zum Kunden, ein anderer
Techniker S je einen Server.
Zum Be- und Entladen muss eine Laderampe benutzt werden, wobei immer nur eine Person
diese zur gleichen Zeit verwenden kann.
Separat betrachtet laufen diese 3 Prozesse folgendermaßen ab:
Prozess H
Prozess D
Prozess S
While(true):
< zur Laderampe fahren >
< 1 Server entladen >
< 3 Deskt.-R. entladen >
< 2 Monitore entladen >
< Laderampe verlassen >
While(true):
< zur Laderampe fahren >
< 1 Deskt.-R. beladen >
< 1 Monitor beladen >
< Laderampe verlassen >
While(true):
< zur Laderampe fahren >
< 1 Server beladen >
< Laderampe verlassen >
Synchronisieren Sie diese drei Prozesse in geeigneter Weise, indem Sie mittels PseudocodeNotation Semaphoren deklarieren und entsprechende Semaphor-Operationen benutzen. Die
genauen Bedingungen dazu finden Sie auf der nächsten Seite.
Die Pseudocode-Notation zum Deklarieren eines Semaphors mit dem Namen name und
Startwert n lautet: name(n)
Die Operationen P(∙) und V(∙) eines Semaphors können dann mittels P(name) und
V(name) ausgeführt werden.
Seite 1 von 2
KMS Summer 2015
Aufgabe 05
Die kritischen Bereiche sind möglichst klein zu halten, und es müssen folgende Bedingungen
erfüllt werden:






Die Laderampe kann nur von jeweils einem Prozess gleichzeitig verwendet werden.
Der Hersteller H darf nur zur Laderampe fahren, wenn er seine Ware komplett abladen
kann.
Der Techniker D darf nur zur Laderampe fahren, wenn sich noch mindestens ein
Desktop-Rechner und ein Monitor im Lager befinden.
Der Techniker S darf nur zur Laderampe fahren, wenn noch mindestens ein Server im
Lager ist.
Die Lagerhalle hat eine beschränkte Größe von insgesamt 24 Teilen (Desktop-Rechner,
Monitore oder Server).
Zu Beginn sind die Lagerhalle leer und die Laderampe frei.
1. Deklarieren Sie alle benötigten Semaphoren und erklären Sie deren Zweck.
2. Fügen Sie bei den Prozessen H, D, und S jeweils die Semaphor-Operationen P(∙) und
V(∙) an geeigneter Stelle ein, um alle Bedingungen zu erfüllen.
3. Prüfen Sie, ob es bei dieser Konfiguration der Ent-/Belademenge zu Problemen kommen
kann, und zeigen Sie dies mittels einer Prozessablauffolge von H, D, und S.
4. Passen Sie die Ent-/Belademenge an, damit keine Probleme mehr auftreten.
5. Implementieren Sie dieses Beispiel mittels posix_threads in C/C++, und erweitern
Sie das Programm dahingehend, dass die Anzahl der Aufrufe der kritischen Bereiche
während der Laufzeit mitgeloggt werden. Berechnen Sie das Verhältnis der
entsprechenden Ausführungen für alle drei Prozesse und vergleichen Sie es mit einem
analytischen Ansatz.
Seite 2 von 2