leerlauf?
-
Hallo
ich bin grade dabei ein kleines OS zu entwickeln. betonung liegt auf klein
das problem ist jetzt das schlafenlegen des prozessors. das er eben nicht mit
vollast läuft. einfach andere prozesse/threads weiter laufen zu lassen, verringert
nicht ja nicht die prozessorauslastung. bei den meisten laptops kann man das
manuell einstellen, aber wie macht man das unter assembler?
-
ich bin grade dabei ein kleines OS zu entwickeln.
Rein Assembler oder mit C-Kernel?
-
Ich weiss zwar nicht genau, was du meinst, aber wenn gerade nichts zu tun ist, waere die einfachste Loesung vermutlich ein hlt (ja, das ist ein x86-Mnemonic) aufzurufen.
-
soweit ich weiß, versetzt hlt dem Prozessor nicht in einen Modus, der Strom sparen könnte, wie leerlauf es meint....
Was mir hier als erstes einfällt wär der SMM http://lowlevel.brainsware.org/wiki/index.php/System_Management_Mode
Sonst fiele mir nur noch ein einzelne Cores abzuschalten oder so etwas....
Aber wenn du deine Anforderungen etwas genauer darstellen könntest, könnte ich dir auch mehr helfen
-
erstmal danke für die link, sieht ganz interessant aus
das ganze ist ein C kernel, allerdings auf asm aufbauend und zu einigen teilen
mit inlineasm arbeitend. mit leerlauf meine ich sowas wie den "leerlaufprozess"
unter windows. wenn der pc nur zu z.b. 5% ausgelastet ist, verbraucht er doch
so weniger strom und die lüftung wird runterreguliert.das problem ist folgendes:
wenn der scheduler merkt, dass ein prozess seine zeitscheibe nicht komplett
ausgebraucht hat, wird die priorität des prozesses leicht zurückgefahren, damit
der rest mehr zur verfügung hat. wenn jetzt aber auch die anderen prozesse nicht
alles verbrauchen sollte der prozessor etwas gebremst werden.die hlt-methode ist ja eher ein stop-and-go, ich dachte eher an ein speziellen
interrupt, über den man die leistung in prozent oder hz einstellen kann.notfalls ein interrupt, der den prozessor für eine bestimmte tickzahl anhält
(keine busyloop).hoffe ihr wisst was ich meine
MfG leerlauf
-
leerlauf schrieb:
die hlt-methode ist ja eher ein stop-and-go, ich dachte eher an ein speziellen
interrupt, über den man die leistung in prozent oder hz einstellen kann.
notfalls ein interrupt, der den prozessor für eine bestimmte tickzahl anhält
(keine busyloop).hlt ist schon ok. das legt die cpu schlafen und sie verbraucht wenig strom, bis sie durch den nächsten interrupt wieder aufwacht (mit interrupt meine ich einen hardware-interrupt, nicht diese software-traps die dummerweise auch als interrupts bezeichnet werden). unter windoofs z.b. ruft der 'idle'-prozess einfach die hlt-instruction auf.
http://plantspedia.org/info/HLT
-
leerlauf schrieb:
die hlt-methode ist ja eher ein stop-and-go, ich dachte eher an ein speziellen
interrupt, über den man die leistung in prozent oder hz einstellen kann.Es gibt das APM-BIOS. Such mal danach, evtl. bietet es auch funktionen zum steuern der CPU-Parameter. Ansonsten wie gesagt diese SMM-Geschichte - AFAIR gab es noch einen Haufen weiterer Spezialregister in der CPU zum Steuern von allerlei Schnickschnack und Einschalten verschiedener Energiesparmodi, habe mich aber nie wirklich damit beschaeftigt. Ist auch ziemlich CPU-spezifisch.
Was hast du an hlt auszusetzen? Fuer einen echten Leerlauf waere das doch eine ziemlich einfache, dennoch verhaeltnismaessig effektive Loesung? Statt eine busy-loop machst du in deinem Leerlauf-Prozess ein hlt. Das legt die CPU dann so lange schlafen, bis die naechste preemption kommt und ist bestimmt auch irgendwo energiesparend, besonders im Vergleich zu einer Endlosschleife.