Betriebssysteme: Drei einfache StĂŒcke. Teil 5: Planung: Multi-Level-Feedback-Warteschlange (Übersetzung)

EinfĂŒhrung in Betriebssysteme

Hallo, Habr! Ich möchte Ihnen eine Serie von Übersetzungen einer interessanten Literatur — OSTEP — vorstellen. In diesem Material wird die Funktionsweise von Unix-Ă€hnlichen Betriebssystemen ziemlich grĂŒndlich behandelt, insbesondere die Arbeit mit Prozessen, verschiedenen Planern, Speicher und anderen Ă€hnlichen Komponenten, die ein modernes Betriebssystem ausmachen. Das Original aller Materialien können Sie hier ansehen hier. Bitte beachten Sie, dass die Übersetzung unprofessionell (relativ frei) durchgefĂŒhrt wurde, aber ich hoffe, dass ich den allgemeinen Sinn bewahrt habe.

Die Laborarbeiten zu diesem Thema finden Sie hier:

Andere Teile:

Und Sie können auch meinen Kanal auf Telegramm =)

Planung: Multi-Level Feedback Queue

In dieser Vorlesung werden wir ĂŒber die Herausforderungen bei der Entwicklung eines der bekanntesten AnsĂ€tze zur
Planung sprechen, der als Multi-Level Feedback Queue (MLFQ) bezeichnet wird. Der MLFQ Scheduler wurde erstmals 1962 von Fernando J. CorbatĂł im System beschrieben, das
Compatible Time-Sharing System (CTSS) genannt wird. Diese Arbeiten (einschließlich spĂ€terer Arbeiten an
Multics) wurden spĂ€ter fĂŒr den Turing Award nominiert. Der Scheduler wurde
spÀter weiter verbessert und nahm eine Form an, die man bereits in
einigen modernen Systemen antreffen kann.

Der MLFQ-Algorithmus versucht, zwei grundlegende, sich ĂŒberschneidende Probleme zu lösen.
ZunĂ€chst einmal, er versucht, die Durchlaufzeit zu optimieren, die, wie wir in der vorherigen Vorlesung betrachtet haben, durch das Starten der kĂŒrzesten
Aufgaben zu Beginn der Warteschlange optimiert wird. Allerdings weiß das OS nicht, wie lange ein bestimmter Prozess arbeiten wird, was
das notwendige Wissen fĂŒr die Algorithmen SJF, STCF ist. Zweitens, MLFQ versucht,
das System reaktionsschnell fĂŒr die Benutzer zu machen (zum Beispiel fĂŒr diejenigen, die warten und
auf ihren Bildschirm starren, in der Erwartung, dass die Aufgabe abgeschlossen wird) und damit die Zeit
der Reaktion zu minimieren. Leider verringern Algorithmen wie RR die Reaktionszeit, haben aber Ă€ußerst
negative Auswirkungen auf die Durchlaufzeit-Metrik. Daher unser Problem: Wie entwirft man einen
Scheduler, der unseren Anforderungen entspricht und dabei nichts ĂŒber die
Charakteristik des Prozesses im Allgemeinen weiß? Wie kann der Scheduler die Eigenschaften der Aufgaben lernen,
die er ausfĂŒhrt, und dadurch bessere Entscheidungen bezĂŒglich der Planung treffen?

Die Kernproblematik: Wie plant man Aufgaben ohne perfektes Wissen?
Wie gestaltet man einen Scheduler, der gleichzeitig die Reaktionszeit minimiert
fĂŒr interaktive Aufgaben und dabei die Durchlaufzeit minimiert, ohne im Voraus.
das Zeitverhalten der Aufgabe zu kennen?

Hinweis: Lernend aus vergangenen Ereignissen

Die MLFQ-Warteschlange ist ein hervorragendes Beispiel fĂŒr ein System, das aus
vergangenen Ereignissen lernt, um die Zukunft vorherzusagen. Solche AnsÀtze sind hÀufig
in Betriebssystemen zu finden (und in vielen anderen Bereichen der Informatik, einschließlich der Bereiche
Vorhersagen in Hardware und Algorithmen zur Caching). Ähnliche AnsĂ€tze
wirken, wenn Aufgaben Verhaltensphasen haben und somit vorhersagbar sind.
Allerdings sollte man mit dieser Technik vorsichtig sein, da Vorhersagen sehr leicht
falsch sein können und das System zu schlechteren Entscheidungen fĂŒhren können als
ohne jegliches Wissen.

