• Keine Ergebnisse gefunden

Aufgabe 1: Erzeuger/Verbraucher Synchronisation

N/A
N/A
Protected

Academic year: 2022

Aktie "Aufgabe 1: Erzeuger/Verbraucher Synchronisation"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Prof. Dr. rer. nat. Roland Wism ¨uller

Aufgabenblatt 7

(Besprechung am 02.12.2021)

Vorlesung Betriebssysteme I Wintersemester 2021/22

Aufgabe 1: Erzeuger/Verbraucher Synchronisation

Betrachten Sie die L¨osung des Erzeuger/Verbraucher-Problems aus der Vorlesung:

Semaphore mutex = 1;

Semaphore full = 0;

Semaphore empty = N;

Erzeuger: Verbraucher:

while (true) {

item = Produce();

P(empty);

P(mutex);

insert item(item);

V(mutex);

V(full);

}

while (true) {

P(full);

P(mutex);

item = remove item();;

V(mutex);

V(empty);

Consume(item);

}

a) Ist die Reihenfolge der P-Operationen wichtig? Das heißt: was w¨urde passieren, wenn man im Erzeuger erst P(mutex)und dannP(empty)schreibt? Oder analog im Verbraucher erstP(mutex)und dannP(full)?

b) Ist die Reihenfolge der V-Operationen wichtig? Das heißt: was w¨urde passieren, wenn man im Erzeuger erst V(full)und dannV(mutex)schreibt? Oder analog im Verbraucher erstV(empty)und dannV(mutex)?

Aufgabe 2: Leser-Schreiber Synchronisation

Geben Sie eine L¨osung in einer Pseudo-Programmiersprache f¨ur ein modifiziertes Leser/Schreiber (Reader/Writer) Pro- blem (siehe Vorlesung Kapitel 3.1.5) unter Verwendung vonSemaphorenan. Die Modifikation besteht darin, dass von allen Lesern nur maximal 3 gleichzeitig auf die Daten zugreifen d¨urfen.

Aufgabe 3: Steuerung eines Warenautomaten

Ein Warenautomat enth¨alt zu Beginn 200 Chips-T¨uten (er ist damit vollst¨andig gef¨ullt) und f¨uhrt eine Endlosschleife aus, deren Rumpf die folgenden Schritte enth¨alt:

• Warten, wenn der Automat leer ist,

• Warten, bis ein Kunde 5 Euro eingeworfen hat,

• Erniedrigen eines Z¨ahlers f¨ur die Anzahl der Chips-T¨uten und Chips-T¨ute ausgeben.

Es gibt mehrere Kunden, die jeweils folgende Schritte ausf¨uhren:

• Warten, solange ein anderer Kunde den Automaten benutzt,

1

(2)

• den Betrag in f¨unf einzelnen Eurost¨ucken einwerfen,

• Warten, bis die Ware kommt (das kann durchaus l¨anger dauern, da erst der Lieferant kommen muß, wenn der Automat leer ist),

• den Automaten wieder freigeben.

Zudem gibt es einen Lieferanten, der alle zwei Tage kommt und den Automaten wieder vollst¨andig (mit maximal 200 Chips-T¨uten) nachf¨ullt.

Geben Sie eine L¨osung in einer Pseudo-Programmiersprache f¨ur die drei Prozesse (Automat, Kunde und Lieferant) an.

Identifizieren Sie alle Synchronisationsbedingungen zwischen den Prozessen. Benutzen Sie selbst definierte Semaphore, um eine korrekte Synchronisation zu implementieren.

Aufgabe 4: Synchronisation mit Semaphoren

Betrachten Sie das folgende Threadsystem:

// Semaphore und globale Variable

{

}

print("A");

// Thread A while (true) Semaphore T = 0;

{

} {

}

print("B");

// Thread B while (true)

// Thread C while (true) Semaphore S = 2;

P(S); P(S); P(T);

V(T);

V(T);

print("C");

V(S);

Welche der folgenden Aussagen sind richtig?

a) Alle drei Threads k¨onnen gleichzeitig die Prozedurprint()ausf¨uhren.

b) Es wird immer zuerst einAausgegeben.

c) Es wird nie zuerst einCausgegeben.

d) Die Ausgabe kann mitABA... beginnen.

e) Die Ausgabe kann mitABCC... beginnen.

f) Die Ausgabe kann die Folge ...CCCCC... enthalten.

g) Das System kann sich verklemmen.

Anmerkung: dies ist eine Aufgabe im Klausurstil.

Aufgabe 5: Synchronisation mit Semaphoren

Drei Studierende (A,BundC) wollen zusammen eine Programmieraufgabe l¨osen.Aerstellt dazu zun¨achst das Code- ger¨ust. Anschließend k¨onnen alle drei unabh¨angig voneinander programmieren. Nach Fertigstellung des Codes sollCdas Programm testen.

// Semaphore und globale Variable

// Thread A // Thread B // Thread C

Semaphore start = ...;

Semaphore fertig = ...;

erstelleCodeGeruest();

programmiere();

...

...

programmiere();

programmiere();

...

...

...

...

testeProgramm();

...

2

(3)

Erg¨anzen Sie das gegebene Code-Ger¨ust und die notwendige Synchronisation mit Semaphoren, so daß folgenden Bedin- gungen erf¨ullt sind:

• Alle Threads f¨uhren programmiere()erst aus, nachdem Thread Adie ProzedurerstelleCodeGeruest()abge- schlossen hat.

• Alle Threads k¨onnenprogrammiere()gleichzeitig ausf¨uhren.

• Thread Cf¨uhrttesteProgramm()erst aus, nachdem alle Threads die Prozedur programmiere()abgeschlossen haben.

Anmerkung: dies ist eine Aufgabe im Klausurstil.

Aufgabe 6: Leser-Schreiber Synchronisation

Geben Sie eine L¨osung in einer Pseudo-Programmiersprache f¨ur das Leser/Schreiber Problem (siehe Vorlesung Kapitel 3.1.5) unter Verwendung vonMonitorenan. Schreiben Sie dazu einen Monitor, der folgende Prozeduren besitzt:

• ReadBegin – muss vor Beginn des Lesens aufgerufen werden

• ReadEnd – muss nach Ende des Lesens aufgerufen werden

• WriteBegin – muss vor Beginn des Schreibens aufgerufen werden

• WriteEnd – muss nach Ende des Schreibens aufgerufen werden

3

Referenzen

ÄHNLICHE DOKUMENTE

L¨ osung zur Oktober-Klausur (Verst¨ andnisteil) Lineare Algebra f¨ ur

L¨ osung zur Februar-Klausur (Rechenteil, Aufgabe 1) Lineare Algebra f¨ ur

L¨ osung zur Februar-Klausur (Verst¨ andnisteil, Aufgabe 1) Lineare Algebra f¨ ur Ingenieure1. Gegenbeispiel

Wenn die zweite Spalte von A ein Vielfaches von der ersten ist, sind die Spalten von A linear abh¨ angig und A damit nicht invertierbar.. Addition und iii) abgeschlossen bzgl..

2.) α 6= β: A hat also zwei verschiedene Eigenwerte, damit ist die algebraische Vielfachheit jeweils gleich der geometrischen Vielfachheit gleich 1, also ist A

[r]

[r]

[r]