Wie kann ein präemptiver Scheduler denn einem Prozess die CPU wieder wegnehmen?
Lässt er den Thread nur bis zu einer bestimmten Stelle laufen indem er den auszuführenden Code vor der Prozess-Aktivierung manipuliert? (also _ähnlich_ wie im Praktikum?)
Oder verbindet der Scheduler den Timer mit einem Interrupt? Könnte der Prozess (bei bekanntem Interrupt) den Scheduler bzw den Interrupt manipulieren um dann alleine zu laufen?
Und wenn der Scheduler wieder an die Reihe kommt, dann wird doch sowieso ein Context-Switch gemacht dass der Scheduler selbs arbeiten kann; oder gibt es Hardwaremodelle (z.B. Hyperthreading) die dies ohne expliziten CS erledigen können?
Präemptive Scheduler kann man nur einsetzen, wenn die Hardware einen
Timer-Baustein bereitstellt, der Interrupts auslöst. Wenn dieser
Interrupt ausgelöst wird, wird der Scheduler aktiviert. Der entscheidet
dann, ob der gerade noch laufende Prozess seine Arbeit fortsetzen kann
oder ob ein anderer Prozess aktiviert wird.
Der laufende Prozess kann den Scheduler nicht manipulieren, weil er dazu
in Datenstrukturen des Betriebssystems herum hantieren müsste, die er
durch die virtuelle Speicherverwaltung gar nicht sieht. (Das heißt
natürlich: Wenn Sie eine primitivere Speicherverwaltung ohne
Schutzmechanismen einsetzen, ist ein solcher Eingriff doch möglich, aber dann
ist ja jede beliebige Manipulation möglich.)
Beim Aktivieren des Schedulers über einen Timer-Interrupt gibt es zwar
auch ein Sichern der Daten des laufenden Prozesses (wie bei jedem
Interrupt), aber es findet im Wortsinne kein Context Switch statt, denn
das würde bedeuten, zu einem anderen Prozess zu wechseln. Nur wenn der
Scheduler schließlich entscheidet, einen anderen Prozess zu schedulen,
kommt es zum Context Switch. Den Prozess für einen kurzen Lauf des
Schedulers zu unterbrechen, dann aber wieder fortzusetzen, ist billiger
als ein Prozesswechsel.
Dass spezielle Hardware dabei helfen könnte, sehe ich nicht; wenn Sie
einen HT-Prozessor haben, laufen ja in beiden HT-Komponenten Prozesse,
und Sie müssen in jedem Fall einen der Prozesse vorübergehend
unterbrechen, um den Scheduler zu starten. (hge)
[ Pfad: | permanenter Link ] |