EinfĂŒhrung in Betriebssysteme
Hallo, Habr! Ich möchte euch eine Serie von Ăbersetzungen einer interessanten Literatur vorstellen â OSTEP. In diesem Material wird die Funktionsweise von unixĂ€hnlichen Betriebssystemen recht tiefgehend behandelt, insbesondere die Arbeit mit Prozessen, verschiedenen Planern, Speicher und anderen Ă€hnlichen Komponenten, die ein modernes Betriebssystem ausmachen. Das Original aller Materialien könnt ihr hier ansehen . Bitte beachtet, dass die Ăbersetzung nicht professionell (recht frei) durchgefĂŒhrt wurde, aber ich hoffe, dass ich die allgemeine Bedeutung erhalten habe.
Die Laborarbeiten zu diesem Thema findet ihr hier:
Weitere Teile:
Ihr könnt auch mal auf meinen Kanal in =)
Planung: Multi-Level Feedback Queue
In dieser Vorlesung werden wir die Herausforderungen der Entwicklung eines der bekanntesten AnsÀtze zur
Planung besprechen, der als Multi-Level Feedback Queue (MLFQ) bezeichnet wird. Der MLFQ-Planer wurde erstmals 1962 von Fernando J. CorbatĂł im System beschrieben, das
Compatible Time-Sharing System (CTSS). Diese Arbeiten (einschlieĂlich der spĂ€teren Arbeiten an
Multics) wurden spĂ€ter fĂŒr den Turing Award nominiert. Der Scheduler wurde
anschlieĂend verbessert und nahm eine Form an, die man bereits in
einigen modernen Systemen finden kann.
Der MLFQ-Algorithmus versucht, zwei grundlegende ĂŒberlappend Probleme zu lösen.
Erstens, versucht er, die Durchlaufzeit zu optimieren, die, wie wir in der vorherigen Vorlesung behandelt haben, durch das Starten der kĂŒrzesten Aufgaben zu Beginn der Warteschlange optimiert wird. Allerdings weiĂ das OS nicht, wie lange ein bestimmter Prozess laufen wird, was
das erforderliche Wissen fĂŒr die Funktionsweise der SJF- und STCF-Algorithmen ist.
Zweitens , versucht der MLFQdas System fĂŒr die Benutzer (zum Beispiel fĂŒr diejenigen, die vor dem Bildschirm sitzen und
auf den Abschluss einer Aufgabe warten) reaktionsschnell zu gestalten und somit die
Antwortzeit zu minimieren. Leider reduzieren Algorithmen wie RR die Antwortzeit, haben aber extrem
negative Auswirkungen auf die Durchlaufzeit-Metrik. Daraus ergibt sich unser Problem: Wie entwerfen
wir einen Scheduler, der unseren Anforderungen entspricht und dabei nichts ĂŒber
ein Scheduler, der unseren Anforderungen gerecht wird und gleichzeitig nichts ĂŒber
Was ist der allgemeine Charakter des Prozesses? Wie kann ein Planer die Eigenschaften der Aufgaben,
die er ausfĂŒhrt, untersuchen und dadurch bessere Entscheidungen fĂŒr die Planung treffen?
Das Problem im Kern: Wie plant man die Aufgabenzuweisung ohne perfekte Kenntnisse?
Wie entwickelt man einen Planer, der gleichzeitig die Reaktionszeit
fĂŒr interaktive Aufgaben minimiert und zugleich die Bearbeitungszeit ohne vorhergehende
Kenntnis der AusfĂŒhrungszeit der Aufgabe reduziert?
Hinweis: Lernen aus frĂŒheren Ereignissen
Die MLFQ-Warteschlange ist ein ausgezeichnetes Beispiel fĂŒr ein System, das auf
vergangenen Ereignissen lernt, um die Zukunft zu prognostizieren. Solche AnsÀtze sind hÀufig
in Betriebssystemen (und vielen anderen Bereichen der Informatik anzutreffen, einschlieĂlich der Vorhersagezweige
in Hardware und Caching-Algorithmen). Solche Vorgehensweisen
funktionieren, wenn Aufgaben Verhaltensphasen haben und daher vorhersehbar sind.
Allerdings sollte man mit dieser Technik vorsichtig sein, da Vorhersagen sehr schnell
falsch sein können und das System zu schlechteren Entscheidungen fĂŒhren als
es ohne jegliches Wissen der Fall wÀre.
MLFQ: Grundregeln
Betrachten wir die grundlegenden Regeln des MLFQ-Algorithmus. Obwohl es mehrere Implementierungen dieses Algorithmus gibt, sind die grundlegenden AnsÀtze Àhnlich.
In der Implementierung, die wir betrachten werden, gibt es im MLFQ mehrere
getrennte Warteschlangen, von denen jede eine andere PrioritÀt hat. Zu jedem Zeitpunkt
befindet sich eine aufrufbereite Aufgabe in einer Warteschlange. MLFQ verwendet PrioritÀten,
um zu bestimmen, welche Aufgabe zur AusfĂŒhrung kommt, d.h. die Aufgabe mit höherer
PrioritÀt (die Aufgabe aus der Warteschlange mit der höchsten PrioritÀt) wird als erste
ausgefĂŒhrt.
Es ist unbestreitbar, dass in einer bestimmten Warteschlange mehr als eine Aufgabe sein kann, sodass
diese den gleichen PrioritÀtsgrad haben. In diesem Fall wird ein RR-Mechanismus verwendet,
um die AusfĂŒhrung unter diesen Aufgaben zu planen.
Somit gelangen wir zu zwei grundlegenden Regeln fĂŒr MLFQ:
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 gestartet.
- Aus dem oben Genannten ergibt sich, dass die SchlĂŒsselfaktoren fĂŒr die Planung von MLFQ
die PrioritÀten sind. Anstatt jeder Aufgabe eine feste PrioritÀt zuzuweisen,
PrioritÀten ist. Anstatt jedem eine feste PrioritÀt zuzuweisen,
Im Rahmen der Aufgabe passt MLFQ die PrioritÀt je nach beobachtetem Verhalten an.
Wenn zum Beispiel eine Aufgabe stÀndig CPU-Ressourcen zur Eingabe von der Tastatur anfordert,
wird MLFQ die PrioritÀt des Prozesses hoch halten, da dies dem entspricht, wie
ein interaktiver Prozess funktionieren sollte. Im Gegensatz dazu, wenn eine Aufgabe konstant und
intensiv CPU fĂŒr lĂ€ngere Zeit nutzt, wird MLFQ dessen PrioritĂ€t verringern.
Auf diese Weise wird MLFQ das Verhalten der Prozesse wĂ€hrend ihrer AusfĂŒhrung
studieren und diese Beobachtungen nutzen.
Lassen Sie uns ein Beispiel skizzieren, wie die Warteschlangen zu einem bestimmten Zeitpunkt
aussehen könnten, und dann wĂŒrde es etwa so aussehen:

In diesem Diagramm befinden sich die Prozesse A und B in der Warteschlange mit der höchsten PrioritÀt. Der Prozess
C befindet sich irgendwo in der Mitte, wÀhrend der Prozess D ganz hinten in der Warteschlange steht. GemÀà der oben
geschilderten Beschreibung des MLFQ-Algorithmus wird der Scheduler nur die Aufgaben mit der höchsten
PrioritĂ€t gemÀà RR ausfĂŒhren, wĂ€hrend die Aufgaben C und D inaktiv bleiben.
Ein statisches Snapshot gibt natĂŒrlich nicht das volle Bild darĂŒber, 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
An diesem Punkt muss entschieden werden, wie MLFQ die PrioritÀt der Aufgaben
Ă€ndert (und damit die Position der Aufgabe in der Warteschlange) im Verlauf ihres Lebenszyklus. Um
dies zu erreichen, muss der Arbeitsablauf im Kopf behalten werden: eine bestimmte Anzahl
interaktiver Aufgaben mit kurzer Laufzeit (und damit hÀufige Freigabe der
CPU) und mehrere langanhaltende Aufgaben, die die CPU wÀhrend ihrer gesamten Arbeitszeit nutzen, wobei
die Reaktionszeit fĂŒr solche Aufgaben unwichtig ist. So kann ein erster Versuch gemacht werden,
den MLFQ-Algorithmus mit den folgenden Regeln zu implementieren:
- Regel 3: Wenn eine Aufgabe ins System kommt, wird sie in die Warteschlange mit der höchsten
- PrioritÀt eingestellt.
- Regel 4a: Wenn eine Aufgabe das ihr zugewiesene Zeitfenster vollstÀndig ausnutzt, wird ihre
- PrioritÀt gesenkt.
- Regel 4b: Wenn eine Aufgabe die CPU vor Ablauf ihres Zeitfensters freigibt, bleibt sie
- mit der gleichen PrioritÀt.
Beispiel 1: Einzelne langlaufende Aufgabe
Wie in diesem Beispiel zu sehen ist, wird die Aufgabe bei ihrem Eintreffen mit der höchsten
PrioritÀt gesetzt. Nach dem Zeitfenster von 10 ms wird die PrioritÀt der Aufgabe durch
den Scheduler gesenkt. Nach dem nĂ€chsten Zeitfenster wird die Aufgabe schlieĂlich herabgestuft bis
niedriger PrioritÀt im System, wo sie bleibt.

Beispiel 2: Eine kurze Aufgabe wurde angezeigt.
Lassen Sie uns nun ein Beispiel ansehen, wie MLFQ versucht, SJF zu approximieren. In diesem
Beispiel gibt es zwei Aufgaben: A, die eine langlaufende Aufgabe ist und stÀndig
CPU verwendet, und B, die eine kurze interaktive Aufgabe darstellt. Nehmen wir an,
dass A bereits einige Zeit gearbeitet hat, als Aufgabe B eintrifft.

In diesem Diagramm sind die Ergebnisse des Szenarios sichtbar. Aufgabe A, wie jede andere
Aufgabe, die CPU verwendet, befindet sich ganz unten. Aufgabe B wird zu einem Zeitpunkt T=100
eingereicht und erhĂ€lt den höchsten PrioritĂ€tsplatz in der Warteschlange. Da ihre AusfĂŒhrungszeit kurz
ist, wird sie abgeschlossen, bevor sie die letzte Warteschlange erreicht.
Aus diesem Beispiel sollte die Hauptzielsetzung des Algorithmus deutlich werden: Da der Algorithmus nicht
weiss, ob eine Aufgabe lang oder kurz ist, geht er zunÀchst davon aus, dass die Aufgabe
kurz ist und gibt ihr die höchste PrioritÀt. Wenn es sich tatsÀchlich um eine kurze Aufgabe handelt,
wird sie schnell ausgefĂŒhrt, andernfalls, wenn es sich um eine lange Aufgabe handelt, wird sie langsam
in der PrioritÀt nach unten wandern und bald beweisen, dass es sich um eine tatsÀchlich lange Aufgabe handelt, die nicht
erfordert eine Antwort.
Beispiel 3: Was ist mit der Ein- und Ausgabe?
Schauen wir uns nun ein Beispiel zur Ein- und Ausgabe an. Wie in Regel 4b erwÀhnt,
wenn ein Prozess die CPU freigibt, ohne ihre gesamte Zeit zu nutzen,
bleibt er auf der gleichen PrioritÀtsstufe. Die Absicht dieser Regel ist ziemlich einfach,
wenn eine interaktive Aufgabe viele Ein- und Ausgabeoperationen ausfĂŒhrt, indem sie beispielsweise
auf Tasteneingaben oder Mausklicks des Benutzers wartet, gibt diese Aufgabe die CPU
frĂŒher als zugewiesen frei. Wir möchten solch eine Aufgabe nicht herabstufen,
und daher bleibt sie auf der gleichen Stufe.

