Wollt ihr nix zu sagen ne?
Also, mein neues Konzept:
Als das Grundgerüst mit Threads und Prozessen habe ich oben schon beschrieben.
Aber und jetzt kommt es:
es soll zwei priorisierte Warteschlangen geben,
die eine ist gerade aktive und die andere ist die wartende.
Für die priorität eines Threads gilt jetzt, je kleiner desto besser, wie man sie sich diese errechnet, ist erstmal egal.
Sie muss aber größer 0 sein, ein Thread mit der Priorität würde bei diesem Konzept in Echtzeit laufen, das heißt der Scheduler würde ihn (sogut wie) niemals "absetzen".
Also jeder Thread erhält wieder eine dynamische Priorität, diese wächst aber und sinkt nicht, dafür werden Threads mit möglichst kleiner Priorität bevorzugt.
Es kommt immer der Thread zum Zuge, der die niedrigste dynamische Priorität hat, seine dynamische Priorität wird dadurch, aber um seine Priorität erhöht (das heißt bei niedriger Prioritätszahl, gelangt man nicht so schnell nach oben, wie mit hoher und damit kriegt man öfter die CPU).
Ist ein Thread bei einem vordefinierten Wert angelangt z.b. 256 kommt er in die wartende Warteschlange und erhält eine dynamische Priorität von 0.
Auch ein neuer Thread oder einer, der aus seiner Blockierung erwacht, kommt in die wartende Warteschlange und erhält eine dynamische Priorität von 0.
Sind in der aktiven Warteschlange keine Threads mehr enthalten, werden beide Warteschlangen vertauscht.
Kriterien für die priorisierung in den Warteschlangen, sind wie schon erwähnt die dynamische Priorität an erster stelle (kleiner ist höher) und die konstante Priorität an zweiter Stelle (auch hier kleiner ist höher).
problematisch bei diesem Modell ist, das Threads, die oft blockiert werden, wie solche, die Eingabedaten empfangen im Nachteil sind, da sie nach einer Blockierung immer wieder in der wartenden Warteliste landen.
Ein Ansatz dafür, wäre falls die Threads noch wieder auf die CPU-wartend werden, bevor die Warteschlangen vertauscht worden, sie mit der dynamischen Priorität unter der sie blockiert wurden (bzw. dem maximum ihrer damaligen dynamischen Priorität und der dynamischen Priorität, des aktuell aktiven Threads, damit sie keinen zu großen Vorteil erhalten), wieder in die Warteliste einfügt, was in den meisten Fällen bewirkt, das die Threads sofort wieder zum Zuge kommen.
Falls die Listen zwischenzeitlich gewechselt wurden, könnten sie mit einer dyn. Priorität des aktiven Threads in die aktive Liste eingefügt werden.
So kämen sie mit einer gerechten Priorität wieder ins Spiel, kämen aber sofort wieder an die Reihe.
Hört sich für mich persönlich ziehmlich gut an, hab noch keine Mängel entdeckt, vielleicht findet ihr welche.
MfG
DDR-RAM