Ü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.)