Dieses Beispiel zeigt, wie der Algorithmus mit solchen Prozessen arbeitet â interaktive Aufgabe B, die nur 1 ms CPU benötigt, bevor sie
einen Ein- und Ausgabeprozess ausfĂŒhrt, und die lang laufende Aufgabe A, die die gesamte CPU-Zeit nutzt.
MLFQ hÀlt Prozess B auf der höchsten PrioritÀtsstufe, da er die CPU stÀndig freigibt.
Wenn B eine interaktive Aufgabe ist, hat der Algorithmus in diesem Fall sein Ziel erreicht,
interaktive Aufgaben schnell zu starten.
Probleme mit dem aktuellen MLFQ-Algorithmus
In den vorherigen Beispielen haben wir eine grundlegende Version von MLFQ erstellt. Es scheint, dass sie
gut funktioniert und die Prozessorzeit fair zwischen
langwierigen Aufgaben verteilt, wĂ€hrend sie kĂŒrzeren Aufgaben oder solchen, die intensiv
auf Eingaben-Ausgaben zugreifen, schnell die Möglichkeit gibt, verarbeitet zu werden. Leider hat dieser Ansatz einige
ernsthafte Probleme.
Erstens, das Hungerproblem: Wenn es im System viele interaktive
Aufgaben gibt, verbrauchen diese die gesamte Prozessorzeit, sodass keine langwierige
Aufgabe die Möglichkeit erhĂ€lt, ausgefĂŒhrt zu werden (sie verhungern).
, versucht der MLFQ, versierte Benutzer könnten ihre Programme so schreiben, dass sie
den Scheduler ĂŒberlisten. Der Trick besteht darin, etwas zu tun, das den
Scheduler dazu bringt, der Aufgabe mehr Prozessorzeit zuzuweisen. Der oben beschriebene
Algorithmus ist durchaus anfĂ€llig fĂŒr solche Angriffe: Bevor das Zeitfenster praktisch
abgelaufen ist, muss eine Eingabe-Ausgabe-Operation (bei einer beliebigen, egal welcher Datei) durchgefĂŒhrt werden,
um somit die CPU freizugeben. Ein solches Verhalten erlaubt es, im gleichen
um die CPU-Zeit in der Warteschlange zu maximieren. Wenn dies richtig durchgefĂŒhrt wird,
zum Beispiel, indem sie 99% der Zeit im Vordergrund lÀuft, bevor die CPU freigegeben wird,
kann eine solche Aufgabe einfach die gesamte Prozessorzeit monopolisiert.
SchlieĂlich kann ein Programm im Laufe der Zeit sein Verhalten Ă€ndern. Aufgaben,
die zuerst CPU-intensive waren, könnten interaktiv werden. In unserem Beispiel
wĂŒrden solche Aufgaben nicht die dringend benötigte Aufmerksamkeit vom Scheduler erhalten,
weil sie anderen (ursprĂŒnglichen) interaktiven Aufgaben vorgezogen werden wĂŒrden.
Frage an die Runde: Welche Angriffe auf den Scheduler könnten in der heutigen Welt ausgefĂŒhrt werden?
Versuch 2: PrioritÀtserhöhung
Versuchen wir, die Regeln zu Àndern und zu sehen, ob wir das Problem der
Hungersnot umgehen können. Was könnten wir tun, um sicherzustellen, dass CPU-gebundene
Aufgaben ihre Zeit erhalten (auch wenn nicht lange)?
Als einfache Lösung fĂŒr dieses Problem könnte man vorschlagen,
regelmĂ€Ăig die PrioritĂ€t aller solchen Aufgaben im System zu erhöhen. Es gibt viele Möglichkeiten,
dies zu erreichen, lassen Sie uns ein einfaches Beispiel umsetzen: eine Ăbersetzung.
Alle Aufgaben sofort in höchste PrioritÀt setzen, daher die neue Regel:
- Regel5: Nach einer gewissen Zeit S alle Aufgaben im System in die höchste Warteschlange versetzen.
Unsere neue Regel löst sofort zwei Probleme. Erstens, die Prozesse
sind garantiert nicht unterversorgt: Aufgaben in der höchsten Warteschlange erhalten
die Prozesszeit gemÀà dem RR-Algorithmus und dadurch erhÀlt jeder Prozess
Prozesszeit. Zweitens, wenn ein Prozess, der zuvor nur CPU-Ressourcen genutzt hat, interaktiv wird,
bleibt er in der Warteschlange mit der höchsten PrioritÀt, nachdem er einmal die PrioritÀt auf die höchste
erhoben hat.
Betrachten wir ein Beispiel. In diesem Szenario betrachten wir einen Prozess, der verwendet

CPU und zwei interaktive, kurze Prozesse. Auf der linken Seite zeigt die Abbildung das Verhalten ohne Priorisierungserhöhung, wodurch eine langwierige Aufgabe hungert, nachdem zwei interaktive Aufgaben ins System eintreten. Auf der rechten Seite wird alle 50 ms eine PrioritĂ€tserhöhung durchgefĂŒhrt, sodass alle Prozesse garantiert CPU-Zeit erhalten und regelmĂ€Ăig ausgefĂŒhrt werden. 50 ms dienen hier als Beispiel; in der RealitĂ€t ist diese Zahl etwas höher.
Es ist offensichtlich, dass die HinzufĂŒgung von periodischer Erhöhungszeit S zu
der zwangslĂ€ufigen Frage fĂŒhrt: Welcher Wert sollte festgelegt werden? Einer der angesehenen
Systemingenieure, John Ousterhout, nannte derartige GröĂen in Systemen voo-doo
Konstanten, da sie irgendwie schwarze Magie zur korrekten
Einstellung erforderten. Und leider hat S einen Àhnlichen Geschmack. Wenn der Wert zu hoch eingestellt wird,
beginnen langwierige Aufgaben zu hungern. Wenn der Wert jedoch zu niedrig eingestellt wird,
erhalten die interaktiven Aufgaben nicht die erforderliche CPU-Zeit.
Versuch 3: Bessere BerĂŒcksichtigung
Jetzt haben wir ein weiteres Problem, das gelöst werden muss: Wie verhindern wir,
dass unser Scheduler ausgetrickst wird? Verantwortlich fĂŒr diese Möglichkeit sind
die Regeln 4a und 4b, die es einer Aufgabe erlauben, ihre PrioritÀt zu behalten und den Prozessor
bis zum Ende der zugewiesenen Zeit zu entlasten. Wie gehen wir damit um?
Eine Lösung in diesem Fall könnte die bessere Zeiterfassung der CPU auf jedem
MLFQ-Level sein. Anstatt die Zeit zu ignorieren, die ein Programm wÀhrend eines
bestimmten Zeitraums fĂŒr die CPU verwendet hat, sollte diese berechnet und aufgezeichnet werden. Sobald
der Prozess seine zugewiesene Zeit aufgebraucht hat, sollte er auf die nÀchste
PrioritĂ€tsstufe herabgestuft werden. Es spielt jetzt keine Rolle, wie der Prozess seine Zeit nutzt â ob
er stÀndig auf der CPU rechnet oder eine Vielzahl von Aufrufen macht. Daher sollte
Regel 4 wie folgt umgeschrieben werden:
- Rule4: Sobald eine Aufgabe ihre 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 herabgestuft (sie bewegt sich nach unten in der Warteschlange).
Schauen wir uns ein Beispiel an:
»
Die Abbildung zeigt, was passiert, wenn man versucht, den Scheduler auszutricksen, als
wÀre es mit den vorherigen Regeln 4a, 4b auf der linken Seite. Mit der neuen
Regel â das Ergebnis auf der rechten Seite. Vor der Aktivierung des Schutzes konnte jeder Prozess I/O bis zum Abschluss anfordern und
somit die CPU dominieren. Nach der Aktivierung des Schutzes, unabhÀngig vom Verhalten
von I/O, wird er dennoch in den Warteschlangen nach unten rutschen und somit nicht unrechtmĂ€Ăig
auf die CPU-Ressourcen zugreifen können.
Verbesserung von MLFQ und anderen Problemen
Mit den oben genannten Verbesserungen tauchen neue Probleme auf: Eine der Hauptfragen ist, wie man einen solchen Scheduler parametrieren sollte. Das heiĂt, wie viele
Warteschlangen sollten vorhanden sein? Wie groĂ sollte das Zeitfenster fĂŒr die ProgrammausfĂŒhrung innerhalb der Warteschlange sein? Wie
oft 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 sowie anschlieĂende Konfigurationen
des Schedulers können zu einem gewissen befriedigenden Gleichgewicht fĂŒhren.
Zum Beispiel erlauben die meisten Implementierungen von MLFQ, verschiedene
beispielsweise erlauben die meisten MLFQ-Implementierungen die Zuordnung unterschiedlicher
Zeitintervalle fĂŒr verschiedene Warteschlangen. Hochpriorisierte Warteschlangen erhalten in der Regel
kurze Intervalle. Diese Warteschlangen bestehen aus interaktiven Aufgaben,
zwischen denen das Umschalten recht sensibel ist und weniger als 10
ms in Anspruch nehmen sollte. Im Gegensatz dazu bestehen niedrigpriorisierte Warteschlangen aus langen Aufgaben, die CPU
nutzen. Daher sind lÀngere Zeitintervalle hier sehr geeignet (100 ms).