MLFQ: Grundregeln

Betrachten wir die Grundregeln des MLFQ-Algorithmus. Und obwohl es verschiedene
Implementierungen dieses Algorithmus gibt, sind die grundlegenden AnsÀtze Àhnlich.
In der Implementierung, die wir betrachten werden, wird MLFQ mehrere
einzelne Warteschlangen haben, von denen jede eine unterschiedliche PrioritÀt hat. Zu jeder Zeit
befindet sich eine aufbereitete Aufgabe in einer Warteschlange. MLFQ verwendet PrioritÀten,
um zu entscheiden, welche Aufgabe zur AusfĂŒhrung gebracht werden soll, d.h. die Aufgabe mit
höherer PrioritÀt (Aufgabe aus der Warteschlange mit höchster PrioritÀt) wird zuerst
ausgefĂŒhrt.
Zweifellos kann in einer bestimmten Warteschlange mehr als eine Aufgabe sein, damit
haben sie die gleiche PrioritÀt. In diesem Fall wird der RR-Mechanismus
zur Planung der AusfĂŒhrung unter diesen Aufgaben verwendet.
So kommen wir zu zwei grundlegenden Regeln fĂŒr MLFQ:

  • Regel 1: Wenn PrioritĂ€t(A) > PrioritĂ€t(B), wird Aufgabe A ausgefĂŒhrt (B nicht)
  • Regel 2: Wenn PrioritĂ€t(A) = PrioritĂ€t(B), werden A und B unter Verwendung von RR ausgefĂŒhrt

Aus den obigen Punkten ergeben sich die SchlĂŒsselfaktoren fĂŒr die MLFQ-Planung
sind die PrioritÀten. Anstatt jeder
Aufgabe eine feste PrioritÀt zuzuweisen, Àndert MLFQ ihre PrioritÀt basierend auf dem beobachteten Verhalten.
Wenn eine Aufgabe beispielsweise stĂ€ndig Arbeiten auf der CPU ausfĂŒhrt, wĂ€hrend sie auf Eingaben von der Tastatur wartet,
wird MLFQ die PrioritÀt des Prozesses hoch halten, da genau das so
ein interaktiver Prozess funktionieren sollte. Wenn hingegen die Aufgabe stÀndig und
intensiv die CPU ĂŒber einen lĂ€ngeren Zeitraum nutzt, wird MLFQ ihre
PrioritĂ€t senken. Auf diese Weise wird MLFQ das Verhalten der Prozesse wĂ€hrend ihrer AusfĂŒhrung studieren
und verwenden.
Lassen Sie uns ein Beispiel zeichnen, wie die Warteschlangen zu einem bestimmten Zeitpunkt
aussehen könnten, und dann wĂŒrde dies etwa so aussehen:
Betriebssysteme: Drei einfache StĂŒcke. Teil 5: Planung: Multi-Level-Feedback-Warteschlange (Übersetzung)

In diesem Szenario befinden sich 2 Prozesse A und B in der Warteschlange mit der höchsten PrioritÀt. Prozess
C befindet sich irgendwo in der Mitte, und Prozess D am Ende der Warteschlange. GemĂ€ĂŸ den obigen
Beschreibungen des MLFQ-Algorithmus wird der Scheduler nur Aufgaben mit der höchsten PrioritĂ€t ausfĂŒhren.
PrioritĂ€t gemĂ€ĂŸ RR, wĂ€hrend die Aufgaben C und D nicht berĂŒcksichtigt werden.
NatĂŒrlich wird ein statischer Snapshot nicht das volle Bild davon geben, wie MLFQ funktioniert.
Es ist wichtig zu verstehen, wie sich das Bild im Laufe der Zeit verÀndert.

Versuch 1: Wie man die PrioritÀt Àndert

In diesem Moment muss entschieden werden, wie MLFQ das PrioritÀtsniveau
der Aufgaben (und damit deren Position in der Warteschlange) im Verlauf ihres Lebenszyklus Àndert. Dazu
muss man den Arbeitsablauf im Kopf behalten: Eine bestimmte Anzahl
interaktiver Aufgaben mit kurzer Laufzeit (und somit hÀufige Freigabe
der CPU) und mehrere langwierige Aufgaben, die die CPU die gesamte Arbeitszeit nutzen, wobei
die Reaktionszeit fĂŒr solche Aufgaben nicht wichtig ist. Somit kann der erste Versuch
unternehmen werden, den MLFQ-Algorithmus mit folgenden Regeln zu implementieren:

  • Regel 3: Wenn eine Aufgabe in das System eintritt, wird sie in die Warteschlange mit der höchsten
  • PrioritĂ€t festgelegt wurde.
  • Regel 4a: Wenn eine Aufgabe ihr zugewiesenes Zeitfenster vollstĂ€ndig nutzt, wird ihre
  • PrioritĂ€t gesenkt.
  • Regel 4b: Wenn die Aufgabe die CPU vor Ablauf ihres Zeitfensters freigibt,
  • behĂ€lt sie ihre vorherige PrioritĂ€t.

Beispiel 1: Eine einzelne langlaufende Aufgabe

Wie in diesem Beispiel zu sehen ist, wird die Aufgabe beim Eingang mit der höchsten
PrioritÀt eingestuft. Nach einem Zeitfenster von 10 ms wird die PrioritÀt durch den
Scheduler gesenkt. Nach dem nĂ€chsten Zeitfenster wird die Aufgabe schließlich auf
die niedrigste PrioritÀt im System herabgestuft, wo sie verbleibt.
Betriebssysteme: Drei einfache StĂŒcke. Teil 5: Planung: Multi-Level-Feedback-Warteschlange (Übersetzung)

Beispiel 2: Eine kurze Aufgabe wurde hinzugefĂŒgt

Jetzt schauen wir uns ein Beispiel an, wie MLFQ versucht, sich SJF anzunÀhern. In diesem
Beispiel gibt es zwei Aufgaben: A, die eine langlaufende Aufgabe ist, die stÀndig
CPU beansprucht, und B, die eine kurze interaktive Aufgabe ist. Angenommen,
A hat bereits eine gewisse Zeit gearbeitet, als die Aufgabe B eintrifft.
Betriebssysteme: Drei einfache StĂŒcke. Teil 5: Planung: Multi-Level-Feedback-Warteschlange (Übersetzung)

In diesem Diagramm sind die Ergebnisse des Szenarios sichtbar. Aufgabe A, wie jede Aufgabe,
die die CPU nutzt, befindet sich ganz unten. Aufgabe B wird zu Zeitpunkt T=100 eintreffen und wird
in die Warteschlange mit der höchsten PrioritÀt platziert. Da ihre Laufzeit kurz ist, wird
sie abgeschlossen, bevor sie die letzte Warteschlange erreicht.

Aus diesem Beispiel lÀsst sich das Hauptziel des Algorithmus ableiten: Da der Algorithmus nicht
weiß, ob es sich um eine lange oder kurze Aufgabe handelt, geht er zunĂ€chst davon aus, dass es sich um eine Aufgabe handelt.
kurz und gibt ihr die höchste PrioritÀt. Wenn es sich tatsÀchlich um eine kurze Aufgabe handelt, dann
wird sie schnell ausgefĂŒhrt, andernfalls, wenn es sich um eine lange Aufgabe handelt, wird sie sich langsam bewegen
nach unten in der PrioritÀt und bald beweisen, dass es sich tatsÀchlich um eine lange Aufgabe handelt, die nicht
eine RĂŒckmeldung erfordert.

Beispiel 3: Was ist mit der Ein- und Ausgabe?

