PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie funktioniert eigentlich pause()?



detonation997
21-05-2006, 09:44
Hallo,

ich wollte immer schon wissen, wie eigentlich so ein "pause()" Aufruf funktioniert. Bis ein Signal eintrifft wird ja praktisch keine Rechenzeit verbraucht.

Wie aber wird das erreicht? Ich kann mir das derzeit nur so vorstellen, dass da irgendwas im Kernel pollt und schaut, ob eben schon ein Signal da ist. Das muesste doch 100% CPU-Last verursachen, oder? Selbiges beim alarm() Aufruf, der doch wartet, bis ein SIGALRM (bzw. eine Zeitspanne abgelaufen ist) kommt.

Welche Hardware unterstuetzt denn den Kernel da? Und wie funktioniert das dann? Ich kanns mir einfach nicht vorstelln ... :confused:

Danke fuers Lesen,
LG Rainer

bischi
21-05-2006, 11:13
Kommt auf die Implementierung draufan - im Normalfall dürfte das ganze aber über einen Interrupt laufen:

Prozess "ist laufend" und kommt zu Pause-Aufruf. Prozess sagt dem Scheduler, dass er warten will und wird vom Scheduler in den Zustand "wartend" versetzt. Ein anderer Prozess darf laufen. Sobald die entsprechende Nachricht kommt (Kann über Interrupts, Messages oder Ähnliches intern implementiert sein), wird der Prozess vom Scheduler in den Zustand "lauffähig" versetzt. Sobald der Prozess das nächste Mal an der Reihe ist (Round-Robin), läuft er automatisch weiter.

Mfg Bischi