Prof. Dr. rer. nat. Roland Wism ¨uller
Aufgabenblatt 6
(Besprechung am 25.11.2021)
Vorlesung Betriebssysteme I Wintersemester 2021/22
Aufgabe 1: Wechselseitiger Ausschluss: strikter Wechsel
Schauen Sie sich die L¨osung des striktes Wechsels (siehe Vorlesung Kapitel 3.1.3: L¨osungsversuch 3) zur Realisierung des wechselseitigen Ausschlusses an:
int turn = 0;
Thread 0: Thread 1:
while (true) {
while(turn != 0); // warten KritischerAbschnitt();
turn = 1;
NichtKritischerAbschnitt();
}
while (true) {
while(turn != 1); // warten KritischerAbschnitt();
turn = 0;
NichtKritischerAbschnitt();
}
Entwickeln Sie ein Szenario, das folgende Behauptung belegt: wenn ein Thread viel langsamer als der andere ist, wird der schnelle Thread daran gehindert (innerhalb kurzer Zeit) in den kritischen Abschnitt einzutreten, obwohl sich kein Thread im kritischen Abschnitt befindet.
Aufgabe 2: Wechselseitiger Ausschluss: Strikter Wechsel
Geben Sie eine L¨osung in einer Pseudo-Programmiersprache f¨ur den strikten Wechsel f¨urNThreads an.
Aufgabe 3: Wechselseitiger Ausschuss im Betriebssystem
Code des Betriebssystems, der im Systemmodus ausgef¨uhrt wird, muss w¨ahrend eines kritischen Abschnitts alle Interrupts sperren (vgl. L¨osungsversuch 1 in Abschnitt 3.1.3 der Vorlesungsfolien). Warum ist dies notwendig, selbst wenn eine (wie auch immer geartete) L¨osung des wechselseitigen Ausschlusses mit Sperrvariablen zur Verf¨ugung steht?
Tipp: ¨uberlegen Sie sich ein Szenario, das beim Eintreffen eines Interrupts fehlschl¨agt.
Aufgabe 4: Synchronisation mit Semaphoren
Geben Sie eine L¨osung in einer Pseudo-Programmiersprache f¨ur folgendes Problem an: Mehrere Studenten, die ihre Bachelor-Arbeit schreiben m¨ochten, ben¨otigen daf¨ur jeweils drei B¨ucher. Leider stehen in der Bibliothek nur 3 Exemplare von Buch 1 und je 2 Exemplare von Buch 2 und Buch 3 zur Verf¨ugung.
a) Geben Sie an, welche Semaphore wof¨ur ben¨otigt werden und womit sie initialisiert werden.
b) Erl¨autern Sie die Vorgehensweise eines Studentenprozesses.
1
Aufgabe 5: Streng abwechselnde Synchronisation
Gegeben sind die beiden folgenden Threads:
Thread 0: Thread 1:
while (true) {
print(”1”);
}
while (true) {
print(”2”);
}
Diese beiden Threads sollen mit Hilfe von Semaphorenso synchronisiert werden, dass ihre Ausgaben immer streng abwechselnd erfolgen. Die Ausgabe sollte also1 2 1 2 1 2... sein.
a) Geben Sie eine L¨osung f¨ur diese Synchronisation an!
b) DasJava-Programm, das Sie auf der Vorlesungs-Webseite1finden, erlaubt Ihnen unter anderem, eine falsche L¨osung f¨ur das Problem zu simulieren. Starten Sie das Programm dazu mit
java -cp Demo.jar Demo Abwechselnd wrong=1
Erzeugen Sie zun¨achst einen Ablauf, der die richtige Ausgabe produziert. Versuchen Sie dann, einen Ablauf zu erzeugen, bei dem eine unzul¨assige Ausgabe entsteht. Welche m¨oglichen Ausgaben erzeugt dieses Programm?
Aufgabe 6: Synchronisation mit Semaphoren
Versetzen wir uns f¨ur diese Aufgabe in den Alltag einer Familie mit drei Kindern, die im Winter draußen spielen wollen.
Damit sie sich nicht erk¨alten, braucht jedes Kind eine M¨utze, ein Paar Handschuhe und einen Schal, um draußen spielen zu k¨onnen.
Leider ist ihre Oma mit dem Stricken noch nicht soweit, so dass jedes Kind im Moment erst eines dieser drei Klei- dungsst¨ucke besitzt und zwar jedes Kind ein anderes.
Außerdem haben die Kinder im Kleiderschrank noch eine alte M¨utze, ein altes Paar Handschuhe und einen großen Schal gefunden. Wenn nun ein Kind nach draußen will, braucht es noch zwei von den Sachen aus dem Schrank:
• entweder Schal und M¨utze,
• oder M¨utze und Handschuhe,
• oder Handschuhe und Schal.
a) Geben Sie eine L¨osung dieses Problems in einer Pseudo-Programmiersprache unter Verwendung von Semaphoren an. Achten Sie darauf, dass drei verschiedene Prozesse implementiert werden sollen, je ein Prozess f¨ur jedes Kind.
b) Uberlegen Sie, ob sich das von Ihnen angegebene Prozesssystem verklemmen kann.¨
1https://www.bs.informatik.uni-siegen.de/lehre/material/bs1/demos/Demo.jar
2