Institut für Technische Informatik und Kommunikationsnetze

Technische Informatik II Übung 1: Prozesse und Threads

Hinweis: Weitere Aufgaben zu diesem Thema finden sie in den Begleitbüchern zur Vorlesung.

Aufgabe 1:

Prozesse und Threads

a) Beschreiben Sie den typischen Lebenszyklus eines Prozesses mit Hilfe eines Zustandsdiagramms und benennen Sie die Zustandsübergänge. Lösung:

aktiv

neu

blockiert

bereit

ausgelagert

terminiert

b) Beschreiben Sie in je ein bis zwei Sätzen, was man unter Programmen und Prozessen, sowie Userspace- und Kernelspace-Threads versteht und benennen Sie ihre Gemeinsamkeiten und Unterschiede. Lösung: Programm: Folge von Befehlen, die auf einem Computer zur Ausführung gebracht werden können. Prozess: Programm in Ausführung; Vom Betriebssystem verwaltete Einheit bestehend aus Programmanweisungen, Daten und Verwaltungsinformationen sowie ein oder mehreren Aktivitätsträgern (Threads). Thread: Serielle Aktivität innerhalb eines Prozesses mit eigenem Stack und Program-Counter. Die Verwaltung von Userspace-Threads erfolgt durch die Applikation (bzw. eine Bibliothek), Kernelspace-Threads werden vom CPU-Scheduler des Betriebssystems verwaltet.

c) Wie verhält sich ein Webserver der aus mehreren Prozessen bzw. aus mehreren Userspace-Threads besteht bei einem blockierenden Diskzugriff? Lösung: Bei einem blockierenden Diskzugriff wird der ganze Prozess angehalten und somit auch alle seine Threads. Anders als der Webserver mit mehreren Prozessen, wird der multithreaded Webserver also blockieren. d) Welche der folgenden Ressourcen werden von allen Threads eines Prozesses geteilt und welche bestehen pro Thread? Program-Counter, Heap-Speicher, globale Variablen, Stack, CPU-Register, geöffnete Dateien, Signale und Signalhandler, Accounting- und Benutzer-Informationen. Lösung: Pro Thread: Program-Counter, Stack und CPU-Register.

Aufgabe 2:

Scheduling

a) Was versteht man unter Langzeiz-Scheduling (Job-Scheduling), was unter Kurzzeit-Scheduling (CPU-Scheduling)? Lösung: Der CPU-Scheduler wählt den als nächstes auszuführenden Prozess aus der Ready-Queue aus, der Job-Scheduler bestimmt welche Prozesse in den Speicher geladen und welche ausgelagert werden. Desweiteren wird Der CPU-Scheduler aktiv, wann immer ein anderer Prozess zum Zug kommen soll, der Job-Scheduler hingegen wird nur ausgeführt wenn ein Prozess terminiert oder zu wenig Speicher zur Verfügung steht. b) Warum ist es für den Scheduler wichtig zwischen I/O-bound und CPU-bound Prozessen zu unterscheiden? Lösung: I/O-bound Programme sind die meiste Zeit mit der Ein- und Ausgabe von Daten beschäftigt. Sie brauchen ihre Zeitscheibe meist nicht auf sondern blockieren vor deren Ablauf und belasten die CPU kaum. CPU-bound Programme andererseits belasten die CPU sehr stark und beanspruchen ihre Zeitscheibe meist komplett. b) Was sind die Vor- und Nachteile von preemptiv gegenüber non-preemptiv Multitasking. Lösung: Die Hauptvorteile des preemtiv Multitasking sind, dass ein einzelner Prozess das System nicht blockieren kann und dass die Zuordnung der Prozesszeit besser gesteuert werden kann (priorisierung einzelner Prozesse ist möglich). Ein Nachteil ist zum Beispiel der grössere Aufwand für die Synchronisation der Prozesse und den Schutz von kritischen Abschnitten. c) Gegeben seien die folgenden Prozesse die alle zur Zeit t = 0 erstellt und gestartet werden. Prozess Priorität Bedienzeit

A 2. 100

B 5. 10

C 3. 20

D 1. 10

E 4. 50

Berechnen Sie für die unten aufgeführten Scheduling-Algorithmen die mittlere Antwortzeit (Responsetime) RT und die Ausführungszeit (Turnaround Time) T T und stellen Sie den Ablauf grafisch dar.

2

200

180

160

140

120

100

80

60

40

20

5

Firs Come First Server (FCFS)

A B C D E RT = (0 + 100 + 110 + 130 + 140)/5 = 96 T T = (100 + 110 + 130 + 140 + 190)/5 = 132

120

140

160

180

200

120

140

160

180

200

100

80

60

40