Lassen Sie uns nun das Beispiel mit Ein- und Ausgabe betrachten. Wie in Regel 4b gesagt,
wenn ein Prozess den Prozessor freigibt, ohne seine gesamte Prozessorzeit vollstÀndig genutzt zu haben,
dann bleibt er auf dem bisherigen PrioritÀtsniveau. Die Absichten dieser Regel sind recht einfach
— wenn eine interaktive Aufgabe viele Ein- und Ausgabeoperationen ausfĂŒhrt, zum Beispiel, wenn sie auf
Benutzereingaben wie Tastatureingaben oder Mausklicks wartet, wird eine solche Aufgabe den Prozessor
frĂŒher von dem zugewiesenen Zeitfenster befreien. Wir möchten eine solche Aufgabe nicht herabstufen,
deshalb bleibt sie auf dem gleichen Niveau.
Betriebssysteme: Drei einfache StĂŒcke. Teil 5: Planung: Multi-Level-Feedback-Warteschlange (Übersetzung)

Dieses Beispiel zeigt, wie der Algorithmus mit solchen Prozessen arbeitet - die interaktive Aufgabe B, die nur 1 ms CPU benötigt, bevor sie die
Ein- und Ausgabeprozesse ausfĂŒhrt, und die lange Aufgabe A, die die gesamte CPU-Zeit nutzt.
MLFQ hÀlt den Prozess B mit der höchsten PrioritÀt, da er stÀndig
den CPU freigibt. Wenn B eine interaktive Aufgabe ist, dann hat der Algorithmus in diesem Fall sein Ziel erreicht,
interaktive Aufgaben schnell auszufĂŒhren.

Probleme mit dem aktuellen MLFQ-Algorithmus

In den vorherigen Beispielen haben wir eine grundlegende Version von MLFQ entwickelt. Und es scheint, dass er
seine Arbeit gut macht und fair, indem er die Prozessorzeit gerecht zwischen
langen Aufgaben verteilt und kurzen Aufgaben oder solchen, die intensiv Eingaben verarbeiten, die Möglichkeit gibt, schnell zu arbeiten. Leider enthÀlt dieser Ansatz mehrere
ernsthafte Probleme.
, das Hungersnot-Problem: Wenn es im System viele interaktive
ZunÀchst einmalAufgaben gibt, werden sie die gesamte Prozessorzeit beanspruchen und somit wird keine lange
Aufgabe die Möglichkeit erhalten, ausgefĂŒhrt zu werden (sie verhungern).
, clevere Benutzer könnten ihre Programme so schreiben, dass sie

Zweitensden Scheduler ĂŒberlisten. Der Trick besteht darin, etwas zu tun, das dazu fĂŒhrt, dass der
Scheduler dem Prozess mehr Prozessorzeit zuweist. Der Algorithmus, der
Der Planer wird dem Prozess mehr Prozessorzeit zuweisen. Der Algorithmus, der
Wie oben beschrieben, ist es durchaus anfĂ€llig fĂŒr derartige Angriffe: Bevor das Zeitfenster praktisch
abgelaufen ist, muss eine Ein- oder Ausgabeoperation (fĂŒr eine bestimmte, gleichgĂŒltig welche Datei) durchgefĂŒhrt werden
und damit die CPU freigegeben werden. Ein solches Verhalten ermöglicht es, in der gleichen
Warteschlange zu bleiben und erneut einen höheren Prozentsatz an CPU-Zeit zu erhalten. Wenn das richtig gemacht wird (zum Beispiel 99% der Zeit im Fenster vor der Freigabe der CPU auszufĂŒhren),
kann eine solche Aufgabe einfach monopolistisch die CPU nutzen.
Schließlich kann das Programm sein Verhalten im Laufe der Zeit Ă€ndern. Die Aufgaben,

die die CPU verwendet haben, können interaktiv werden. In unserem Beispiel erhalten solche
Aufgaben nicht die angemessene Behandlung vom Scheduler, da sie andere
(ursprĂŒngliche) interaktive Aufgaben erhalten hĂ€tten.
Frage an das Publikum: Welche Angriffe auf den Scheduler könnten in der modernen Welt durchgefĂŒhrt werden?

Versuch 2: PrioritÀtserhöhung

Lassen Sie uns versuchen, die Regeln zu Àndern und zu sehen, ob wir es schaffen, Probleme mit

Hunger zu vermeiden. Was könnten wir tun, um zu gewÀhrleisten, dass die mit
CPU verbundenen Aufgaben ihre Zeit erhalten (auch wenn nicht viel).
Als einfache Lösung des Problems kann man vorschlagen, alle solchen Aufgaben im System periodisch
in der PrioritÀt zu erhöhen. Es gibt viele Möglichkeiten, dies zu erreichen; lassen Sie uns als Beispiel etwas Einfaches umsetzen: Alle
Aufgaben sofort in die höchste PrioritÀt zu versetzen, von dort ein neues Regelwerk:
Regel5
: Nach einer bestimmten Zeitspanne S alle Aufgaben im System in die höchste Warteschlange versetzen.

  • Unser neues Regelwerk löst sofort zwei Probleme. Erstens, Prozesseverhungern garantiert nicht: Aufgaben, die sich in der höheren Warteschlange befinden, werden die

CPU-Zeit gemĂ€ĂŸ dem RR-Algorithmus teilen, sodass alle Prozesse
CPU-Zeit erhalten. Zweitens, wenn ein Prozess, der zuvor nur die CPU verwendet hat, interaktiv wird, bleibt er in der Warteschlange mit der höheren
PrioritÀt, nachdem er einmal in die höchste PrioritÀt erhöht wurde.
Betrachten wir ein Beispiel. In diesem Szenario betrachten wir einen Prozess, der die
nur die CPU betrifft, wird interaktiv und bleibt in der Warteschlange mit höherer
PrioritÀt, nachdem er einmal in die höchste PrioritÀt befördert wurde.
Betrachten wir ein Beispiel. In diesem Szenario betrachten wir einen Prozess, der
Betriebssysteme: Drei einfache StĂŒcke. Teil 5: Planung: Multi-Level-Feedback-Warteschlange (Übersetzung)

CPU und zwei interaktive, kurze Prozesse. Links zeigt die Abbildung das Verhalten ohne PrioritĂ€tserhöhung, wodurch eine langwierige Aufgabe nach dem Eintreffen von zwei interaktiven Aufgaben im System verhungern beginnt. Auf der rechten Seite wird alle 50 ms eine PrioritĂ€tserhöhung durchgefĂŒhrt, sodass alle Prozesse garantiert CPU-Zeit erhalten und periodisch ausgefĂŒhrt werden. 50 ms wurde in diesem Fall als Beispiel gewĂ€hlt, tatsĂ€chlich ist diese Zahl etwas höher.
Offensichtlich fĂŒhrt die HinzufĂŒgung der Zeit fĂŒr die periodische Erhöhung S zu
der berechtigten Frage: Welcher Wert sollte festgelegt werden? Einer der angesehenen
Systemingenieure, John Ousterhout, nannte solche GrĂ¶ĂŸen in Systemen voo-doo
Konstanten, da sie in gewissem Sinne schwarze Magie fĂŒr die korrekte
Festlegung erforderten. Und leider hat S diesen Charakter. Wenn der Wert zu hoch
gesetzt wird, beginnen lange Aufgaben zu verhungern. Ist der Wert zu niedrig,
erhalten interaktive Aufgaben nicht die nötige CPU-Zeit.

Versuch 3: Beste Zeiterfassung

Nun haben wir ein weiteres Problem, das gelöst werden muss: Wie können wir
verhindern, dass unser Scheduler ausgetrickst wird? Die Schuld tragen
die Regeln 4a, 4b, die es einer Aufgabe ermöglichen, ihre PrioritÀt beizubehalten, indem sie die CPU
vor Ablauf der zugewiesenen Zeit freigibt. Wie gehen wir damit um?
In diesem Fall kann eine bessere Zeiterfassung der CPU auf jedem
Level von MLFQ als Lösung angesehen werden. Anstatt die Zeit, die das Programm verwendet hat,
um CPU ĂŒber den festgelegten Zeitraum zu nutzen, sollte diese erfasst und gespeichert werden. Nachdem
ein Prozess die ihm zugewiesene Zeit aufgebraucht hat, sollte sein PrioritÀtslevel auf das nÀchste
niedrigere Niveau gesenkt werden. Jetzt spielt es keine Rolle, wie der Prozess seine Zeit verwendet – ob
er stÀndig rechnend auf der CPU oder durch zahlreiche Aufrufe agiert. Somit
sollte Regel 4 wie folgt umgeschrieben werden:

  • Regel4: Nachdem eine Aufgabe die ihr zugewiesene Zeit in der aktuellen Warteschlange aufgebraucht hat (unabhĂ€ngig davon, wie oft sie die CPU freigegeben hat), wird die PrioritĂ€t dieser Aufgabe gesenkt (sie bewegt sich weiter unten in der Warteschlange).

Sehen wir uns ein Beispiel an:
Betriebssysteme: Drei einfache StĂŒcke. Teil 5: Planung: Multi-Level-Feedback-Warteschlange (Übersetzung)»

Die Abbildung zeigt, was passiert, wenn man versucht, den Scheduler auszutricksen, wie
Wenn man die vorherigen Regeln 4a, 4b anwendet, ergibt sich das Ergebnis links. Mit der neuen
Regel – das Ergebnis rechts. Vor der Aktivierung der Schutzmechanismen konnte jeder Prozess I/O bis zur
Fertigstellung aufrufen und so die CPU dominieren. Nach Aktivierung des Schutzes wird er jedoch, unabhÀngig vom Verhalten
der I/O, immer weiter unten in die Warteschlangen eingestuft und kann somit nicht unrechtmĂ€ĂŸig
auf die CPU-Ressourcen zugreifen.

Verbesserungen von MLFQ und anderen Problemen

Mit den oben genannten Verbesserungen entstehen neue Probleme: Eine der Hauptfragen ist, wie ein
solcher Scheduler parametrisiert werden sollte? Das heißt, wie viele Warteschlangen sollten vorhanden sein?
Wie groß sollte das Arbeitsfenster des Programms innerhalb der Warteschlange sein? Wie
hÀufig sollte die PrioritÀt eines Programms erhöht werden, um Hunger zu vermeiden und
VerhaltensĂ€nderungen des Programms zu berĂŒcksichtigen? Auf diese Fragen gibt es keine einfache
Antwort, und nur Experimente mit Lasten und anschließende Anpassungen
des Schedulers können zu einem einigermaßen zufriedenstellenden Gleichgewicht fĂŒhren.

Beispielsweise erlauben die meisten Implementierungen von MLFQ die Zuweisung unterschiedlicher
Zeitintervalle zu verschiedenen Warteschlangen. Hochpriorisierte Warteschlangen erhalten in der Regel
kurze Intervalle. Diese Warteschlangen bestehen aus interaktiven Aufgaben,
zwischen denen der Wechsel recht empfindlich ist und etwa 10 Millisekunden oder weniger
dauern sollte. Im Gegensatz dazu bestehen niedrigpriorisierte Warteschlangen aus langen Aufgaben, die
die CPU verwenden. In diesem Fall sind lange Zeitintervalle sehr passend (100 ms).
Betriebssysteme: Drei einfache StĂŒcke. Teil 5: Planung: Multi-Level-Feedback-Warteschlange (Übersetzung)

In diesem Beispiel gibt es 2 Aufgaben, die 20 Millisekunden in der hochpriorisierten Warteschlange gearbeitet haben,
aufgeteilt in Fenster von 10 Millisekunden. 40 Millisekunden in der mittleren Warteschlange (Fenster von 20 Millisekunden) und in der niedrigpriorisierten
Warteschlange betrug das temporÀre Fenster 40 Millisekunden, in dem die Aufgaben ihre Arbeit abgeschlossen haben.

Die Umsetzung von MLFQ im Betriebssystem Solaris ist eine Klasse von zeitscheibenden Scheduler.
Der Scheduler bietet eine Reihe von Tabellen an, die genau definieren, wie sich die PrioritÀt eines Prozesses im Laufe
seines Lebens Ă€ndern sollte, wie groß das zugeteilte Fenster sein sollte und wie oft die PrioritĂ€ten
einer Aufgabe erhöht werden mĂŒssen. Der Systemadministrator
kann mit dieser Tabelle interagieren und den Scheduler dazu bringen, sich
anders zu verhalten. StandardmĂ€ĂŸig enthĂ€lt diese Tabelle 60 Warteschlangen mit schrittweise zunehmender
FenstergrĂ¶ĂŸe von 20 ms (hohe PrioritĂ€t) bis mehrere Hundert ms (niedrige PrioritĂ€t), und
auch mit Boost fĂŒr alle Aufgaben einmal pro Sekunde.

