• Keine Ergebnisse gefunden

Aufgabenblatt 6 Musterl¨osung

N/A
N/A
Protected

Academic year: 2022

Aktie "Aufgabenblatt 6 Musterl¨osung"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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

Aufgabenblatt 6 Musterl¨osung

Vorlesung Betriebssysteme I Wintersemester 2021/22

Aufgabe 1: Wechselseitiger Ausschluss: strikter Wechsel

Nehmen wir an, Thread 0ist wesentlich langsamerals Thread 1. Wenn Thread 0 die Variableturnauf 1 gesetzt hat, kann Thread 1 sofort in den kritischen Abschnitt eintreten, f¨uhrt diesen schnell aus und beendet auch schnell den nicht- kritischen Abschnitt. Da er dabeiturnauf 0 setzt, muss er beim Erreichen der Schleifewhile(turn != 1);warten, bis Thread 0 die Variableturnwieder auf 1 gesetzt hat, was aber sehr lange dauert. Oder anders gesagt, Thread 1 wird daran gehindert, in den kritischen Abschnitt einzutreten, obwohl sich kein Thread im kritischen Abschnitt befindet.

Aufgabe 2: Wechselseitiger Ausschluss: Strikter Wechsel

int turn = 0;

Thread i:

while (true) {

while(turn != i);

KritischerAbschnitt();

turn = (i+1) % N;

...;

}

Aufgabe 3: Wechselseitiger Ausschuss im Betriebssystem

Angenommen, eine CPU f¨uhrt gerade Betriebssystem-Code im Systemmodus aus und ist in den kritischen Abschnitt ein- getreten. Nun trifft ein Interrupt bei der CPU ein. Die CPU unterbricht daraufhin die Abarbeitung dieses Codes und springt in die entsprechende Interrupt-Behandlungsroutine. Wenn diese nun versucht, in den kritischen Abschnitt einzutreten, ge- lingt dies nicht, da der kritische Abschnitt schon belegt ist. Die CPU f¨uhrt also eine Warteschleife aus. Das bedeutet aber, daß die Interrupt-Behandlungsroutine nicht zur¨uckkehrt und damit der unterbrochene Code auch nicht weitergef¨uhrt wird.

Also wird der kritische Abschnitt nie mehr frei und das System befindet sich in einem Deadlock.

Aufgabe 4: Synchronisation mit Semaphoren

F¨ur jedes Buch gibt es ein Semaphor, das mit der Anzahl der vorhandenen Exemplare initialisiert wird. Jeder Student fordert ein Exemplar von jedem Buch an, schreibt seine Arbeit und gibt dann die B¨ucher wieder frei.

Semaphore Buch1 = 3;

Semaphore Buch2 = 2;

Semaphore Buch3 = 2;

Prozess Student:

1

(2)

Buch1.P();

Buch2.P();

Buch3.P();

// Bachelor−Arbeit schreiben Buch3.V();

Buch2.V();

Buch1.V();

Aufgabe 5: Streng abwechselnde Synchronisation

a)

Semaphore s1 = 1;

Semaphore s2 = 0;

Thread 0: Thread 1:

while (true) {

P(s1);

print(”1”);

V(s2);

}

while (true) {

P(s2);

print(”2”);

V(s1);

}

b) Prozess 0 kann die Schleife beliebig oft hintereinander durchlaufen, wobei jedes Mal das Semaphors2hochgez¨ahlt wird. Prozess 1 kann die Schleife immer so oft hintereinander ausf¨uhren, wies2angibt.

M¨ogliche unzul¨assige Ausgaben sind z.B.: 112,... oder 111121222111...

Allgemein gilt f¨ur jedes Pr¨afix der Ausgabe, daß die Zahl der Einsen immer gr¨oßer oder gleich der Zahl der Zweien sein muß.

Aufgabe 6: Synchronisation mit Semaphoren

a)

Semaphore Schal = 1;

Semaphore M¨utze = 1;

Semaphore Handschuhe = 1;

Kind mit Schal: Kind mit M ¨utze: Kind mit Handschuhen:

{

M¨utze.P();

Handschuhe.P();

// draussen spielen Handschuhe.V();

M¨utze.V();

}

{

Handschuhe.P();

Schal.P();

// draussen spielen Schal.V();

Handschuhe.V();

}

{

M¨utze.P();

Schal.P();

// draussen spielen Schal.V();

M¨utze.V();

}

b) Die oben angegebene L¨osung kann sich nicht verklemmen, sie ist also deadlock-frei. Dies liegt an der speziellen Reihenfolge, in der die

”Betriebsmittel“ angefordert werden (siehe Abschnitt 4.3.3 der Vorlesung). W¨urde man z.B. die beidenP-Operationen beim dritten Kind vertauschen, entst¨unde ein Deadlock, wenn die drei Prozesse sich (nahezu) gleichzeitig das jeweils erste Betriebsmittel

”schnappen“.

2

Referenzen

ÄHNLICHE DOKUMENTE

Aufgabe 1: Herstellen einer geeigneten ¨ Ubungsumgebung. a) Ein einfacher Editor f¨ur Anf¨anger

Neben einem Interrupt kann auch ein Systemaufruf eines Threads dazu f¨uhren, daß ein anderer Thread wieder rechenbereit wird (wenn dieser z.B. auf die Freigabe einer Ressource

Hier muss klar werden, welcher Prozess was tut, in welcher zeitlichen Reihenfolge die Aktionen eines Prozesses ablaufen und wo es Schleifen oder Verzweigungen gibt. Die Aktionen

Der Erzeuger und der Verbraucher laufen in einer Endlosschleife. Der Erzeuger erzeugt in einem Schleifendurchlauf zun¨achst ein Produkt und legt es dann in den Puffer. Der

Eine FIFO verh¨alt sich wie eine Pipe, erscheint aber auch im Dateisystem ¨ahnlich wie eine Datei (Achtung: eine FIFO ist aber keine Datei; die Daten werden nicht auf der

Die SitzungsID wird innerhalb eines Cookies ¨uber den Browser oder ein Skript an den Client ¨ubergeben, damit der Server ihn erkennen kann und an ihn angepasste

Wenn innerhalb einer bestimmten Zeitspanne eine Antwort ausbleibt, wird davon ausgegagen, dass das Paket verloren- gegangen ist, und es muss neu verschickt werden. Damit Anfragen

Die Java-Klasse Class beinhaltet eine Methode getMethod(), mit der zu einem gegebenen Namen und den Parametertypen das entsprechende Method-Objekt gefunden werden kann. 3 Da