Hi,
ich hab ja schon vor ca. 3 Monaten an der Prozessverwaltung für LOST gearbeitet gehabt und plante ein Verwaltung auf Basis von sich dynamisch verändernden Prioritäten.
Das daraus nichts geworden ist, ist ne andere Sache, ich hab mir jetzt nochmal Gedanken gemacht und habe einige Fragen.
Ich umreiße ersteinmal, was ich mir im Konkreten gedacht habe:
So, mal bitte Verbesserungsvorschläge:
1.) Also ich würde es noch so machen, das bei aktivierung eines THread, die Quadratwurzel seiner Maximalpriorität zu seiner aktuellen priorität addiert wird.
2.) Das Zurücksetzen der Prioritäten ist sehr unschön, gibs da was besseres?
Eigentlich ist das ganze eher ne Gedankenspiel, funktioniert glaube ich irgendwie nicht ganz, entspricht auch nicht so ganz dem Sinn.
Also wenn ich dynamische Prioritäten habe, dann sollten für mich folgende Bedingungen erfüllt sein.
1) Wenn ich zwei arbeitende Threads mit der gleichen priorität habe, sollten sich diese beide ständig (das heißt immer wenn der Scheduler aktiv wird) abwechseln.
2) Wenn ich zwei arbeitende Thread habe, sollten die Zuteilungen proportional zur Priorität sein.
3) Es soll so oft wie möglich gewechselt werden (Spezialfall davon ist 1)
4) Es sollen Threads des Prozesses des aktiven Threads bevorzugt werden.
Also wenn jemand was hat, was für mich interessant sein könnte, immer her damit.
MfG
DDR-RAM
edit:
ich hab da noch ne Gute Idee gerade unter der Dusche empfangen, ich werde sie morgen posten
ich hab ja schon vor ca. 3 Monaten an der Prozessverwaltung für LOST gearbeitet gehabt und plante ein Verwaltung auf Basis von sich dynamisch verändernden Prioritäten.
Das daraus nichts geworden ist, ist ne andere Sache, ich hab mir jetzt nochmal Gedanken gemacht und habe einige Fragen.
Ich umreiße ersteinmal, was ich mir im Konkreten gedacht habe:
Code: [Auswählen]
Es gibt Prozesse und Threads.
Jeder Prozess besitzt mindestens einen Thread.
Der Prozess ist die Umgebung, also der virtuelle Adressraum, bei einem Prozesswechsel muss also das Register CR3 verändert werden.
Jeder Prozess "hat" ein Objekt, das diesen repräsentiert. Mit diesem Objekt wird ein Prozess verwaltet, es beinhaltet Angabe über die Prozess ID, die Basispriorität des Prozesses, sowie die zum Prozess gehörigen Threads.
Ein Thread ist ein Faden im Prozess, der zu dessen Ausführung beiträgt.
Jeder Thread benötigt seinen eigenen Stack und seinen eigenen CPU-Status.
Auch jeder Thread "hat" ein Objekt, das diesen repräsentiert und durch den er verwaltet wird.
Dieses beinhaltet Angaben, über die Thread ID, den CPU-Status, den Zustand des Threads (aktiv/blockiert/wartend/etc.), seine Normalpriorität und seine aktuelle Priorität.
Was hat es nun mit den Prioritäten auf sich und wie wird was verwaltet?
Also, durch Normalpriorität und Basispriorität wird durch Addition dem Thread eine Maximalpriorität zugeordnet.
Bei der Verwaltung geht es um die Zuteilung der CPU-Zeit (Systeme mit mehrern Prozessoren, werden fürs erste außen vor gelassen). Die Verwaltung der CPU-Zeit erfolgt auf Thread-Basis, da sie es sind, die CPU-Zeit beanspruchen.
Alle aktiven Threads werden in einer Priority Queue (priorisierte Warteschlange) verwaltet.
Die Priorität, nach der das entschieden wird, ist die aktuelle Priorität, die sich im Laufe verändert und bei Erzeugung des Threads auf die Maximalpriorität gesetzt wird.
Die CPU-Zeit erhält immer der Thread, der in der Warteschlange ganz vorne steht.
Dieser wird der Warteschlange entnommen (und irgendwo zwischengespeichert).
Die CPU-Zeit wird zerteilt, das heißt z.b. jede 1/512 Sekunde kommt der Scheduler zum Einsatz.
Hierbei, wird die aktuelle Priorität des laufenden Threads dekrementiert (um 1 erniedrigt).
Desweiteren wird überprüft, ob nun ein anderer Thread vorne steht oder der aktuelle Thread blockiert ist.
Der Thread wird in die Liste eingefügt (oder nicht, falls blockiert).
Der neue Thread wird aus der Warteschlange genommen und falls nötig ein CR3-switch durchgeführt und der neue CPU-Status geladen.
Wenn ein Thread Priorität von 0 erreicht, wird zu den aktuellen Prioritäten der aktiven Threads die Maximalpriorität addiert, dies hat Leider einen Zeitaufwand von n * log n, da die Queue neu geformt werden muss, gibt es verbesserungsvorschläge?So, mal bitte Verbesserungsvorschläge:
1.) Also ich würde es noch so machen, das bei aktivierung eines THread, die Quadratwurzel seiner Maximalpriorität zu seiner aktuellen priorität addiert wird.
2.) Das Zurücksetzen der Prioritäten ist sehr unschön, gibs da was besseres?
Eigentlich ist das ganze eher ne Gedankenspiel, funktioniert glaube ich irgendwie nicht ganz, entspricht auch nicht so ganz dem Sinn.
Also wenn ich dynamische Prioritäten habe, dann sollten für mich folgende Bedingungen erfüllt sein.
1) Wenn ich zwei arbeitende Threads mit der gleichen priorität habe, sollten sich diese beide ständig (das heißt immer wenn der Scheduler aktiv wird) abwechseln.
2) Wenn ich zwei arbeitende Thread habe, sollten die Zuteilungen proportional zur Priorität sein.
3) Es soll so oft wie möglich gewechselt werden (Spezialfall davon ist 1)
4) Es sollen Threads des Prozesses des aktiven Threads bevorzugt werden.
Also wenn jemand was hat, was für mich interessant sein könnte, immer her damit.
MfG
DDR-RAM
edit:
ich hab da noch ne Gute Idee gerade unter der Dusche empfangen, ich werde sie morgen posten


Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert



