Hallo,
Bei dir gibst du dem Idle-Thread damit einen Teil der Ring0-Rechte über ein Flag. Userspace darf auch bei dir kein HLT machen.
So, jetzt ist wieder der Punkt, ab dem man Haare spalten kann.
Gruß,
Sebastian
Welchen, ist egal. CLI sorgt dafür, dass keine Interrupts mehr gemeldet werden und HLT sorgt dafür, dass die CPU nichts mehr tut, bis ein Interrupt auftritt. Das sind zwei Zustände, die dem System obliegen sollten, nicht irgendwelchen Threads.HLT ändert einen internen Zustand der CPU - wie ein CLI auch.Welchen Zustand ändert HLT? Und wo ist da die Gemeinsamkeit mit CLI?
Eleganter ist es, wenn für diese Zeit die CPU nicht angehalten wird, sondern ein anderer Thread noch die Möglichkeit kriegt, zu arbeiten.Außerdem hält HLT die CPU solange an, bis ein externes, nicht vom Kernel ausgehendes(!) Ereignis auftritt.Ganz recht, aber wenn das im User-Mode gemacht wird dann kommt dieses Ereignis spätestens mit dem Ablaufen der Zeitscheibe.
Das entspricht aber deinem SLEEP - ein Prozess kann sagen "hey, ich muss grad mal 10-100 Takte warten" und hält dann die CPU an. Sofern die Endzeit noch in seine Zeitscheibe fällt.Überhaupt sollte ein Userspace-Task die CPU nicht anhalten können, auch nicht für einen Zeitraum innerhalb der eigenen Zeitscheibe. Das ist genauso elegant wie busy waiting, nur energieeffizienter.Deswegen muss das ja auch freigeschaltet werden damit nur die Threads des idle-Prozess das dürfen.
Nein, wenn ein Userspaceprogramm die CPU anhalten kann, so wird damit potentiell die Möglichkeit verschenkt, den Rest der Zeitscheibe einem bedürftigem Thread zukommen zu lassen.Für den Standardfall (d.h. größtenteils Leerlauf im System) spielt das keine Rolle, ob die CPU nun vom (einzigen) Programm oder vom Kernel angehalten wird, aber unter Last verschenkst du damit einiges an CPU-Zyklen.Wo bitte werden da CPU-Zyklen verschenkt? Der HLT-Befehl ist doch nicht ineffizienter nur weil er im User-Mode arbeitet. Außerdem werden die Threads des idle-Prozess unter Last gar nicht erst aufgerufen (wegen deren niedrigerer Priorität.)
Bei dir gibst du dem Idle-Thread damit einen Teil der Ring0-Rechte über ein Flag. Userspace darf auch bei dir kein HLT machen.
So, jetzt ist wieder der Punkt, ab dem man Haare spalten kann.

Gruß,
Sebastian

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert
