Zeitaufwand für fork & wait
Um den Zeitaufwand für die Systemaufrufe fork und wait abzuschätzen, kann es sinnvoll sein, unser Testprogramm mit einer Zeitmessung der real verflossenen Zeit zu ergänzen. Dies ist möglich mit Hilfe des Systemaufrufs times, der eine (für uns uninteressante) struct tms füllt und die Zahl der Ticks der internen Uhr seit einem früheren Zeitpunkt zurückgibt. Die Zeitdauer eines internen Ticks ist systemabhängig. Mit Hilfe von sysconf(_SC_CLK_TCK) lässt sich aber die Zahl der Ticks pro Sekunde ermitteln.
/* return real time in seconds since some arbitrary point in the past */ double walltime() { static int ticks_per_second = 0; if (!ticks_per_second) { ticks_per_second = sysconf(_SC_CLK_TCK); } struct tms timebuf; /* times returns the number of real time ticks passed since some arbitrary point in the past */ return (double) times(&timebuf) / ticks_per_second; }
Für times wird #include <sys/times.h> benötigt. Weitere Infos dazu gibt es in der zugehörigen Manualseite:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/times.html
Aufgabe
-
Ergänzen Sie Ihre vorherige Lösung um eine Zeitmessung, die den Zeitbereich zwischen dem ersten fork und dem letzten wait umfasst.
-
Erhöhen Sie die Zahl der Prozesse auf 1000.
-
Verwenden Sie den Systemaufruf _exit statt exit in dem Kindprozess. (Warum?)
-
Geben Sie am Ende den durchschnittlichen Zeitaufwand pro Kindprozess aus.
-
Wählen Sie dafür eine geeignete Zeiteinheit aus.