Prof. Dr. rer. nat. Roland Wism ¨uller
Aufgabenblatt 5
(Besprechung ab 18.11.2021)
Vorlesung Betriebssysteme I Wintersemester 2021/22
Aufgabe 1: Implementierung von Threads
Was ist der gr¨oßte Vorteil der Implementierung von Threads im Benutzeradreßraum? Was ist der gr¨oßte Nachteil?
Aufgabe 2: POSIX Threads
Der Name
”pthread“ steht f¨ur POSIX (Portable Operating System Interface for Unix) Threads. Pthread ist eine Systembi- bliothek, die es erlaubt, auf POSIX-Systemen portablen (betriebssystemunabh¨angigen) Code mit Threads zu entwickeln.
Schreiben Sie ein C-Programm, das zwei Threads erzeugt. Der Haupt-Thread wartet, bis beide Threads beendet sind, bevor er selbst terminiert. Die beiden Threads geben auf dem Bildschirm (mehrmals) eine beliebige Meldung aus (s.man pthread createundman pthread join).
Compilieren Sie das Programm mitgcc datei.c -lpthread.
Was beobachten Sie bei wiederholter Ausf¨uhrung des Programms und wie erkl¨aren Sie Ihre Beobachtung?
Aufgabe 3: Java Threads
a) Implementieren Sie eine Klasse DisplayChar, um einen Thread zu erzeugen, der einen Buchstaben auf dem Bildschirmn-mal ausgibt. Der Buchstabe und die Zahlnsind Eingabeparameter f¨ur den Konstruktor und werden als Attribute gespeichert. Erzeugen Sie vier Threads, um vier verschiedene Buchstaben je 100-mal auszugeben.
Verwenden Sie die MethodeSystem.out.flush(), um nach jeder Ausgabe den Ausgabepuffer auf den Bild- schirm zu schreiben.
Was beobachten Sie bez¨uglich der Reihenfolge der Threadausf¨uhrung?
Hinweis:Sie k¨onnen entweder die JavaThread-Klasse erweitern oder das JavaRunnable-Interface implemen- tieren.
b) Erkl¨aren Sie welche Funktionalit¨at die folgenden Thread-Methoden haben:sleep,yieldundjoin. Verwenden Sie diese Methoden um die Ausf¨uhrung des Programmes zu beeinflussen und beschreiben Sie Ihre Beobachtungen.
Aufgabe 4: Threads mit gemeinsamen Variablen
Laden Sie sich zun¨achst den Code zum Aufgabenblatt im Archivu05Files.zip1auf der Vorlesungswebseite herunter und entpacken Sie das Archiv (s.unzip). Kopieren Sie die DateiTest.javain Ihr VerzeichnisUebungen/Uebung5.
Das Programmm erzeugt einen Thread, der eine Referenz auf ein Objekt erh¨alt, das eine ganze Zahl beinhaltet. Der Thread z¨ahlt diese Zahl eine Million mal hoch. ¨Ubersetzen Sie das Programm und f¨uhren Sie es aus, um sich zu vergewissern, dass das ausgedruckte Ergebnis richtig ist.
Erweitern Sie das Programm so, daß ein zweiter Thread erzeugt wird, der eine Referenz auf dasselbe Objekt erh¨alt.
Warten Sie vor dem Ausdrucken der Zahl, bis auch dieser Thread beendet ist. Die Zahl sollte jetzt also am Endezwei Millionen mal hochgez¨ahlt sein. ¨Ubersetzen Sie das Programm und f¨uhren Sie es aus. Warum stimmt das Ergebnis nicht?
1http://www.bs.informatik.uni-siegen.de/web/wismueller/vl/bs1/u05Files.zip
1