20

5

Shortest Job First (SJF)

A B C D E RT = (0 + 10 + 20 + 40 + 90)/5 = 32 T T = (10 + 20 + 40 + 90 + 190)/5 = 70

100

80

60

40

20

5

Priority Scheduling (PS)

A B C D E RT = (0 + 10 + 110 + 130 + 180)/5 = 86 T T = (10 + 110 + 130 + 180 + 190)/5 = 124

3

200

180

160

140

120

100

80

60

40

20

5

Round Robin (RR) mit einer Zeitscheibe von 5

A B C D E RT = (0 + 5 + 10 + 15 + 20)/5 = 10 T T = (190 + 35 + 75 + 45 + 140)/5 = 97

Aufgabe 3:

Prozess Synchronisation, Deadlock und Starvation

wichtigsten Lösungen und welche Probleme können auftreten. a) Erörtern Sie die Begriffe Race Condition anhand des folgenden Beispiels und markieren sie alle Critical Sections. Was für Probleme können bei der Ausführung auf mehreren Prozessen auftreten und wie können diese (z.B. mit Hilfe von Semaphoren oder Monitoren) behoben werden? global const buf_size := 10 global var buf[buf_size] global var num := 0 function boolean push(a) if (num < buf_size) buf[num] := a num := num + 1 return true else return false end end function pop() if (num > num := return else return end end

0) num - 1 buf[num] null

4

Lösung: Critical Section Abschnitt eines Programms in dem eine beliebige Unterbrechung zu ungewollten Effekten führen kann. Im obigen Beispiel sind dies die beiden Funktionen push() und pop(). Race Condition Konstellationen in denen das Ergebnis einer Operation vom zeitlichen Verhalten bestimmter Einzeloperationen abhängt. Im obigen Beispiel kann es z.B. sein, dass zwei Prozesse scheinbar gleichzeitig etwas auf den Stack legen, aber nur der zuletzt geschriebene Wert erhalten bleibt. Prozess A Process B buf[num] := a buf[num] := a num := num + 1 num := num + 1 b) Beschreiben Sie mit Hilfe von Pseudocode die atomaren Operationen TestAndSet, Swap und FetchAndAdd. Lösung: atomar function TestAndSet(a, b, c) if (a == b) a := c return true else return false end end atomar procedure Swap(a,b) var t := a a := b b := t end atomar function FetchAndAdd(a,b) var t := a a := a + 1 return t end c) Gegeben sei die folgende atomare Instruktion: atomar function TestAndAdd(a, b, c) if (a == b) a := a + c return true else return false end end Zeigen Sie wie mit deren Hilfe eine binäre Semaphore implementiert werden kann.

5

Lösung: global var s := 1 procedure P() while (not TestAndAdd(s, 1, -1)) do end end procedure V() TestAndAdd(s, 0, 1) end d) Eine einfache Lösung des Dining-Philosophers-Problem besteht darin, dass einer der Philosophen die Gabeln in der umgekehrten Reihenfolge aufnimmt als alle anderen. Zeigen Sie, dass diese Lösung deadlockfrei ist, in dem Sie angeben welche Deadlock-Voraussetzung(en) nicht erfüllt ist/sind. Ist die Lösung auch gerecht, das heisst starvationfrei? Lösung: Die Bedingung Circular Wait ist nicht erfüllt. Die Lösung ist nicht starvationfrei; es ist nicht garantiert, dass die Gabel eines Philosophen nicht dauernd von dessen Nachbarn beansprucht wird, wenn dieser darauf zugreifen will.

Aufgabe 4:

Inter Process Communication

a) Ordnen Sie die drei Alltagsgegenstände Whiteboard, Rohrpost und Postablage den IPC-Mechanismen Messagepassing, Shared Memory und Pipes zu und erörtern Sie welche grundlegenden Eigenschaften sie mit diesen verbinden. Lösung: Whiteboard → Shared Memory: Alle die dürfen können gleichzeitig darauf zugreifen; keine Koordination wer, was, wann und wo schreibt. Rohrpost → Pipes: Man hat eine direkte Verbindung vom Sender zum Empfänger; die Reihenfolge der Nachrichten ist gegeben. Postablage → Messagepassing: Jeder der die Postablage kennt kann etwas ablegen; die Reihenfolge der Nachrichten ist gegeben. b) Welches Analogon aus dem Alltag beschreibt am besten den Signal-Mechanismus? Lösung: Zimmerglocke im Spital: Pro Zimmer hat es eine Lampe die anzeigt, dass jemand geklingelt hat. Leuchten beim prüfen der Lampen mehrere gleichzeitig, ist die Reihenfolge der Abarbeitung nicht festgelegt.

6