=========================== 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. ---- CODE (type=c) ------------------------------------------------------------ /* 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 ` 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. :navigate: up -> doc:index back -> doc:session01/page02 next -> doc:session01/page04