Andere MLFQ-Planer verwenden keine Tabelle oder spezifische
Regeln, die in dieser Vorlesung beschrieben sind, sondern berechnen PrioritÀten unter Verwendung
mathematischer Formeln. So verwendet beispielsweise der Planer in FreeBSD eine Formel zur
Berechnung der aktuellen PrioritÀt einer Aufgabe, basierend darauf, wie viel der Prozess
CPU verwendet hat. DarĂŒber hinaus verrottet die CPU-Nutzung im Laufe der Zeit, und somit
geschieht die PrioritÀtensteigerung etwas anders, als oben beschrieben. Dies sind die
sogenannten Abklingalgorithmen. Seit Version 7.1 wird in FreeBSD der ULE-Planer verwendet.

Schließlich haben viele Planer andere Besonderheiten. Zum Beispiel reservieren einige
Planer die höchsten Ebenen fĂŒr das Betriebssystem, sodass kein Benutzerprozess die höchste
PrioritÀt im System erhalten kann. Einige Systeme ermöglichen es, Hinweise zu geben, um
dem Planer zu helfen, PrioritÀten korrekt festzulegen. So kann man beispielsweise mit dem Befehl
die PrioritÀt einer Aufgabe erhöhen oder verringern und damit die Chancen des Programms auf Zeit nice
auf der CPU erhöhen oder senken.
MLFQ: Ergebnisse

Wir haben einen Ansatz zur Planung beschrieben, der MLFQ genannt wird. Sein Name

entspricht dem Prinzip seiner Arbeitsweise – er hat mehrere Warteschlangen und nutzt Feedback
zur Bestimmung der PrioritÀt einer Aufgabe.
Die endgĂŒltige Form der Regeln wird wie folgt sein:
Regel 1

  • : Wenn PrioritĂ€t(A) > PrioritĂ€t(B), wird Aufgabe A gestartet (B nicht)Regel 2
  • : Wenn PrioritĂ€t(A) = PrioritĂ€t(B), werden A und B mit RR gestartetRegel 3
  • : Wenn eine Aufgabe ins System kommt, wird sie in die Warteschlange mit der höchsten PrioritĂ€t gelegt.MLFQ ist aus folgendem Grund interessant – anstatt im Voraus Wissen ĂŒber
  • Regel4: Nachdem eine Aufgabe die ihr zugewiesene Zeit in der aktuellen Warteschlange aufgebraucht hat (unabhĂ€ngig davon, wie oft sie die CPU freigegeben hat), wird die PrioritĂ€t dieser Aufgabe gesenkt (sie bewegt sich weiter unten in der Warteschlange).
  • Unser neues Regelwerk löst sofort zwei Probleme. Erstens, Prozesseverhungern garantiert nicht: Aufgaben, die sich in der höheren Warteschlange befinden, werden die

die Natur der Aufgabe zu verlangen, lernt der Algorithmus aus dem bisherigen Verhalten der Aufgabe und legt
die PrioritĂ€ten entsprechend fest. So versucht er, gleichzeitig zwei StĂŒhle zu besetzen – sowohl Leistung fĂŒr kurze Aufgaben (SJF, STCF) zu erreichen als auch fair lange,
CPU-intensive Aufgaben zu starten. Deshalb verwenden viele Systeme, einschließlich BSD und ihrer Derivate,
Solaris, Windows, Mac eine gewisse Form des MLFQ-Algorithmus als grundlegende Grundlage.
manpages.debian.org/stretch/manpages/sched.7.en.html
en.wikipedia.org/wiki/Scheduling_

ZusÀtzliche Materialien:

  1. (computing)
  2. chebykin.org/freebsd-process-scheduling(computing)
  3. pages.lip6.fr/Julia.Lawall/atc18-bouron.pdf
  4. www.usenix.org/legacy/event/bsdcon03/tech/full_papers/roberson/roberson.pdf
  5. chebykin.org/freebsd-process-scheduling

Quelle: habr.com

60GB SSD 8Gb DDR4