In diesem Beispiel gibt es 2 Aufgaben, die in der HochprioritÀtswarteschlange 20
ms gearbeitet haben, aufgeteilt in Fenster von 10 ms. 40 ms in der mittleren Warteschlange (Fenster von 20 ms) und in der niedrigpriorisierten
Warteschlange wurde das Zeitfenster auf 40 ms gesetzt, wo die Aufgaben ihre Arbeit abgeschlossen haben.
Die Implementierung von MLFQ im Solaris-Betriebssystem ist eine Art von Planer, der zeitlich aufteilt.
Der Planer stellt eine Reihe von Tabellen bereit, die genau definieren, wie sich
die PrioritÀt eines Prozesses im Laufe seiner Lebensdauer Àndern sollte, wie groà das
zugewiesene Fenster sein sollte und wie oft die PrioritĂ€ten der Aufgabe erhöht werden mĂŒssen. Der Administrator
des Systems kann mit dieser Tabelle interagieren und den Planer anweisen, sich entsprechend zu verhalten.
anders. StandardmĂ€Ăig enthĂ€lt diese Tabelle 60 Warteschlangen mit allmĂ€hlicher Erhöhung
der FenstergröĂe von 20 ms (hohe PrioritĂ€t) bis zu mehreren hundert ms (geringe PrioritĂ€t) und
einem Boost aller Aufgaben einmal pro Sekunde.
Andere MLFQ-Planer verwenden keine Tabelle oder spezifischen
Regeln, die in dieser Vorlesung beschrieben sind; stattdessen berechnen sie PrioritÀten mit
mathematischen Formeln. So verwendet beispielsweise der Planer in FreeBSD eine Formel zur
Berechnung der aktuellen PrioritÀt einer Aufgabe, basierend darauf, wie viel Prozess
CPU-Ressourcen verbraucht hat. DarĂŒber hinaus verschlechtert sich die CPU-Auslastung
im Laufe der Zeit, sodass die Erhöhung der PrioritÀt etwas anders erfolgt als oben beschrieben. Dies sind die
sogenannten Decay-Algorithmen. Seit Version 7.1 verwendet FreeBSD den ULE-Planer.
SchlieĂlich haben viele Planer andere Eigenschaften. Zum Beispiel reservieren einige
Planer höhere PrioritĂ€ten fĂŒr das Betriebssystem, sodass kein Benutzerprozess die höchste
PrioritÀt im System erreichen kann. Einige Systeme erlauben es, Hinweise zu geben, um zu helfen
Systeme. Einige Systeme bieten RatschlÀge, um zu helfen
Es ist wichtig, dass der Scheduler die PrioritÀten korrekt festlegt. Zum Beispiel kann mit dem Befehl nice
die PrioritÀt einer Aufgabe erhöht oder verringert werden, um so die Chancen des Programms auf CPU-Zeit zu verbessern oder zu verschlechtern.
die Chancen eines Programms auf CPU-Zeit zu verringern.
MLFQ: Zusammenfassung
Wir haben einen Planungsansatz beschrieben, der MLFQ genannt wird. Der Name basiert auf dem Funktionsprinzip â er verwendet mehrere Warteschlangen und nutzt RĂŒckmeldungen
um die PrioritÀt einer Aufgabe festzulegen.
Die finale Regel sieht wie folgt aus:
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 gestartet.Regel 3
- : Wenn eine Aufgabe in das System kommt, wird sie in die Warteschlange mit der höchsten PrioritĂ€t eingeordnet.MLFQ ist aus folgendem Grund interessant â anstatt dass er im Voraus Kenntnisse ĂŒber die Natur der Aufgabe erfordert, lernt der Algorithmus aus dem vergangenen Verhalten der Aufgabe und passt die
- Rule4: Sobald eine Aufgabe ihre 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 herabgestuft (sie bewegt sich nach unten in der Warteschlange).
- Regel5: Nach einer gewissen Zeit S alle Aufgaben im System in die höchste Warteschlange versetzen.
PrioritĂ€ten entsprechend an. So versucht er, gleichzeitig zwei Ziele zu erreichen â Leistung fĂŒr kleine Aufgaben (SJF, STCF) und die faire AusfĂŒhrung lĂ€ngerer,
CPU-intensiver AuftrĂ€ge. Deshalb setzen viele Systeme, einschlieĂlich BSD und deren Abkömmlinge, darauf.
PrioritĂ€ten entsprechend. So versucht er, auf zwei Hochzeiten gleichzeitig zu tanzen â die Leistung fĂŒr kleinere Aufgaben (SJF, STCF) zu maximieren und gleichzeitig lĂ€ngere,
CPU-intensiven Aufgaben gerecht zu werden. Daher nutzen viele Systeme, einschlieĂlich BSD und deren Ableger,
Solaris, Windows und Mac verwenden eine Form von Algorithmus als Scheduler.
MLFQ als grundlegendes Konzept.
ZusÀtzliche Materialien:
- (Informatik)
Quelle: habr.com
