blatt4 - uri=userpages.uni

Werbung
Übungen zu
Grundlagen der Betriebssysteme
Wintersemester 2012/2013
Prof. Hannes Frey / Frank Bohdanowicz
Übungsblatt 4
Abgabe bis Sonntag, den 18.11.2012, 12:00 Uhr,
als PDF via SVN
Gruppenname:
Name
Aufgabe 1
@Uni-Kennung
(7 Punkte) Prozesszustände
a) (5 Punkte)
Erläutern sie mit wenigen Worten die 5 Zustände eines Prozesses aus dem
Prozesszustands-Diagramm.
b) (2 Punkte)
Gehen sie auf den Zustand „waiting“ näher ein und erläutern und begründen sie mit
wenigen Worten, ob auf diesen Zustand auch verzichtet werden könnte!
Grundlagen der Betriebssysteme – WS 2012/13 – Blatt 4
Aufgabe 2
2/4
(18 Punkte) Prozesse in Linux
a) (3 Punkte)
Kompilieren und Starten sie das folgende Programm „father_son.c“ unter Linux und
erläutern Sie die Ausgabe im Bezug auf die Variable „i“. Beziehen Sie sich dabei auch auf
die Zeile if (fork() ) und was hier passiert!
(Hinweis: father_son.c finden sie im Ordner der Übung!)
#include <stdio.h>
#include <stdlib.h>
int i;
int rnd;
void main(){
if (fork())
for (i=0; i<500; i++){
printf("\n Father: %i", i);
sleep(1);
}
else
for (i=0; i<500;i++){
printf("\n Son: %i", i);
rnd=rand();
sleep(rnd%3);
}
}
gcc -o father_son father_son
./father_son
b) (3 Punkte)
Lassen sie das Programm father_son weiterlaufen (oder starten sie es erneut falls i bei
500 angekommen ist), so dass Sie die Ausgabe sehen. Öffnen Sie nun eine weitere
Terminalkonsole (z.B. über eine zweite SSH-Verbindung → PuTTy → Duplicate Session).
Geben Sie in der zweiten Konsole den Befehl ps -elf --forest ein und suchen Sie in
der Ausgabe nach der Prozesstruktur des laufenden Prozesses father_son.
Geben Sie die Ausgabe zur Prozesstruktur von father_son hier an und erläutern sie sie mit
wenigen Worten. (Zum näheren Verständnis müssen Sie eventuell erst Aufgabe 2c)
lösen.)
Grundlagen der Betriebssysteme – WS 2012/13 – Blatt 4
3/4
c) (5 Punkte)
Der Befehl ps -elf --forest gibt ihnen eine Tabelle mit verschiedenen Spalten aus.
Recherchieren sie die Angabe in den folgenden Spalten und erläutern sie sie mit wenigen
Worten.
(1) F
(2) S
(3) UID
(4) PID
(5) PPID
(6) PRI
(7) SZ
(8) WCHAN
(9) TIME
(10) CMD
Hinweis: Unter Linux können Informationen zu Befehlen über die Manpages gefunden
werden. Durch Eingabe des Befehls „man ps“ wird die Manpage des Befehls „ps“
angezeigt. Beendet wird mit Taste „q“ (press q to quit), gesucht mit „\“ und Eingabe des
Suchwortes. Alle Manpages sind auch im Internet in verschiedenen Sprachen zu finden.
d) (5 Punkte)
Erweitern Sie das Programm „father_son.c“ so, das die Variable „i“ in einem gemeinsamen
Speicher abgelegt wird und alle erzeugten Prozesse auf eine Variable zugreifen und diese
hoch zählen. (Benutzen Sie für die Lösung POSIX Shared Memory).
(Hinweis: http://openbook.galileocomputing.de/linux_unix_programmierung/Kap09-006.htm)
e) (2 Punkte)
Erläutern Sie mit wenigen Worten welches neue Problem mit der Lösung von Aufgabe 2d)
bzgl. der Variable i und der darauf zugreifenden Prozesse entstanden ist!
Grundlagen der Betriebssysteme – WS 2012/13 – Blatt 4
Aufgabe 3
4/4
(5 Punkte) Prozesszustand von ynlahd.c
Über die Manpage des Befehls ps (man ps) können sie die verschiedenen Prozess-StateCodes ablesen, die ein Prozess einnehmen kann.
Kompilieren und Starten sie das folgende Programm ynlahd.c
# gcc -o ynlahd ynlahd.c
-> ./ynlahd
#include
#include
#include
#include
<stdlib.h>
<unistd.h>
<stdio.h>
<wait.h>
int main ()
{
if (fork()) { //Father process
printf("Father waits\n");
sleep(60);
printf("Father stops waiting\n");
}
else { //Son process
printf("Son starts\n");
int i=0;
for(i=0;i<=10;i++) printf("Son counts %d\n",i);
printf("Son exits\n");
exit (1);
}
return 0;
}
a) (3 Punkte)
Welcher besondere Zustand wird hier vom "Son"-Prozess eingenommen. Betrachten Sie
über ein zweites Terminal während der Laufzeit des obigen Programms die ProzessStatus Tabelle mit ps -elf. Geben Sie den relevanten Teil der Ausgabe hier an. Was ist
besonders an dem Zustand des "Son"-Prozesses. Ziehen Sie zur Erläuterung die
Manpage man ps zu Hilfe.
b) (2 Punkte)
Was müsste im "Father"-Prozess wie verändert werden damit das Programm korrekt
abläuft.
(Hinweis: Zur Lösung der Aufgabe 2) und 3) sollten sie die virtuellen Maschinen nutzen können, die sie unter
„http://bs.uni-koblenz.de/bs2012“ starten können. Die Aufgaben 2) und 3) sollten aber in jedem LinuxSystem zu lösen sein.)
Herunterladen