Nun in dem einen Anhang hier zu den Einplanungsverfahren möchte ich mal ein paar Fallstudien betrachten.
Und ich fange mal mit der klassischen Unix Variante an.
Und das heißt also mit Unix Version 6, Unix Version 7, was eigentlich heute nicht mehr existent ist.
Aber letztendlich die Unix Geschichte ja schon ein Stück weit geprägt hat.
Nun, dieses Verfahren arbeitet zweistufig, versucht Antwortzeiten zu minimieren und fördert
damit eben doch die Interaktivität.
Das ist die Idee, ist ein Timesharing-System, Unix Version 6, und ist als solches ja auch
wirklich sehr erfolgreich geworden und zu passen natürlich, denn diese Kriterien, die
man dafür ansetzen möchte, sehr gut.
Denn die Zweistufigkeit auf der unteren Ebene bedeutet, dass kurzfristige Verfahren, die
Short-Term Scettling, arbeitet präemptiv, berechnet dynamische Prioritäten und ist so ein Stück
weit ein MLFQ, ähnlich hat mehr als eine Warteschlange, die dann eben auch ein Feedback-Verfahren
denn ein Stück weit mitbedient wird auf Basis der dynamisch berechneten Prioritäten.
Einmal pro Sekunde wird dann diese Priorität eines solchen Prozesses berechnet in Abhängigkeit
von seiner CPU-Zeit, die er halt hatte, das ist im Wesentlichen auch ein gewichteter Wert.
Dann den Wichtungsfaktor, den man über den I-System-Call einbringen konnte und dann
halt eine klare, statische Vorgabe, ein Basiswert für diese Prioritäten, die für diesen Prozess
dann halt gelten.
Denn das CPU-Nutzungsrecht wurde dann immer tickweise aktualisiert, es verringerte sich
dann praktisch bei diesen Unix-Systemen im Abständen von einer Zehntelsekunde.
Da wurde dann praktisch der Prioritätswert letztendlich entsprechend, das jeweiligen
Tickstand erhöht.
Je höher dieser Wert war, umso niedlicher war dann eigentlich die Priorität für so
einen Prozess.
Man hat einen Nutzungsmaß, CPU-Usage, das ist sozusagen ein Wert für eine Art Dämpfungsfilter,
nur ein sehr eingeschränkter Dämpfungsfilter, der hier verwendet worden ist, der nur von
Unix zu Unix-System, der entsprechend variiert hat.
Wir sehen den gleich ein bisschen genauer, wie er für die 4.3-BSD-Variante funktioniert
hatte.
Die höhere Ebene, die führte mittelfristige Einplanung aus und da wissen wir ja eben,
dass es im Wesentlichen Swapping bedeutet, also die Umlagerung von Prozessen zwischen
Hauptspeicher und Hintergrundspeicher bedeutet.
Nun mit diesem Verfahren war ein sehr guter interaktiver Betrieb möglich, rechneintensive
Prozesse wurden nicht so gut unterstützt, wollte man bewusst eben doch nicht.
Ist durchaus eine sehr effektive Umsetzung gewesen.
Was hier noch gemacht worden ist, ist eben, dass wann immer Prozesse sozusagen auf eine
Wartebedingung getroffen sind, wurde dann praktisch die Aufwägpriorität für diese
Prozesse eingestellt im Kernel, mit der die Prozesse dann bevorzugt praktisch die CPU dann
wieder zugeteilt bekommen können, sobald die Wartebedingung aufgehoben worden ist.
Das nächste sehr erfolgreiche System war Unix-Version 4.3-BSD, die Berkeley Software
Distribution.
Das ist die die durchaus heute noch mit dem FreeBSD System.
Hier war ein sehr ausgeklügeltes MLFQ-Verfahren mit 32 Warteschlangen realisiert und es wurden
eben auch dynamische Prioritäten im Bereich 0 bis 127 an Wert, Prioritätswert pro Prozess
dann halt realisiert.
Die Benutzerprioritäten wurden in jedem vierten Zeit-Tick alle 40 Millisekunden, ein Tick waren
10 Millisekunden, also alle 40 Millisekunden entsprechend dieser Formel hier berechnet,
wo denn noch ein Gewichtungsfaktor einging, den man über den Nice-Systemcall dann immer
jeweils einbringen kann, aber zu berücksichtigen, man kann seine Priorität nicht erhöhen, sondern
mit Nice kann man eigentlich sich in der Priorität eher nur zurücksetzen.
Presenters
Zugänglich über
Offener Zugang
Dauer
00:18:15 Min
Aufnahmedatum
2020-10-29
Hochgeladen am
2020-10-29 13:06:32
Sprache
de-DE