Der Martin: Ständige Aktualisierung im Programm erzwingen

Beitrag lesen

Hallo Tom,

wenn man es genau nimmt, ist ein Prozessor (zumindest die üblichen) immer zu 100% "ausgelastet" vom Kernel des ihn gerade bespielenden OS.

das stimmt so nicht ganz. Die heutigen Betriebssysteme schicken den Prozessor nämlich für einige Millisekunden in den Halt-Zustand, wenn kein Prozess bereit ist, wieder etwas zu tun (weil alle auf irgendein Ereignis warten). Diese Situation tritt sehr häufig ein, ein durchschnittlicher Desktop-PC verbringt heutzutage die meiste Zeit seines "Lebens" mit Warten. In diesem Halt-Zustand braucht die CPU nur sehr wenig Strom, was sowohl der Wärmeentwicklung als auch (bei Notebooks) der Akku-Laufzeit zugute kommt.

Kein Prozess darf länger brauchen, all ihm maximal zugestanden wurde, sonst gerät das System in ein "Fischgrätenmuster" (Die Prozesse/deren Teile reihen sich nicht an, sondern fangen an, sich zu überlappen). Dann ist der Absturz unausweichlich.

Das ist bei heutigen Betriebssystemen überhaupt kein Thema mehr. Jeder Prozess bekommt vom OS ein paar Millisekunden Rechenzeit zugestanden. Oft wird er seine Zeit nicht ausschöpfen, weil er schon vor Ablauf der Zeit wieder auf ein Ereignis warten muss, um weiterarbeiten zu können. Gibt er die Kontrolle *nicht* freiwillig innerhalb der zugebilligten Zeit wieder ab, wird er zwangsweise vom OS unterbrochen und der nächte arbeitsbereite Prozess kommt an die Reihe (präemptives Multitasking). Zu einem späteren Zeitpunkt setzt der unterbrochene Prozess seine Arbeit an exakt der Stelle wieder fort, wo er sie hat liegenlassen. Diese Unterbrechungen sind für das laufende Programm nicht einmal feststellbar (außer mit großem Aufwand und sehr hardwarenaher Programmierung, z.B. dem Beobachten von Hardware-Timern).

Unter Windows 3.x und AFAIK sogar 9x war das noch nicht so. Da hat ein Prozess die Kontrolle behalten, bis er sie *freiwillig* wieder abgab. Eine Zwangsunterbrechung durch den Scheduler des OS fand nicht statt (kooperatives Multitasking). Das ist auch der Grund, warum eine Endlosschleife in *einem* Programm das gesamte System lahmlegen konnte.

Schönen Abend noch,
 Martin

--
Wer schläft, sündigt nicht.
Wer vorher sündigt, schläft besser.