CPU-Scheduling

Lerne, wie ein Betriebssystem entscheidet, welches Programm als Nächstes auf der CPU läuft. Bewerte Ablaufpläne anhand von Durchlaufzeit und Antwortzeit und vergleiche anschließend FIFO, Shortest Job First, das Round-Robin-Verfahren und Prioritätsscheduling an durchgerechneten Beispielen. Sieh dir an, wie eine mehrstufige Rückkopplungswarteschlange erkennt, welche Aufträge interaktiv sind, wie Lotterie-Scheduling, Stride-Scheduling und die fairen Linux-Scheduler jedem Auftrag einen festgelegten CPU-Anteil geben und wie Scheduler Arbeit auf mehrere CPUs verteilen. Zum Abschluss lernst du die Scheduler von Linux und Windows kennen und wählst eine Strategie für eine vorgegebene Arbeitslast.

MittelEinheit 2 von 9 in Kurs: Betriebssysteme – Prozesse, Speicher, Threads und Dateisysteme

Was du lernst

  1. Erkläre, wann im Lebenszyklus eines Prozesses Schedulingentscheidungen getroffen werden, unterscheide Scheduling mit und ohne Verdrängung und berechne Kennzahlen zum Vergleich von Schedulingstrategien.
    • Erkläre, wann und wie der Scheduler den nächsten Auftrag auswählt
      Ordne den CPU-Scheduler in den Lebenszyklus eines Prozesses ein, unterscheide Scheduling mit und ohne Verdrängung und nenne die Arten von Schedulern, die ein Betriebssystem haben kann.
    • Berechne Durchlaufzeit, Antwortzeit und Wartezeit
      Zeichne ein Zeitablaufdiagramm eines Ablaufplans, berechne Durchlaufzeit, Antwortzeit, Wartezeit, Durchsatz und CPU-Auslastung und erkläre, welchem Ziel jede Kennzahl dient.
  2. Plane eine Reihe von Aufträgen nach den klassischen Strategien ein, berechne die Ergebnisse jeder Strategie und erkläre, warum sich jede für manche Arbeitslasten eignet und für andere nicht.
    • Plane Aufträge mit FIFO und Shortest Job First ein
      Wende FIFO und Shortest Job First ohne Verdrängung an, erkläre den Konvoieffekt und schätze Laufzeiten, die nicht im Voraus bekannt sind.
    • Verdränge laufende Aufträge zugunsten kürzerer Aufträge und überlappe Ein-/Ausgabe mit Berechnung
      Wende Shortest Time-to-Completion First an, erkläre, wann Verdrängung die Durchlaufzeit verbessert, und halte die CPU beschäftigt, indem du andere Aufträge ausführst, während einer auf Ein-/Ausgabe wartet.
    • Nutze das Round-Robin-Verfahren für kurze Antwortzeiten
      Wende das Round-Robin-Verfahren an, erkläre seine Wirkung auf Antwortzeit und Durchlaufzeit und wähle eine sinnvolle Zeitscheibe.
    • Nutze Prioritäten, ohne Aufträge verhungern zu lassen
      Wende Prioritätsscheduling an, lies die verschiedenen in der Praxis verwendeten Prioritätsskalen und verhindere Verhungern und Prioritätsinversion.
  3. Erkläre, wie eine mehrstufige Rückkopplungswarteschlange aus dem Verhalten eines Auftrags lernt, um Shortest Job First anzunähern und zugleich kurze Antwortzeiten für interaktive Aufträge zu bieten, und wie ihre Regeln gegen Verhungern und Manipulation abgestimmt werden.
    • Verfolge Aufträge durch eine mehrstufige Rückkopplungswarteschlange
      Nenne die Grundregeln der mehrstufigen Rückkopplungswarteschlange und verfolge, wie CPU-gebundene, kurze und interaktive Aufträge zwischen ihren Warteschlangen wechseln.
    • Stimme MLFQ so ab, dass Verhungern und Manipulation verhindert werden
      Erkläre die Probleme der grundlegenden MLFQ-Regeln, behebe sie durch Prioritätsanhebungen und bessere Verbrauchserfassung und wähle ihre Parameter.
  4. Erkläre Scheduling mit proportionalen Anteilen, berechne die Anteile bei Lotterie-Scheduling, Stride-Scheduling und den fairen Linux-Schedulern und vergleiche ihre Stärken.
    • Teile die CPU durch Lotterie-Scheduling auf
      Stelle Anteile mit Tickets dar, führe eine Lotterieziehung durch, sage voraus, wie nahe das Lotterie-Scheduling an die Zielanteile herankommt, und nutze Ticketwährung, Ticketübertragung und Ticketinflation.
    • Erziele mit Stride-Scheduling exakte Anteile
      Berechne Schrittweiten und Pass-Werte, verfolge einen Stride-Ablaufplan und vergleiche Stride-Scheduling mit Lotterie-Scheduling.
    • Erkläre die fairen Linux-Scheduler CFS und EEVDF
      Berechne Zeitscheiben und virtuelle Laufzeit beim Completely Fair Scheduler, setze Nice-Werte zu Gewichten in Beziehung und beschreibe, wie EEVDF die nächste Aufgabe auswählt.
  5. Erkläre, wie Caches, Kohärenz und Affinität das Scheduling auf einem Mehrprozessorsystem verändern, und vergleiche Entwürfe mit einer und mehreren Warteschlangen, die die Last auf CPUs ausgleichen.
    • Erkläre, was sich beim Einsatz mehrerer CPUs ändert
      Beschreibe die Hardware eines Mehrprozessorsystems aus Sicht des Schedulers: private Caches, Cache-Kohärenz, die Notwendigkeit von Sperren, Cache-Affinität und unterschiedliche Arten von Kernen.
    • Vergleiche Mehrprozessorscheduling mit einer gemeinsamen Warteschlange und mit mehreren Warteschlangen
      Vergleiche Mehrprozessorscheduler mit einer und mehreren Warteschlangen, erkenne Lastungleichgewichte und behebe sie durch Migration und Work Stealing.
  6. Lerne, wie Linux, Windows und andere Systeme Prioritäten, Rückkopplung und proportionale Aufteilung kombinieren, steuere sie mit Standardwerkzeugen und wähle und bewerte eine Strategie für eine vorgegebene Arbeitslast.
    • Steuere den Linux-Scheduler
      Beschreibe die Schedulingstrategien von Linux und ihre Geschichte und nutze Nice-Werte, Echtzeitstrategien, CPU-Affinität und Kontrollgruppen.
    • Ordne die Scheduler von Windows und anderen Systemen anhand des MLFQ-Prinzips ein
      Berechne Windows-Basisprioritäten, erkläre dynamische Prioritätsanhebungen und ihren Abbau und erkenne dieselben Rückkopplungsideen in anderen Systemen.
    • Wähle und bewerte eine Schedulingstrategie für eine Arbeitslast
      Ordne Schedulingstrategien passenden Arbeitslasten zu, vergleiche sie an einem Beispiel und wähle eine Methode zur Bewertung eines Schedulers.

CPU-Scheduling einfach erklärt

6 Kapitel

1

Entscheide, wer läuft, und miss das Ergebnis

Eine CPU kann jeweils einen Thread ausführen, doch in einem ausgelasteten System können viele Threads bereit sein, sie zu nutzen. Der Scheduler entscheidet bei jeder Gelegenheit, wessen Arbeit vorankommt. Um diese Wahl zu beurteilen, verfolge sowohl die Prozesszustände als auch die Zeit: Ein schneller erster Einsatz, ein früher Abschluss und eine hohe Zahl abgeschlossener Aufträge pro Zeit beschreiben unterschiedliche Erfolge. Ein Zeitablaufdiagramm macht diese Unterschiede sichtbar und liefert dir die Grundlage für den Vergleich von Strategien.

1.1 Vom bereiten zum laufenden Auftrag

Ein CPU-Scheduler wählt den bereiten Prozess oder Thread aus, der als Nächstes auf einer CPU läuft. Die Regel, der er folgt, ist seine Strategie. Der Dispatcher setzt die Auswahl um, indem er die Ausführung zum ausgewählten Auftrag wechselt. Eine andere Strategie kann denselben Wechselmechanismus nutzen.

Verfolge die Zustandswechsel

Ein laufender Auftrag belegt eine CPU. Ein bereiter Auftrag könnte laufen, wartet aber, bis er an der Reihe ist. Ein blockierter Auftrag wartet auf ein Ereignis, etwa den Abschluss eines Festplattenlesevorgangs. Nur bereite Aufträge kommen für die Auswahl infrage.

Angenommen, ein Editor startet einen Festplattenlesevorgang, während ein Compiler bereit ist. Der Editor wechselt von „laufend“ zu „blockiert“, sodass der Compiler laufen kann. Wenn der Lesevorgang endet, macht ein Interrupt den Editor wieder bereit. Er läuft nicht unbedingt sofort: Die Strategie muss zwischen ihm und anderer bereiter Arbeit wählen.

Schedulingentscheidungen fallen, wenn ein Auftrag blockiert, endet, bereit wird oder unterbrochen und wieder in den Zustand „bereit“ versetzt wird. Auch die freiwillige Prozessorabgabe gibt die CPU frei. Verdrängung bedeutet, einem Auftrag die CPU zu entziehen, obwohl er hätte weiterlaufen können; der Auftrag behält seinen gespeicherten Zustand und kann später fortgesetzt werden.

StrategieartWann ein laufender Auftrag die CPU abgibtWirkung eines neu bereiten Auftrags
Ohne VerdrängungEr blockiert, gibt die CPU freiwillig ab oder endetEr wartet auf eine Entscheidungsmöglichkeit
Mit VerdrängungEr kann die CPU auch verlieren, während er noch laufen könnteEr kann den laufenden Auftrag verdrängen

Ein Timerinterrupt ermöglicht dem Kernel, eine Zeitscheibe durchzusetzen, selbst wenn ein Programm eine Schleife ausführt, ohne die CPU abzugeben. Auch eine abgeschlossene Ein-/Ausgabe kann eine Verdrängung auslösen, indem sie eine stärker bevorzugte Aufgabe bereit macht. Linux, Windows und macOS verwenden Scheduling mit Verdrängung.

Arbeit verläuft in Phasen

Programme wechseln zwischen CPU-Bursts, in denen sie rechnen, und Zeiträumen, in denen sie auf Ein-/Ausgabe warten. Ein CPU-gebundenes Programm wie ein Kodierer hat lange CPU-Bursts. Ein ein-/ausgabegebundenes Programm wie ein Editor rechnet häufig kurz und wartet dann. Wenn ein Editor nach einem Tastendruck schnell bedient wird, kann das die Reaktionsfähigkeit verbessern, ohne dass er insgesamt viel CPU-Zeit erhält.

Der Dispatcher sichert den Zustand der alten Aufgabe, stellt die Register der ausgewählten Aufgabe wieder her und setzt ihre Befehlsfolge im Benutzermodus fort. Die Dispatch-Latenz ist die Zeit für die Übergabe der Ausführung. Ein Wechsel beeinträchtigt auch Caches und den Translation Lookaside Buffer, kurz TLB, der Adressübersetzungen zwischenspeichert. Die nächste Aufgabe muss sie möglicherweise neu füllen, sodass die Zeit zum Sichern der Register nur einen Teil des Aufwands ausmacht.

Drei Zeitskalen des Schedulings

Der langfristige Scheduler lässt eingereichte Aufträge zu und steuert, wie viele sich im System befinden. Der mittelfristige Scheduler kann ganze Prozesse suspendieren, indem er sie aus dem Speicher auslagert und später wiederherstellt. Der kurzfristige Scheduler wählt die nächste bereite Aufgabe und wird häufig tätig. Allzwecksysteme stützen sich hauptsächlich auf diese letzte Aufgabe; Stapelverarbeitungssysteme und Cluster können auch die Zulassung ausdrücklich steuern.

Beginne einen Strategievergleich mit einfachen Aufträgen, die nur die CPU nutzen und deren Längen bekannt sind. Verändere dann jeweils ein Merkmal: Ungleiche Längen zeigen die Verzögerungen bei FIFO, spätere Ankünfte zeigen die Grenzen von Verfahren ohne Verdrängung, Ein-/Ausgabe bietet Möglichkeiten zur Überlappung von Arbeit und unbekannte Längen erfordern Vorhersage oder Rückkopplung.

Wichtige Erkenntnisse

  • Nur bereite Aufträge können zur Ausführung ausgewählt werden.
  • Die Schedulingstrategie trifft die Auswahl; der Dispatcher führt den Wechsel aus.
  • Bei der Verdrängung bleibt eine Aufgabe erhalten, sodass sie fortgesetzt werden kann.
  • Timer- und Geräteinterrupts können Gelegenheiten für Schedulingentscheidungen schaffen.
  • Häufige Wechsel kosten sowohl Dispatch-Zeit als auch Cache-Lokalität.
  • Zulassung, Auslagerung und CPU-Auswahl wirken auf unterschiedlichen Zeitskalen.

1.2 Lies Zeiten aus einem Ablaufplan ab

Ein Ablaufplan zeigt dir, wann Aufträge laufen. Eine Kennzahl zeigt dir, welcher Teil dieses Ablaufplans wichtig ist. Halte für jeden Auftrag die Ankunft, die erste Ausführung und den Abschluss fest, bevor du Mittelwerte berechnest.

Unterscheide die drei Zeiten

Die Durchlaufzeit misst den gesamten Zeitraum von der Ankunft bis zum Abschluss. Die Antwortzeit misst die Verzögerung bis zur ersten Ausführung. Die Wartezeit summiert alle Zeiträume, in denen ein Auftrag bereit ist, aber nicht läuft.

TDurchlauf=TAbschluss−TAnkunft TAntwort=Terste Ausfu¨hrung−TAnkunft

Bei einem Auftrag, der nur die CPU nutzt, entspricht die Durchlaufzeit der Wartezeit plus CPU-Laufzeit. Bei Ein-/Ausgabe gehört auch die blockierte Zeit zur Durchlaufzeit. Würdest du nur die CPU-Zeit abziehen, wäre die berechnete Wartezeit zu groß. Die Antwortzeit wird hier anhand der ersten Ausführung definiert; ein Dienst für Benutzer kann die Zeit bis zu seiner ersten Ausgabe gesondert messen.

Rechne ein FIFO-Zeitablaufdiagramm durch

A kommt bei 0 ms an und benötigt 8 ms CPU-Zeit. B kommt bei 1 ms an und benötigt 4 ms. C kommt bei 2 ms an und benötigt 2 ms. Ohne Wechselaufwand ergibt FIFO:

  • A: 0–8 ms.
  • B: 8–12 ms.
  • C: 12–14 ms.
AuftragDurchlaufzeitAntwortzeitWartezeit
A8−0=8 ms0−0=0 ms0 ms
B12−1=11 ms8−1=7 ms7 ms
C14−2=12 ms12−2=10 ms10 ms

Die mittlere Durchlaufzeit beträgt 8+11+123=313≈10,33 ms. Die mittlere Antwortzeit und die mittlere Wartezeit betragen beide 0+7+103=173≈5,67 ms. Sie stimmen überein, weil jeder Auftrag einmal ohne Unterbrechung läuft. Bei Verdrängung kann ein Auftrag nach seinem ersten Einsatz erneut warten, sodass die Wartezeit die Antwortzeit übersteigen kann.

Miss die gesamte Arbeitslast

Der Durchsatz zählt die abgeschlossenen Aufträge pro verstrichener Zeiteinheit. Der Ablaufplan schließt drei Aufträge in 14 ms ab, etwa 214,29 Aufträge/s. Die CPU-Auslastung ist die beschäftigte CPU-Zeit geteilt durch die verstrichene Zeit; hier beträgt sie 100 %, weil die CPU nie untätig ist. Gib das Messintervall an: Eine zusätzliche Leerlaufzeit nach dem Abschluss würde beide Werte verändern.

Hohe Auslastung kann trotzdem mit langen Wartezeiten einhergehen. Sie muss auch nicht bedeuten, dass die gesamte beschäftigte Zeit für nützliche Anwendungsarbeit verwendet wird: Reale Messungen können Wechsel und andere Kernelarbeit als beschäftigte Zeit zählen. Gib an, ob eine Aufwandsberechnung beschäftigte Zeit oder nützliche Arbeit misst.

Wähle, was du optimieren möchtest

Bei Stapelverarbeitung ist oft die mittlere Durchlaufzeit wichtig. Bei interaktiver Arbeit ist eine schnelle Antwort wichtig. Gemeinsam genutzte Dienste benötigen neben Durchsatz auch fairen Zugang. Verhungern bedeutet, dass ein ausführbarer Auftrag unbegrenzt wartet; ein guter Mittelwert allein kann also keine faire Behandlung belegen.

Untersuche einzelne Verzögerungen und den oberen Randbereich der Verteilung. Die Antwortzeit am 99. Perzentil beschreibt die Verzögerung, die ungefähr 99 % der Beobachtungen nicht überschreiten; einzelne starke Verzögerungen können in einem niedrigen Mittelwert verschwinden. Ziehe immer die Ankunftszeit des jeweiligen Auftrags ab und zähle seine Laufzeiten zur Bedienzeit, niemals zur Wartezeit.

Wichtige Erkenntnisse

  • Die Durchlaufzeit endet beim Abschluss, die Antwortzeit bei der ersten Ausführung.
  • Die Wartezeit zählt bereite Zeiträume und schließt blockierte Zeiträume aus.
  • Ziehe vor der Mittelwertbildung die Ankunftszeit jedes Auftrags ab.
  • Durchsatz und Auslastung hängen vom Beobachtungsintervall ab.
  • Untersuche neben Mittelwerten auch Verzögerungen im oberen Randbereich und Verhungern.
2

Verfolge die klassischen Schedulingstrategien

Dieselben bereiten Aufträge können je nach Strategie in sehr unterschiedlicher Reihenfolge enden. FIFO folgt der Ankunft, Strategien für kürzeste Aufträge bevorzugen geringen CPU-Bedarf, das Round-Robin-Verfahren wechselt die Aufträge ab und Prioritätsscheduling folgt einer Rangfolge. Erstelle das Zeitablaufdiagramm anhand der Regel an jedem Entscheidungspunkt und berechne dann das Ergebnis. Spätere Ankünfte, blockierte Aufträge und Wechselaufwand zeigen Abwägungen, die eine einzelne Reihenfolge von Aufträgen nicht zeigen kann. Bei der Verfolgung von Hand bleibt der Wechselaufwand unberücksichtigt, sofern nichts anderes angegeben ist.

2.1 FIFO und der kürzeste bereite CPU-Burst

FIFO, auch FCFS genannt, führt bereite Aufträge in Ankunftsreihenfolge aus. Es arbeitet ohne Verdrängung: Ein später ankommender Auftrag kann einen laufenden CPU-Burst nicht unterbrechen. In Beispielen mit Aufträgen, die nur die CPU nutzen, läuft jeder ausgewählte Auftrag bis zum Ende.

Erkenne den Konvoieffekt

A, B und C kommen gleichzeitig an. A benötigt 60 ms; B und C benötigen jeweils 6 ms. Steht A an erster Stelle, führt FIFO A 0–60, B 60–66 und C 66–72 aus. Die Durchlaufzeiten sind 60, 66 und 72 ms, im Mittel 66 ms. Die kurzen Aufträge verbringen den größten Teil ihrer Zeit mit Warten hinter A. Das ist der Konvoieffekt.

Shortest Job First (SJF) wählt unter den bereiten Aufträgen den kürzesten nächsten CPU-Burst und verdrängt ihn nicht. Bei denselben Ankünften führt es B 0–6, C 6–12 und dann A 12–72 aus. Die mittlere Durchlaufzeit beträgt nun 6+12+723=30 ms. Die gesamte CPU-Arbeit beträgt weiterhin 72 ms; die Verbesserung entsteht dadurch, dass kurze Aufträge früher enden.

Warum hilft das? Läuft ein langer CPU-Burst unmittelbar vor einem kurzen, warten beide Aufträge auf die gesamte vorherige Arbeit. Vertauschst du nur diese beiden, verkürzt sich die Verzögerung des kurzen Auftrags um die Länge des langen CPU-Bursts, während die Verzögerung des langen Auftrags nur um die Länge des kurzen CPU-Bursts zunimmt. Wiederholtes Vertauschen ordnet die CPU-Bursts aufsteigend. Wenn alle Aufträge gleichzeitig ankommen und ihre Längen bekannt sind, minimiert SJF die mittlere Durchlaufzeit und Wartezeit; in diesem Fall ohne Verdrängung und ohne Ein-/Ausgabe entspricht auch die Antwortzeit bis zur ersten Ausführung der Wartezeit.

Beschränke die Auswahl auf bereite Aufträge

Nun kommt A bei 0 ms an, während B und C bei 10 ms ankommen. Bei 0 ms ist A die einzige Wahl. SJF ohne Verdrängung führt A 0–60, B 60–66 und C 66–72 aus. Die Durchlaufzeiten sind 60, 56 und 62 ms, im Mittel etwa 59,33 ms. SJF kann weder einen zukünftigen Auftrag berücksichtigen noch einen bereits gestarteten CPU-Burst unterbrechen.

StrategieVerwendete InformationHauptschwäche
FIFOAnkunftsreihenfolgeKurze Arbeit kann hinter langer Arbeit warten
SJFVorhergesagte Länge des nächsten CPU-BurstsLange Arbeit kann durch wiederholt ankommende kurze Arbeit aufgeschoben werden

FIFO vermeidet Verhungern, wenn vorausgehende Aufträge die CPU irgendwann freigeben. Unter SJF kann ein langer wartender Auftrag verhungern, wenn ständig kurze Arbeit ankommt.

Sage einen CPU-Burst vorher

Der nächste CPU-Burst ist meist unbekannt. Exponentielle Glättung kombiniert den zuletzt gemessenen CPU-Burst mit der vorherigen Vorhersage:

τn+1=αtn+(1−α)τn

Dabei ist tn der gemessene CPU-Burst, τn die vorherige Vorhersage und α ein Gewicht zwischen 0 und 1. Beginnst du mit 10 ms und verwendest α=0,5, ergeben gemessene 6 ms eine Vorhersage von 8 ms. Anschließende 4 ms ergeben 6 ms; weitere 6 ms belassen die Vorhersage bei 6 ms. Bei Gewicht null haben Messungen keinen Einfluss; bei Gewicht eins zählt nur die neueste Messung. Vorhergesagt wird die Länge des CPU-Bursts, nicht die Größe der Programmdatei oder die Zeilenanzahl.

Wichtige Erkenntnisse

  • FIFO nutzt die Ankunftsreihenfolge und kann einen Konvoi erzeugen.
  • SJF wählt den kürzesten bereits bereiten CPU-Burst.
  • Das Optimum von SJF für mittlere Zeiten setzt die entsprechenden Annahmen über die Arbeitslast voraus.
  • Später ankommende Aufträge können SJF ohne Verdrängung nicht unterbrechen.
  • Exponentielle Glättung gleicht jüngste Messungen und frühere Vorhersagen gegeneinander ab.
  • Ein Strom kurzer Aufträge kann unter SJF einen langen Auftrag verhungern lassen.

2.2 Unterbrich einen langen Auftrag und überlappe Ein-/Ausgabe mit Berechnung

Shortest Time-to-Completion First (STCF), auch Shortest Remaining Time First oder SRTF genannt, ist SJF mit Verdrängung. Vergleiche bei einer Ankunft oder einem Abschluss die CPU-Zeit, die jeder bereite Auftrag noch benötigt. Ein neu ankommender Auftrag unterbricht den laufenden, wenn er weniger Zeit benötigt, als dem laufenden noch bleibt.

Vergleiche die Restlaufzeit

A benötigt 60 ms und kommt bei 0 ms an. B und C benötigen jeweils 6 ms und kommen bei 10 ms an. A läuft 10 ms, sodass 50 ms verbleiben. Bei 10 ms gewinnt B, weil 6 ms weniger als 50 ms sind; C hat dieselbe Länge, daher entscheiden die Ankunftsreihenfolge und dann der Name über den Gleichstand.

Das Zeitablaufdiagramm zeigt A 0–10, B 10–16, C 16–22, A 22–72. Die Durchlaufzeiten sind für A 72 ms, für B 6 ms und für C 12 ms, im Mittel 30 ms. Die Antwortzeiten sind 0, 0 und 6 ms, im Mittel 2 ms. SJF ohne Verdrängung ergibt bei diesen Ankünften im Mittel etwa 59,33 ms Durchlaufzeit und 35,33 ms Antwortzeit.

Ziehe immer die bereits erhaltene Bedienzeit ab. Es wäre falsch, einen neuen CPU-Burst von 12 ms mit den ursprünglichen 60 ms von A zu vergleichen, wenn A nur noch 5 ms vor sich hätte. STCF würde A zuerst abschließen. Bei bekannten Längen für Aufträge ohne Ein-/Ausgabe und ohne Wechselaufwand minimiert STCF die mittlere Durchlaufzeit bei beliebigen Ankünften. Lange Aufträge können bei einem anhaltenden Strom kürzerer Arbeit trotzdem verhungern.

Wenn alle Aufträge ohne Ein-/Ausgabe gleichzeitig ankommen, ergeben SJF und STCF dieselbe Reihenfolge. Der laufende kürzeste Auftrag wird nur noch kürzer, sodass kein wartender Auftrag zum Grund für seine Verdrängung wird.

Nutze die blockierte Zeit eines anderen Auftrags

Ein blockierter Auftrag kann die CPU nicht nutzen. Seine Wartezeit auf Ein-/Ausgabe bietet Gelegenheit, andere bereite Arbeit auszuführen, selbst bei einer Strategie ohne Verdrängung. Verdrängung wird wieder wichtig, wenn eine abgeschlossene Ein-/Ausgabe einen kurzen CPU-Burst bereit macht, während ein anderer Auftrag läuft.

Betrachte A mit fünf CPU-Bursts von je 10 ms und einem Festplattenlesevorgang von 10 ms nach jedem seiner ersten vier CPU-Bursts. B benötigt einen CPU-Burst von 50 ms. Beide kommen bei 0 ms an. Bleibt die CPU während der Lesevorgänge von A untätig und verzögert B, bis A endet, schließt A bei 90 ms und B bei 140 ms ab.

Behandle jeden wieder bereiten CPU-Burst von A als kurze bereite Arbeit:

  • A läuft 0–10; sein Lesevorgang belegt 10–20, während B läuft.
  • A kehrt für 20–30 zurück; B hat noch 40 ms vor sich, daher gewinnen die 10 ms von A.
  • B läuft während des nächsten Lesevorgangs 30–40. Der Wechsel wiederholt sich.
  • Der letzte CPU-Burst von A läuft 80–90; B beendet seine letzten 10 ms während 90–100.

A endet weiterhin bei 90 ms, B aber bei 100 ms. Die CPU führt in 100 ms verstrichener Zeit 100 ms Arbeit aus. Festplatten- und CPU-Aktivität überlappen; die CPU führt A nicht aus, während A blockiert ist. Ein Geräteinterrupt markiert A nach jedem Lesevorgang als bereit. Danach vergleicht STCF den neuen CPU-Burst von A mit der verbleibenden Arbeit von B.

Wichtige Erkenntnisse

  • STCF vergleicht an Entscheidungspunkten den verbleibenden CPU-Bedarf.
  • Durch Verdrängung können später ankommende kurze Aufträge viel früher enden.
  • Bei gleichzeitiger Ankunft von Aufträgen ohne Ein-/Ausgabe stimmen SJF und STCF überein.
  • Ein blockierter Auftrag gibt die CPU frei, sodass andere Arbeit seine Ein-/Ausgabe überlappen kann.

2.3 Wechsle Aufträge mit dem Round-Robin-Verfahren ab

Das Round-Robin-Verfahren (RR) verwaltet eine FIFO-Bereitwarteschlange und gibt dem Auftrag an ihrer Spitze höchstens ein Zeitquantum, also eine Zeitscheibe. Ein Auftrag, der endet oder blockiert, gibt die CPU vorzeitig ab. Ein Auftrag, der beim Ablauf seiner Zeitscheibe noch bereit ist, wandert ans Ende.

Verfolge die Einsätze, bevor du Zeiten berechnest

A, B und C kommen bei 0 ms an und benötigen jeweils 9 ms. Mit einem Zeitquantum von 3 ms führt RR aus:

  • Erste Runde: A 0–3, B 3–6, C 6–9.
  • Zweite Runde: A 9–12, B 12–15, C 15–18.
  • Letzte Runde: A 18–21, B 21–24, C 24–27.

Die ersten Ausführungen liegen bei 0, 3 und 6 ms, die mittlere Antwortzeit beträgt also 3 ms. Die Abschlüsse liegen bei 21, 24 und 27 ms, die mittlere Durchlaufzeit beträgt also 24 ms. FIFO ergibt eine mittlere Antwortzeit von 9 ms und eine mittlere Durchlaufzeit von 18 ms. Hier startet RR alle zügig, verschiebt aber den ersten abgeschlossenen Auftrag bis 21 ms.

RR teilt den CPU-Zugriff auf, während Aufträge konkurrieren; es gleicht die Abschlusszeitpunkte nicht an. Ein kurzer Auftrag kann bei seinem ersten Einsatz enden. Bei einer festen Anzahl von n bereiten Aufträgen und einem Zeitquantum q beträgt die Wartezeit zwischen zwei Einsätzen ohne Wechselaufwand höchstens (n−1)q. Fortlaufende Ankünfte, andere Prioritätsklassen und Einschränkungen, auf welchen CPUs Aufträge laufen dürfen, verändern die Voraussetzungen dieser Schranke.

Behandle Ankünfte am Ende einer Zeitscheibe

Verwende die Ankunftsreihenfolge und bei Gleichständen die alphabetische Reihenfolge. Ein Auftrag, der genau beim Ablauf einer Zeitscheibe ankommt, wird vor dem verdrängten Auftrag eingereiht. Wenn A bei 0 ms ankommt und 8 ms benötigt, B bei 1 ms ankommt und 4 ms benötigt und C bei 2 ms ankommt und 2 ms benötigt, ergibt ein Zeitquantum von 2 ms: A 0–2, B 2–4, C 4–6, A 6–8, B 8–10, A 10–14.

Der letzte Zeitraum von A enthält zwei aufeinanderfolgende Einsätze ohne Konkurrenten. Die Antwortzeiten sind 0, 1 und 2 ms; die Durchlaufzeiten sind 14, 9 und 4 ms. Ihre Mittelwerte betragen 1 ms und 9 ms. Kehrt ein blockierter Auftrag beim einfachen RR zurück, wird er für einen neuen Einsatz eingereiht; er reserviert während der Blockierung keine ungenutzte CPU-Zeit.

Stimme das Zeitquantum auf seinen Aufwand ab

Ein sehr großes Zeitquantum lässt RR sich für CPU-Bursts, die kürzer als dieses Quantum sind, wie FIFO verhalten. Ein winziges Zeitquantum erzeugt viele Ausführungsübergaben und wiederholte Beeinträchtigungen der Caches. In einer einfachen timerbasierten Umsetzung entspricht das Zeitquantum einer ganzen Anzahl von Timerperioden.

Bei einem Wechselaufwand s nach jeder nützlichen Zeitscheibe der Länge q beträgt der ungefähre Aufwandsanteil sq+s. Ein Wechsel von 0,1 ms kostet bei einer Zeitscheibe von 1 ms etwa 9,1 %, bei einer Zeitscheibe von 10 ms aber etwa 0,99 %. Längere Zeitscheiben amortisieren den Wechselaufwand, indem sie ihn auf mehr nützliche Arbeit verteilen.

Eine verbreitete Faustregel zur Größenwahl besagt, dass die meisten CPU-Bursts, zum Beispiel etwa 80 %, innerhalb einer Zeitscheibe enden sollten. Die richtige Wahl hängt von den gemessenen CPU-Burst-Längen und den Antwortverzögerungen ab, die die Arbeitslast verträgt. Zähle Wechsel zwischen Aufgaben getrennt von Timerereignissen, bei denen lediglich dieselbe einzige bereite Aufgabe weiterläuft.

Wichtige Erkenntnisse

  • RR reiht einen noch nicht abgeschlossenen bereiten Auftrag nach seinem Zeitquantum erneut ein.
  • Die Antwortzeit kann sich verbessern, während die mittlere Durchlaufzeit wächst.
  • Regeln für Ankünfte am Ende einer Zeitscheibe bestimmen die Reihenfolge in der Warteschlange.
  • Ein kurzes Zeitquantum erhöht den Kontextwechselaufwand.
  • Längere Zeitscheiben amortisieren Dispatch- und Cache-Aufwand.

2.4 Prioritäten, Alterung und Abhängigkeiten durch Sperren

Ein Prioritätsscheduler führt den bereiten Auftrag mit der höchsten Priorität aus. Aufträge gleicher Priorität können FIFO oder dem Round-Robin-Verfahren folgen. In einer Variante mit Verdrängung erhält ein neu bereiter Auftrag mit höherer Priorität sofort die CPU; in einer Variante ohne Verdrängung wartet er, bis der laufende Auftrag sie freigibt.

Lies die Richtung der Skala

Prioritätszahlen haben keine einheitliche Richtung. Verwende in den hiesigen Lehrbuchbeispielen kleinere Zahlen für höhere Priorität. Linux-Nice-Werte folgen derselben Richtung, aber Windows-Prioritätsstufen und Linux-Echtzeitprioritäten verwenden größere Zahlen für höhere Priorität.

A, B und C kommen bei 0 ms mit CPU-Bursts von 4, 3 und 5 ms und den Prioritäten 2, 1 und 3 an. Prioritätsscheduling ohne Verdrängung führt B 0–3, A 3–7 und C 7–12 aus. Ihre Wartezeiten sind 0, 3 und 7 ms, im Mittel etwa 3,33 ms; die Durchlaufzeiten sind 3, 7 und 12 ms, im Mittel etwa 7,33 ms.

Eine interne Priorität entsteht aus gemessenem Verhalten wie CPU-Nutzung oder Wartezeiten auf Ein-/Ausgabe. SJF leitet den Rang aus der vorhergesagten Burst-Länge ab. Eine externe Priorität stammt von einer Person, etwa einem Administrator, der eine Sicherung als weniger dringend einstuft. Keine der beiden Varianten stellt sicher, dass Arbeit mit niedriger Priorität bei einem ständigen Zustrom höher priorisierter Arbeit Zeit erhält.

Erhöhe die Priorität beim Warten

Alterung erhöht schrittweise die Priorität eines wartenden Auftrags. Verbessert sich der Rang alle 100 ms um eins, erreicht ein Auftrag, der bei Priorität 20 beginnt, nach 2 s Wartezeit im Zustand „bereit“ die höchste Priorität 0. Der höhere Rang bringt ihn in Konkurrenz mit bevorzugter Arbeit; Regeln für Gleichstände bestimmen die Reihenfolge von Aufträgen auf demselben Rang.

Verhungern ist ausbleibender Fortschritt, weil wiederholt andere Arbeit ausgewählt wird. Alterung wirkt dem entgegen, indem sie den Rang im Laufe der Zeit verändert. Sie dient einem anderen Zweck als die Vorhersage der Burst-Länge: Ein lange wartender langer Auftrag kann einen Einsatz verdienen, obwohl sein CPU-Burst lang bleibt.

Verfolge die Abhängigkeit bei Prioritätsinversion

Ein Auftrag H mit hoher Priorität kann an einer Sperre blockiert sein, die der Auftrag L mit niedriger Priorität hält. Ein Auftrag M mit mittlerer Priorität kann L verdrängen. Nun kann H nicht fortfahren, obwohl M eine niedrigere Priorität als H hat: L muss erst laufen, um die Sperre freizugeben. Das ist eine Prioritätsinversion.

Bei der Prioritätsvererbung erbt L vorübergehend die Priorität von H, solange L die Sperre hält, die H benötigt. M kann L nicht mehr von der CPU fernhalten. L läuft, gibt die Sperre frei und verliert die geerbte Priorität; H wird bereit und kann laufen.

ProblemUrsacheReaktion des Schedulers
VerhungernAndere bereite Arbeit hat immer wieder Vorrang vor einem AuftragAlterung erhöht seinen Rang mit der Wartezeit
PrioritätsinversionBevorzugte Arbeit wartet auf einen Sperrinhaber mit niedrigerem RangVererbung hebt den Inhaber für die Dauer der Abhängigkeit an

Eine Erhöhung der Priorität von H selbst gibt die Sperre nicht frei: H bleibt blockiert. Entscheidend ist, den Thread auszuführen, der die Abhängigkeit auflösen kann. 1997 trat bei Mars Pathfinder ein Problem durch Prioritätsinversion auf, das durch Einschalten der Prioritätsvererbung behoben wurde.

Wichtige Erkenntnisse

  • Prüfe, welche Richtung eine höhere Priorität bedeutet.
  • Alterung hebt wartende Aufträge an, um Verhungern entgegenzuwirken.
  • Eine blockierte Aufgabe mit hoher Priorität kann erst laufen, wenn ihre Abhängigkeit aufgelöst ist.
  • Prioritätsvererbung hebt den Sperrinhaber vorübergehend an.
3

Lerne das Verhalten eines Auftrags mit Rückkopplungswarteschlangen kennen

Der nächste CPU-Burst ist selten im Voraus bekannt. Eine mehrstufige Rückkopplungswarteschlange lernt aus der CPU-Nutzung: Neue Arbeit erhält früh eine Chance, während anhaltende Berechnungen in Warteschlangen mit weniger dringlicher Bedienung absteigen. Wenn du sowohl die Warteschlangenzugehörigkeit als auch das verbrauchte Kontingent verfolgst, erklärt sich dieses Verhalten. Regelmäßige Anhebungen und sorgfältige Verbrauchserfassung begegnen dann den beiden Hauptproblemen: zu lange wartender Arbeit und Arbeit, die die CPU strategisch abgibt, um ihren Rang zu halten.

3.1 Verfolge Aufträge durch Rückkopplungswarteschlangen

Eine mehrstufige Rückkopplungswarteschlange (MLFQ) kombiniert Prioritäten mit dem Round-Robin-Verfahren. Ihr Ziel ist es, die Bedienung kurzer Aufträge anzunähern und interaktive Arbeit reaktionsfähig zu halten, ohne dass ihr die zukünftige Laufzeit jedes Auftrags mitgeteilt wird. Die jüngste CPU-Nutzung liefert die Rückkopplung.

Wende die Warteschlangenregeln an

Jeder bereite Auftrag gehört zu einer Prioritätswarteschlange. Die grundlegende Variante mit Verbrauchserfassung folgt vier Regeln:

  1. Wähle die Warteschlange mit der höchsten Priorität, die bereite Arbeit enthält.
  2. Wechsle innerhalb dieser Warteschlange Aufträge gleicher Priorität im Round-Robin-Verfahren ab.
  3. Setze einen neuen Auftrag in die oberste Warteschlange.
  4. Stufe einen Auftrag herab, wenn er sein CPU-Zeitkontingent auf seiner aktuellen Stufe verbraucht. Erfasse dabei die Nutzung über alle Einsätze und Ein-/Ausgabeunterbrechungen hinweg.

Ein Zeitquantum begrenzt einen Einsatz. Ein Kontingent begrenzt die gesamte Bedienzeit auf einer Prioritätsstufe. Eine Stufe kann vor der Herabstufung mehrere Zeitquanten erlauben. Auf der untersten Stufe bleibt ein Auftrag bei einer Herabstufung in der untersten Warteschlange.

So erhält ein neuer Auftrag die Chance, schnell zu enden. Ein Auftrag, der wiederholt CPU-Zeit verbraucht, zeigt einen längeren Bedarf und steigt ab. Ein kurzer CPU-Burst, der blockiert, verbraucht wenig Kontingent, sodass interaktive Aufträge tendenziell länger oben bleiben.

Verfolge einen langen und einen neu ankommenden Auftrag

Verwende die Warteschlangen Q2, Q1 und Q0 mit Q2 als höchster Stufe, Zeitquanten von 10 ms und Kontingenten von 10 ms auf jeder Stufe sowie ohne Anhebung während dieses Ablaufs. A benötigt 200 ms und kommt bei 0 ms an. Er läuft in Q2 von 0–10, in Q1 von 10–20 und danach in Q0.

Bei 100 ms hat A 100 ms CPU-Zeit erhalten. B kommt an und benötigt 20 ms. B gelangt in Q2, verdrängt A und läuft dann 100–110 in Q2. Er hat das Kontingent dieser Stufe verbraucht und fällt auf Q1. Q1 hat Vorrang vor Q0, wo sich A befindet. Daher läuft B 110–120 und endet. A läuft bei 120 weiter und schließt seine verbleibenden 100 ms bei 220 ms ab. Die Durchlaufzeit von B beträgt 20 ms, obwohl er nach einem viel längeren Auftrag ankommt.

Verfolge die verbleibende Arbeit von A, während B läuft: Sie bleibt bei 100 ms. Während B bedient wird, vergeht Zeit, aber A erhält in dieser Zeit keine CPU-Bedienung.

Unterscheide Warten und CPU-Verbrauch

Ein Editor, der 1 ms läuft und auf Eingaben wartet, verbraucht ein Kontingent von 10 ms über zehn solche CPU-Bursts. Blockierte Zeit wird nicht auf das CPU-Zeitkontingent angerechnet. Bei strenger Verbrauchserfassung summieren sich diese kurzen CPU-Bursts dennoch, sodass der Editor schließlich absteigt, sofern er nicht zuvor durch eine Prioritätsanhebung zurückgesetzt wird.

Eine frühe MLFQ-Regel stufte nur Aufträge herab, die ein ganzes ununterbrochenes Zeitquantum verbrauchten. Ein Auftrag, der die CPU kurz vor Ablauf abgab, behielt seine Priorität. Diese Regel machte interaktive Arbeit reaktionsfähig, erlaubte aber auch gezielte Manipulation. Die kumulative Erfassung der CPU-Nutzung schließt diese Lücke.

Niedrigere Warteschlangen laufen immer dann, wenn alle höheren Warteschlangen keine bereite Arbeit enthalten. Ein blockierter Auftrag mit höherer Priorität hindert Aufträge mit niedrigerer Priorität nicht daran, die CPU zu nutzen. Bei anhaltendem Bedarf mit hoher Priorität benötigt niedriger priorisierte Arbeit einen zusätzlichen Schutz vor Verhungern, den regelmäßige Anhebungen bieten.

Wichtige Erkenntnisse

  • MLFQ lernt aus der beobachteten CPU-Nutzung, ohne zukünftige CPU-Burst-Längen zu kennen.
  • Die höchste Warteschlange mit bereiten Aufträgen gewinnt; Aufträge gleicher Priorität wechseln sich ab.
  • Neue Aufträge beginnen ganz oben.
  • Zeitquantum und Kontingent steuern unterschiedliche Teile des Ablaufplans.
  • Die kumulative CPU-Verbrauchserfassung berücksichtigt die Bedienzeit, bevor ein Auftrag blockiert.

3.2 Verhindere Verhungern und strategische Prozessorabgabe

Rückkopplung trennt Aufträge auf nützliche Weise, doch das frühere Verhalten eines Auftrags kann aufhören, seinen aktuellen Bedarf abzubilden. Eine lange Berechnung kann später interaktiv werden. Zugleich kann ein Auftrag in der untersten Warteschlange unbegrenzt warten, wenn höhere Warteschlangen beschäftigt bleiben.

Beurteile jeden Auftrag regelmäßig neu

Eine Prioritätsanhebung verschiebt nach einer Zeitspanne S alle Aufträge zurück in die oberste Warteschlange. Sie ermöglicht wartenden Aufträgen, sich die oberste Warteschlange zu teilen, und lässt den Scheduler verändertes Verhalten neu erlernen. Ein angehobener CPU-gebundener Auftrag verbraucht später sein Kontingent und steigt wieder ab.

Betrachte die frühen MLFQ-Regeln: Zwei interaktive Aufträge geben die CPU immer vor Ablauf einer vollständigen Zeitscheibe von 10 ms ab und halten Q2 zusammen beschäftigt. Ein CPU-gebundener Auftrag wartet in Q0. Ohne Anhebungen erhält er keine Bedienung. In einem sich wiederholenden Ablaufplan, in dem eine Anhebung alle 100 ms ihm einen Einsatz von 10 ms auf der höchsten Stufe gibt, bevor er herabgestuft wird und höher priorisierte Arbeit den Rest ausfüllt, erhält er 10 % der CPU. Dieser Prozentsatz ergibt sich aus diesem Ablauf; eine Anhebung weist keinen allgemeinen festen Anteil zu.

Ein langes Intervall zwischen Anhebungen führt zu langen Wartezeiten zwischen Einsatzmöglichkeiten. Ein sehr kurzes Intervall setzt CPU-gebundene Arbeit wiederholt zurück und schwächt den Vorteil interaktiver Arbeit. Entwürfe haben Intervalle um eine Sekunde verwendet, doch die Wahl hängt vom Verhalten der Arbeitslast und den Zielen für die Antwortzeit ab.

Erfasse den Verbrauch über Prozessorabgaben hinweg

Ein separates Problem ist die Manipulation. Nach der frühen Regel für vollständige Zeitscheiben kann ein Programm 9 ms laufen, eine Ein-/Ausgabe von 1 ms anfordern und dies wiederholen. Es verbraucht nie eine ganze Zeitscheibe von 10 ms am Stück und behält daher die höchste Priorität, während es fast die gesamte verfügbare CPU-Zeit verbraucht.

Bei einem kumulativen Kontingent von 10 ms verbraucht der erste CPU-Burst 9 ms und lässt 1 ms übrig. Nach der Ein-/Ausgabe erschöpft eine weitere Millisekunde das Kontingent und der Auftrag wird während seines zweiten CPU-Bursts herabgestuft. Eine Ein-/Ausgabeanfrage ändert den Zustand; sie löscht nicht die bereits erhaltene Bedienzeit. Die Erfassungsregel verhindert diese Taktik auch ohne Anhebung.

MechanismusWas er ändertWelches Problem er behandelt
KontingenterfassungAddiert die CPU-Nutzung über Einsätze hinwegStrategische Prozessorabgabe vor Ablauf
Regelmäßige AnhebungBeginnt das Erlernen der Priorität erneutVerhungern und verändertes Verhalten
Stimme die Stufen ab

Wähle die Anzahl der Warteschlangen, das Zeitquantum jeder Warteschlange, das Kontingent jeder Stufe und das Intervall zwischen Anhebungen. Obere Warteschlangen verwenden meist kurze Zeitquanten, zum Beispiel 10 ms, um schnell zwischen interaktiven Aufträgen zu wechseln. Untere Warteschlangen können viel längere Zeitquanten verwenden, manchmal mehrere hundert Millisekunden, um bei anhaltender Berechnung Wechsel zu verringern.

Das Kontingent kann unabhängig vom Zeitquantum wachsen. Eine Stufe mit einem Zeitquantum von 5 ms und einem Kontingent von 15 ms kann drei vollständige Einsätze vor der Herabstufung erlauben. Ein größeres Kontingent verzögert die Einstufung als lang laufend; ein größeres Zeitquantum verlängert einen einzelnen Einsatz.

Der Zeitteilentwurf von Solaris veranschaulicht tabellenbasierte Rückkopplung: Seine klassische konfigurierbare Tabelle hat 60 Prioritätsstufen, deren Zeitquanten von etwa 20 ms bei hoher Priorität bis zu einigen hundert Millisekunden bei niedriger Priorität reichen. Klassische BSD-Entwürfe berechneten die Priorität stattdessen aus der jüngsten CPU-Nutzung, deren Einfluss mit der Zeit abnimmt. Beide lassen den Einfluss früherer CPU-Nutzung schwinden, sodass die weit zurückliegende Vorgeschichte eines Threads seine Behandlung nicht dauerhaft bestimmt.

Wichtige Erkenntnisse

  • Anhebungen eröffnen erneut Bedienmöglichkeiten und lassen verändertes Verhalten neu erlernen.
  • Eine Anhebung gibt weder eine dauerhaft hohe Priorität noch einen festen CPU-Anteil.
  • Kumulative Verbrauchserfassung verhindert die Taktik der Prozessorabgabe vor Ablauf.
  • Kurze Zeitquanten auf oberen Stufen unterstützen schnelle Antworten; längere auf unteren Stufen verringern den Aufwand.
  • Ein Kontingent kann mehrere Einsätze auf einer Stufe umfassen.
  • Rückkopplung kann Prioritätstabellen oder Formeln mit abnehmendem Einfluss der CPU-Nutzung verwenden.
4

Teile CPU-Zeit nach Anteilen auf

Ein Scheduler mit fairen Anteilen beginnt mit einem Anspruch: Wie viel von der umkämpften CPU soll jeder ausführbare Auftrag erhalten? Beim Lotterie- und Stride-Scheduling drücken Tickets diesen Anspruch aus; in der fairen Linux-Klasse drücken ihn Gewichte aus. Die Auswahlregeln unterscheiden sich darin, wie genau kurze Intervalle der beabsichtigten Aufteilung folgen und wie sie eine schnelle Bedienung begünstigen. Verfolge die Verbrauchserfassung, um zu verstehen, warum ein größeres Gewicht mehr reale CPU-Zeit einbringt, während der virtuelle Fortschritt langsamer wächst.

4.1 Lose gewichtete Einsätze mit Lotterie-Scheduling aus

Scheduling mit proportionalen Anteilen soll die CPU-Bedienzeit gemäß zugewiesenen Anteilen aufteilen. Beim Lotterie-Scheduling besitzt jeder ausführbare Auftrag Tickets. Ein zufälliges Gewinnticket wählt den Auftrag für die nächste gleich lange Zeitscheibe. Die Gewinnchance eines Auftrags ist seine Ticketzahl geteilt durch die Zahl aller Tickets ausführbarer Aufträge.

Finde ein Gewinnticket

A besitzt 100 Tickets, B 50 und C 250. Nummeriere die 400 Tickets von 0 bis 399. A besitzt 0–99, B besitzt 100–149 und C besitzt 150–399. Eine Ziehung von 300 wählt C.

Eine listenbasierte Implementierung zieht eine Zahl und summiert die Ticketzahlen. Die laufenden Summen sind 100 nach A, 150 nach B und 400 nach C. Halte bei der ersten Summe an, die echt größer als die gezogene Zahl ist. „Größer oder gleich“ würde Tickets an den Grenzen falsch zuordnen: Die gezogene 100 gehört zu B. Wenn Inhaber größerer Ticketzahlen vorne stehen, wird diese Listensuche im Mittel kürzer.

Unterscheide Erwartung und Garantie

Hat A 75 Tickets und B 25, beträgt der erwartete Anteil von A 75 %. Bei 100 unabhängigen Ziehungen gleich langer Zeitscheiben, während beide ausführbar sind, erwartet A 75 Gewinne. Die Standardabweichung beträgt:

100×0,75×0,25≈4,33 Zeitscheiben.

Ein Ergebnis von etwa 71–79 Gewinnen liegt ungefähr innerhalb einer Standardabweichung vom Mittelwert; es ist kein garantierter Bereich. Bei kurzen Laufzeiten kann das Ergebnis deutlich vom angestrebten Verhältnis 3:1 abweichen. Je größer das Beobachtungsfenster, desto kleiner wird die relative zufällige Schwankung. Die Lotterie bietet wahrscheinlichkeitsbasierte Fairness, keine exakte Aufteilung über ein endliches Zeitfenster und keine beschränkte Wartezeit bis zum nächsten Einsatz.

Für zwei Aufträge mit gleicher Ticketzahl und gleichem CPU-Bedarf teilt die Unfairnesskennzahl U den früheren Abschlusszeitpunkt durch den späteren. Das Verhältnis erreicht 1, wenn sie gleichzeitig enden, und ist kleiner, wenn einer viel früher endet. Dieses Verhältnis der Abschlusszeitpunkte schwankt besonders stark bei kurzen Aufträgen unter Lotterie-Scheduling.

Verteile Tickets über Benutzer und Abhängigkeiten hinweg

Eine Ticketwährung ermöglicht es einem Benutzer, einen zugewiesenen globalen Anspruch lokal aufzuteilen. Benutzer X hat 200 globale Tickets und weist X1 300 lokale Tickets und X2 100 zu. Von 400 lokalen Tickets hat X1 drei Viertel und erhält damit 150 globale Tickets; X2 erhält 50. Benutzer Y hat 100 globale Tickets für Y1. Die Gesamtzahl beträgt 300, sodass X1 erwartungsgemäß 50 %, X2 etwa 16,67 % und Y1 etwa 33,33 % der umkämpften CPU erhält.

Die Ticketübertragung leiht die Tickets eines Clients vorübergehend einem Server, der für ihn arbeitet, und gibt sie nach Abschluss der Anfrage zurück. Sie folgt damit der Arbeitsabhängigkeit. Ticketinflation erlaubt kooperierenden Aufträgen, ihre eigenen Ticketzahlen zu erhöhen, um mehr Bedienzeit anzufordern. Das erfordert Vertrauen oder Begrenzungen: Unbeschränkte Inflation erlaubt einem gierigen Auftrag, die Anteile aller anderen zu verwässern.

Die Lotterie benötigt Ticketgesamtzahlen, aber keine Aufzeichnung darüber, wie weit jeder Auftrag bei der Bedienung vorausliegt. Ein neuer Auftrag steuert seine Tickets einfach zum Bestand der ausführbaren Aufträge bei. Die Zuweisung der Tickets bleibt eine Strategieentscheidung; die zufällige Ziehung setzt diese Entscheidung im Erwartungswert durch. Die Tickets eines blockierten Auftrags konkurrieren nicht um eine Zeitscheibe, die er nicht nutzen kann.

Wichtige Erkenntnisse

  • Der Ticketanteil eines Auftrags ergibt seine Gewinnchance bei jeder Ziehung.
  • Die kumulative Suche endet, wenn die Summe die Gewinnnummer übersteigt.
  • Lotterieanteile sind erwartete Anteile und schwanken kurzfristig.
  • Eine Ticketwährung erhält den globalen Anspruch eines Benutzers, während sie ihn lokal aufteilt.
  • Ticketübertragung folgt einer Abhängigkeit; unbeschränkte Inflation kann die Anteile anderer verwässern.

4.2 Steuere die Bedienung mit Schrittweiten

Stride-Scheduling wandelt Ticketanteile in eine deterministische Folge um. Jeder ausführbare Auftrag hat eine Schrittweite, berechnet als große Konstante geteilt durch seine Ticketzahl, und einen Pass-Wert, der seinen gewichteten Fortschritt erfasst. Wähle den niedrigsten Pass-Wert, führe den Auftrag eine gleich lange Zeitscheibe aus und addiere dann seine Schrittweite zu seinem Pass-Wert.

Berechne die Schrittweiten

A hat 50 Tickets, B 25 und C 100. Bei der Konstanten 1.000 sind ihre Schrittweiten 20, 40 und 10. Mehr Tickets ergeben eine kleinere Schrittweite. Der Pass-Wert eines bevorzugten Auftrags steigt langsam, sodass er häufiger das Minimum wird.

Beginne alle Pass-Werte bei null und löse Gleichstände alphabetisch auf. Behalte im Tupel die feste Reihenfolge A, B, C bei:

Pass-Werte vor der AuswahlAusgewählter AuftragPass-Werte nach seiner Zeitscheibe
(0, 0, 0)A(20, 0, 0)
(20, 0, 0)B(20, 40, 0)
(20, 40, 0)C(20, 40, 10)
(20, 40, 10)C(20, 40, 20)
(20, 40, 20)A(40, 40, 20)
(40, 40, 20)C(40, 40, 30)
(40, 40, 30)C(40, 40, 40)

Nur der Pass-Wert des ausgewählten Auftrags ändert sich. In sieben Zeitscheiben erhält A zwei Einsätze, B einen und C vier: genau das Verhältnis 50:25:100. Beim gemeinsamen Pass-Wert 40 hat jeder den gleichen gewichteten Bedienfortschritt erreicht. Zwischen solchen Gleichständen müssen die Anteile in kurzen Zeitfenstern nicht exakt sein.

Trenne reale Bedienung und virtuellen Fortschritt

Der Pass-Wert ist ein Ordnungswert, keine verstrichene Zeit und keine Ticketzahl. Die große Schrittweite von B lässt ihn warten, während A und C beim Pass-Wert aufholen. Über diesen sich wiederholenden Zyklus erhält B dennoch seinen vorgesehenen Anteil von einem Siebtel. Würde die Ticketzahl zum Pass-Wert addiert, würde das den Entwurf umkehren: Der Auftrag mit den meisten Tickets würde den größten Sprung machen und seltener ausgewählt.

Die Konstante steuert die Skala der Schrittweiten, nicht die beabsichtigten Ticketverhältnisse. Implementierungen mit ganzen Zahlen benötigen genügend Genauigkeit, um diese Verhältnisse nicht durch Rundung zu verzerren. Vergleiche und Aktualisierungen müssen dieselbe Skala verwenden.

Ordne einen neuen Auftrag sinnvoll ein

Angenommen, bestehende Aufträge haben Pass-Werte um 4.000. Ein neuer Auftrag, der bei null startet, würde beim Aufholen wiederholt gewinnen, selbst wenn er wenige Tickets hätte. Initialisiere seinen Pass-Wert in Bezug auf den aktuellen Systemfortschritt, etwa mit dem aktuellen Minimum, damit er keine Bedienzeit für die Zeit vor seiner Ankunft ansammelt.

LotterieStride
Zufällige Ziehungen setzen erwartete Anteile durchAuswahl des niedrigsten Pass-Werts erfasst die Bedienung deterministisch
Ticketzahlen genügen für die AuswahlJeder Auftrag benötigt Pass-Wert und Schrittweite
Ein neuer Auftrag fügt einfach Tickets hinzuEin neuer Auftrag benötigt einen passenden anfänglichen Pass-Wert

Die virtuelle Laufzeit von Linux nutzt die verwandte Idee, tatsächliche CPU-Bedienzeit als gewichteten Fortschritt anzurechnen. In beiden Entwürfen lässt ein höherer Anspruch diesen Fortschritt langsamer wachsen, sodass die Aufgabe bei späterer Bedienung konkurrenzfähig bleibt.

Wichtige Erkenntnisse

  • Die Schrittweite ist die gemeinsame Konstante geteilt durch die Ticketzahl.
  • Wähle den kleinsten Pass-Wert und addiere nur die Schrittweite dieses Auftrags.
  • Größere Ticketzahlen lassen Pass-Werte langsamer wachsen.
  • Neue Aufträge benötigen Pass-Werte, die sich am aktuellen Fortschritt orientieren.

4.3 Gewichte, virtuelle Laufzeit und Fristen zugelassener Aufgaben

Die fairen Linux-Scheduler erfassen gewichtete CPU-Bedienzeit. Der Completely Fair Scheduler (CFS), 2007 in Linux 2.6.23 eingeführt, wählte die ausführbare Aufgabe mit der kleinsten virtuellen Laufzeit. Linux begann 2023 in Version 6.6, diese Auswahlregel durch EEVDF zu ersetzen.

Teile Bedienzeit nach Gewicht auf

Ein Nice-Wert reicht von −20, am stärksten bevorzugt, bis +19, am wenigsten bevorzugt. Nice 0 hat das Gewicht 1024. Jede Stufe zu einem größeren Nice-Wert verringert das Gewicht um etwa den Faktor 1,25. Beispielgewichte sind 3121 bei Nice −5, 820 bei Nice 1, 335 bei Nice 5, 110 bei Nice 10 und 15 bei Nice 19.

Nice 0 gegenüber Nice 1 ergibt 10241024+820≈0,555, also etwa 55,5 % gegenüber 44,5 %. Die Anteile hängen ungefähr von der Differenz der Nice-Werte ab: 3121/1024 und 335/110 betragen beide etwa 3,05. Nice +19 erhält in diesem einfachen Modell mit zwei Aufgaben bei Konkurrenz mit Nice 0 immer noch etwa 1,4 %.

Der klassische CFS teilt eine angestrebte Schedulinglatenz nach Gewicht auf:

Zeitscheibek=wk∑iwi×Latenz

Für die Gewichte 1024, 1024 und 335 beträgt die Summe 2383. Ein angestrebter Zeitraum von 48 ms ergibt für jede stärker gewichtete Aufgabe etwa 20,63 ms und für die schwächer gewichtete 6,75 ms. Das sind beispielhafte Parameter, keine allgemeingültigen Kernelstandardwerte. Bei vier gleich gewichteten Aufgaben ergeben 48 ms jeweils 12 ms. Bei zehn lägen jeweils 4,8 ms unter einer beispielhaften Mindestgranularität von 6 ms, sodass der Zeitraum wachsen muss.

Rechne virtuellen Fortschritt an

CFS erhöht die virtuelle Laufzeit einer laufenden Aufgabe um:

Δv=1024w×Δt

Eine Aufgabe mit Gewicht 1024 erhält eine virtuelle Millisekunde pro realer Millisekunde. Eine Aufgabe mit Gewicht 335 erhält etwa 3,06. Die schnellere Anrechnung bei schwächer gewichteten Aufgaben lässt diese früher warten, während stärker gewichtete Aufgaben mehr reale Bedienzeit erhalten.

Der klassische CFS ordnet eingereihte ausführbare Aufgaben in einem Rot-Schwarz-Baum nach virtueller Laufzeit. Einfügen und Entfernen benötigen logarithmische Zeit; ein zwischengespeicherter Zeiger auf den Knoten ganz links ermöglicht es, das Minimum in konstanter Zeit zu finden. Blockierte Aufgaben verlassen diesen Baum ausführbarer Aufgaben. Die Einordnung beim Aufwachen verhindert, dass früheres Schlafen zu einem unbegrenzten Anspruch auf Bedienzeit zum Aufholen wird.

Wähle mit EEVDF unter zugelassenen Aufgaben

Earliest Eligible Virtual Deadline First behält Gewichte und die Erfassung virtueller Bedienzeit bei. Eine Aufgabe hat einen positiven Lag, wenn ihr Bedienzeit zusteht, und einen negativen Lag, wenn sie mehr als ihren Anspruch erhalten hat. Aufgaben mit nicht negativem Lag sind zugelassen. EEVDF wählt die zugelassene Aufgabe mit der frühesten virtuellen Frist.

Die Frist kombiniert den virtuellen Beginn einer Anforderung mit ihrer angeforderten, in virtuelle Zeit umgerechneten Bedienlänge. Sie ist ein Wert zur Reihenfolge der Bedienung, kein zugesagter Abschlusszeitpunkt auf der Uhr. Eine kürzer angeforderte Zeitscheibe kann einer zugelassenen Aufgabe eine frühere Frist geben und die Latenz verbessern, ohne ihren langfristigen Gewichtsanteil zu erhöhen. Aktuelles Linux unterstützt Zeitscheibenanforderungen über sched_setattr().

Auswahl im klassischen CFSAuswahl bei EEVDF
Kleinste virtuelle LaufzeitFrüheste virtuelle Frist unter zugelassenen Aufgaben

Wichtige Erkenntnisse

  • Nice-Werte bestimmen relative Gewichte für die normale Bedienung in der fairen Klasse.
  • Die virtuelle Laufzeit wächst umgekehrt proportional zum Gewicht.
  • Der klassische CFS nutzt die kleinste virtuelle Laufzeit und ein zwischengespeichertes Baumminimum.
  • Die Mindestgranularität kann den Zeitraum des klassischen CFS verlängern.
  • EEVDF prüft zuerst die Zulassung und vergleicht dann virtuelle Fristen.
  • Kürzere EEVDF-Anforderungen ändern die Latenz, während Gewichte die Anteile bestimmen.
5

Verteile Arbeit auf mehrere CPUs

Mehrere CPUs schaffen mehr Möglichkeiten, Arbeit auszuführen, doch nun beeinflusst die Platzierung den Aufwand jeder Entscheidung. Ein Thread kann auf einem Kern bereits gefüllte Caches und auf einem anderen weit entfernten Speicher vorfinden. Bereitwarteschlangen müssen zudem gleichzeitige Entscheidungen unterstützen, ohne den gemeinsamen Zustand zu beschädigen. Vergleiche eine gemeinsame Warteschlange mit getrennten Warteschlangen pro CPU und wäge dann den Nutzen des Lastausgleichs gegen den Aufwand des Verschiebens ab.

5.1 Berücksichtige Caches und CPU-Topologie

Mehrere CPUs helfen nur, wenn parallele Arbeit vorhanden ist. Ein einzelner Thread läuft jeweils auf einer logischen CPU; mehrere Threads oder unabhängige Programme können mehrere CPUs gemeinsam nutzen. Ein Scheduler muss sowohl wählen, welcher Auftrag läuft, als auch wo er läuft.

Teile die Verantwortung für das Scheduling auf

Beim symmetrischen Mehrprozessorbetrieb (SMP) führen CPUs Kernelcode aus und treffen Schedulingentscheidungen für sich selbst. Beim asymmetrischen Mehrprozessorbetrieb koordiniert ein Hauptprozessor das Scheduling, während andere zugewiesene Arbeit ausführen. Zentrale Steuerung ist einfacher, aber der Hauptprozessor kann zum Engpass werden. Allzwecksysteme nutzen SMP.

Gleichzeitige Entscheidungen erfordern Koordination. Wenn zwei CPUs Aufgaben aus einer gemeinsamen Bereitwarteschlange entfernen, müssen deren Aktualisierungen synchronisiert werden, damit weder ein Eintrag verloren geht noch dieselbe eingereihte Aufgabe zweimal ausgewählt wird. Mehr CPUs können die Konkurrenz um diese gemeinsame Struktur erhöhen.

Erhalte nützliche Cache-Inhalte

Kerne haben kleine schnelle Caches, typischerweise private L1- und L2-Caches und einen größeren L3-Cache, den mehrere Kerne teilen. Zeitliche Lokalität bedeutet, kürzlich abgerufene Daten erneut zu verwenden. Räumliche Lokalität bedeutet, auf benachbarte Daten zuzugreifen, etwa auf aufeinanderfolgende Array-Elemente.

Ein sortierender Thread auf Kern 0 füllt dessen Caches und TLB. Läuft er nach einer kurzen Verdrängung dort weiter, können viele benötigte Einträge noch vorhanden sein. Auf Kern 3 muss er möglicherweise dieselben Daten erneut aus einem gemeinsamen Cache oder dem Speicher holen. Cache-Affinität ist die Tendenz des Schedulers, einen Thread in der Nähe der CPU zu halten, die er kürzlich genutzt hat. Der genaue Nutzen hängt davon ab, was im Cache verbleibt und wie die Caches gemeinsam genutzt werden.

Unterscheide Kohärenz und Synchronisierung

Cache-Kohärenz verhindert, dass Kerne dauerhaft widersprüchliche zwischengespeicherte Kopien einer einzelnen Speicherstelle verwenden. Busüberwachung ist eine Umsetzungsidee: Caches beobachten den Datenverkehr und invalidieren oder aktualisieren Kopien, wenn ein anderer Kern schreibt. Größere Systeme können andere Kohärenzmechanismen nutzen.

Kohärenz macht aus mehreren Befehlen keine atomare Operation. Wenn zwei CPUs beide eine Warteschlangenlänge lesen, Einträge ändern und die Länge zurückschreiben, erlauben kohärente einzelne Lese- und Schreibvorgänge dennoch schädliche Verzahnungen. Der Scheduler benötigt für die gesamte Aktualisierung Sperren oder eine andere Synchronisierungsmethode. Die gemeinsam genutzte Cache-Zeile einer Sperre kann selbst zwischen Kernen wandern, während diese um sie konkurrieren.

Lies den Hardwareaufbau
HardwaremerkmalWas der Scheduler berücksichtigen muss
Simultanes Multithreading (SMT)Logische CPUs auf einem Kern teilen Ausführungseinheiten und Caches
Nicht einheitlicher Speicherzugriff (Non-Uniform Memory Access, NUMA)Speicher nahe einem Prozessorsockel kann schneller zugänglich sein als entfernter Speicher
Heterogene KerneLeistungs- und Effizienzkerne bieten unterschiedliche Abwägungen zwischen Geschwindigkeit und Energieverbrauch

Intel nennt seine SMT-Implementierung Hyper-Threading. Zwei ausgelastete Threads auf logischen CPUs desselben Kerns konkurrieren um dessen Ressourcen; zwei logische CPUs entsprechen nicht zwei unabhängigen physischen Kernen. Eine NUMA-Migration kann außerdem Berechnungen vom verwendeten Speicher entfernen, selbst wenn das erneute Füllen des Caches kurz dauert.

Das Verschieben eines Threads auf eine untätige CPU kann eine lange Wartezeit in der Warteschlange beseitigen. Ihn an Ort und Stelle zu halten, kann die Lokalität erhalten. Vergleiche diese Kosten anhand der tatsächlichen Arbeitslast: Affinität ist eine Leistungspräferenz, während eine explizite Affinitätsmaske einschränkt, welche CPUs überhaupt erlaubt sind.

Wichtige Erkenntnisse

  • Eine parallele Beschleunigung benötigt mehrere ausführbare Threads oder Programme.
  • SMP ermöglicht mehreren CPUs, Schedulingentscheidungen zu treffen.
  • Cache-Affinität erhält kürzlich nützliche Daten und Übersetzungen.
  • Kohärenz macht eine mehrstufige Aktualisierung nicht atomar.
  • SMT, NUMA und unterschiedliche Kerntypen beeinflussen den Platzierungsaufwand.

5.2 Gleiche Arbeit aus, ohne sie ständig zu verschieben

Ein Mehrprozessorscheduler benötigt einen Ort für bereite Arbeit. Eine gemeinsame Warteschlange macht Arbeit leicht auffindbar. Getrennte Warteschlangen pro CPU verringern die gemeinsame Konkurrenz und erhalten die Platzierung, können aber dazu führen, dass eine CPU überlastet ist, während eine andere untätig bleibt.

Vergleiche Warteschlangenentwürfe
EntwurfHauptvorteilHauptaufwand
Eine Warteschlange (SQMS)Jede geeignete untätige CPU kann wartende Arbeit übernehmenKonkurrenz um die Warteschlange und schwächere Cache-Affinität
Mehrere Warteschlangen (MQMS)Lokale Entscheidungen skalieren und erhalten die AffinitätLastungleichgewicht erfordert aktive Korrektur

Beim Mehrprozessorscheduling mit einer Warteschlange entnehmen alle CPUs Arbeit aus einer gemeinsamen Warteschlange. Wenn Aufträge auf jeder CPU laufen können, beschäftigt wartende Arbeit eine untätige CPU von selbst. Eine gemeinsame Sperre schützt die Warteschlange, sodass eine steigende CPU-Anzahl diese Sperre zum Engpass machen kann.

Bei fünf Round-Robin-Aufträgen A–E auf vier CPUs weist eine mögliche Folge in der ersten Runde A, B, C, D zu; in der zweiten E, A, B, C und in der dritten D, E, A, B. A läuft auf CPU 0, dann 1 und dann 2. Der Rechner bleibt beschäftigt, aber A wechselt wiederholt die privaten Caches. Affinitätsregeln können die meisten Platzierungen beibehalten und ausgewählte Aufträge zum Lastausgleich verschieben.

Erkenne ungleiche Anteile

Beim Mehrprozessorscheduling mit mehreren Warteschlangen plant jede CPU ihre eigene Warteschlange. Angenommen, CPU 0 hat A und C und CPU 1 hat B und D; alle sind CPU-gebunden und teilen sich ihre CPU lokal im Round-Robin-Verfahren. Anfangs erhält jeder Auftrag eine halbe CPU. Wenn C endet, erhält A die gesamte CPU 0, während B und D weiterhin jeweils die Hälfte von CPU 1 erhalten.

Der Rechner bleibt voll ausgelastet, aber die Aufträge erhalten keine gleichen Anteile mehr. Endet auch A, wird CPU 0 untätig, obwohl B und D bereit sind. Wird einer von ihnen auf CPU 0 verschoben, erhalten beide eine ganze CPU und zuvor ungenutzte Kapazität wird verwendet.

Bei drei gleichen CPU-gebundenen Aufträgen und zwei CPUs beträgt die gleiche langfristige Bedienung zwei Drittel einer CPU pro Auftrag. Bei fester Platzierung läuft ein Auftrag allein und zwei teilen sich eine CPU. Wenn regelmäßig gewechselt wird, welcher Auftrag allein läuft, kann sich die Aufteilung der Gleichheit annähern. Kein einzelner Thread läuft auf beiden CPUs gleichzeitig.

Entscheide, wann migriert wird

Migration verschiebt eine Aufgabe in die Warteschlange einer anderen CPU. Work Stealing ist eine Strategie, bei der Arbeit geholt wird: Eine CPU mit wenig Arbeit prüft die Warteschlange einer stärker beschäftigten CPU und übernimmt Arbeit. Häufige Prüfungen erzeugen Synchronisierungsverkehr; seltene Prüfungen lassen Ungleichgewichte bestehen. Beim Stehlen müssen auch die zulässigen CPUs und die Speicherlokalität berücksichtigt werden.

Vergleiche die erwartete eingesparte Wartezeit mit dem Migrationsaufwand. Eine lange Warteschlange auf einer CPU und eine untätige geeignete CPU sind ein starker Grund für eine Verschiebung. Ein kleiner vorübergehender Unterschied zwischen Warteschlangen kann verschwinden, bevor sich der Aufwand für das erneute Füllen des Caches ausgleicht.

Die O(1)- und CFS-Entwürfe von Linux verwendeten Ausführungswarteschlangen pro CPU; Linux gleicht die Last über Hardware-Schedulingdomänen hinweg aus und berücksichtigt dabei gemeinsam genutzte Kerne und Prozessorsockel. Der alternative BF Scheduler verwendete eine gemeinsame Warteschlange. Benutzer können die Platzierung unter Linux mit taskset oder sched_setaffinity() und unter Windows mit SetThreadAffinityMask() einschränken. Eine eingeschränkte Affinitätsmaske kann erklären, warum eine bereite Aufgabe eine scheinbar untätige CPU nicht nutzt.

Wichtige Erkenntnisse

  • Eine gemeinsame Warteschlange findet wartende Arbeit leicht, benötigt aber gemeinsame Synchronisierung.
  • Warteschlangen pro CPU erhalten die Lokalität und verringern Konkurrenz.
  • Volle CPU-Auslastung kann mit ungleichen Anteilen pro Auftrag einhergehen.
  • Migration korrigiert Ungleichgewichte und verursacht dabei Cache- und Koordinationsaufwand.
  • Work Stealing zieht Aufgaben zu CPUs mit freier Kapazität.
  • Affinitätsbeschränkungen begrenzen, welche untätigen CPUs eine Aufgabe übernehmen können.
6

Lies Systemeinstellungen und bewerte eine Strategie

Reale Scheduler kombinieren mehrere Ideen: Prioritätsklassen, gewichtete Anteile, Rückkopplung nach Wartezeiten und Platzierung auf CPUs. Eine Einstellung kann Vorrang, Anteil oder erlaubte Platzierung ändern. Bestimme daher, welche Steuerung du betrachtest, bevor du ihre Wirkung vorhersagst. Linux und Windows bieten konkrete Beispiele. Um eine Strategie zu wählen, verbinde diese Mechanismen mit einer Arbeitslast und prüfe sowohl mittlere Ergebnisse als auch die Verzögerungen ihrer am wenigsten bevorzugten Aufträge.

6.1 Nutze die Linux-Schedulingsteuerung

Linux plant Threads ein, die im Kernel Tasks heißen. Schedulingstrategie, Nice-Wert, Gruppensteuerung und CPU-Affinität eines Tasks beantworten unterschiedliche Fragen dazu, wann und wo er läuft.

Lies zuerst die Strategie
StrategieAuswahlverhalten
SCHED_OTHER und SCHED_BATCHNormale Bedienung in der fairen Klasse, gewichtet nach Nice-Wert
SCHED_IDLENormale Arbeit mit extrem niedriger Priorität; Nice hat keinen Einfluss
SCHED_FIFOEchtzeitpriorität, ohne Zeitquantum für gleiche Priorität
SCHED_RREchtzeitpriorität, Tasks gleicher Priorität wechseln sich nach Zeitquantum ab
SCHED_DEADLINEBedienung in einer Fristenklasse oberhalb der anderen Klassen

Die normalen Strategien haben die statische Priorität 0. Echtzeit-FIFO und -RR nutzen 1–99, wobei 99 die höchste ist. Ein FIFO-Task läuft weiter, bis er blockiert, die CPU freiwillig abgibt oder von Arbeit mit höherer Priorität verdrängt wird. RR ergänzt Einsätze für Tasks gleicher Priorität; sched_rr_get_interval() meldet sein Zeitquantum. Diese Namen bezeichnen Linux-Strategien: Normales faires Scheduling ist nicht der RR-Lehrbuchalgorithmus mit gleichen Zeitscheiben.

Ändere Anteile und Platzierung

Nice reicht von −20 bis +19, mit dem Standardwert 0. Größere Werte verringern das Gewicht in der fairen Klasse um ungefähr den Faktor 1,25 pro Stufe. Bei einem typischen Start mit Nice 0 startet nice -n 10 make einen Build mit Nice 10; -n ist eine Anpassung des geerbten Nice-Werts. renice -n 5 -p 4321 setzt den Zielprozess auf Nice 5. Ein Benutzer kann seine eigene Arbeit weniger stark bevorzugen lassen; eine Erhöhung der Priorität erfordert passende Rechte oder ein erlaubtes Ressourcenlimit.

taskset -c 0,1 ./app erlaubt einem Programm, auf den CPUs 0 und 1 zu laufen. Es erzeugt keinen zweiten Thread und sichert keine der CPUs exklusiv zu. ps -o pid,cls,ni,rtprio,comm zeigt strategierelevante Felder, während top hilft, Priorität, Nice-Wert und CPU-Verbrauch zu beobachten.

chrt -f 50 ./app wählt die FIFO-Echtzeitpriorität 50. Nutze Echtzeiteinstellungen nur in einer kontrollierten Umgebung: Ein ausgelasteter Thread mit hoher Priorität kann die Shell und wichtige Systemarbeit verzögern. Standardmäßige Echtzeit-Bandbreitengrenzen reservieren etwas Zeit für normale Arbeit, sorgen aber nicht dafür, dass jede solche Arbeitslast reaktionsfähig bleibt. Vorrang ändert den Zugang zur CPU-Bedienzeit, nicht die Geschwindigkeit eines Befehls.

Unterscheide Gruppengewicht und Quote

In cgroup v2 reicht cpu.weight von 1 bis 10000, mit Standardwert 100, und teilt umkämpfte CPU-Kapazität der fairen Klasse unter aktiven Gruppen derselben Ebene auf. Die Gewichte 200 und 100 ergeben etwa zwei Drittel und ein Drittel einer CPU, wenn beide Gruppen beschäftigt sind. Wird die zweite untätig, kann die erste die gesamte verfügbare Kapazität nutzen.

cpu.max setzt eine Bandbreitenobergrenze. Der Wert „50000 100000“ erlaubt insgesamt 50 ms CPU-Zeit pro Zeitraum von 100 ms, was im Mittel einer halben CPU entspricht. Mehrere Threads können dieses Budget parallel verbrauchen und es bezogen auf die verstrichene Zeit früher erschöpfen. Eine begrenzte Gruppe kann selbst dann gedrosselt werden, wenn freie CPU-Kapazität vorhanden ist.

Ordne die Namen zeitlich ein

Der O(1)-Scheduler von Linux 2.6.0 verwendete Prioritätsfelder und Interaktivitätsrückkopplung. CFS kam 2007 in 2.6.23 hinzu. Linux 6.6 begann 2023 den Übergang zur EEVDF-Auswahl in der fairen Klasse. Seit Linux 6.12 im Jahr 2024 unterstützt sched_ext auf entsprechend konfigurierten Kerneln dynamisch geladene BPF-Schedulingstrategien. Schlägt ein solcher Scheduler fehl oder hält er ausführbare Arbeit auf, stellt der Kernel das eingebaute Scheduling wieder her.

Wichtige Erkenntnisse

  • Die Strategieklasse bestimmt den Vorrang, bevor Nice berücksichtigt wird.
  • Nice passt den relativen Anteil in der fairen Klasse an; Affinität beschränkt die erlaubten CPUs.
  • SCHED_IDLE ignoriert Nice.
  • Ein cgroup-Gewicht teilt umkämpfte Kapazität auf; eine Quote begrenzt die gesamte CPU-Bedienzeit.
  • EEVDF ändert die Auswahl in der fairen Klasse, während sched_ext austauschbare Strategien unterstützt.

6.2 Verfolge Windows-Prioritäten und Rückkopplung

Windows plant bereite Threads nach Priorität von 0 bis 31 ein, wobei größere Zahlen höher sind. Bereite Threads gleicher Priorität wechseln sich im Round-Robin-Verfahren ab. Ein neu bereiter Thread mit höherer Priorität verdrängt einen mit niedrigerer, ohne auf das Ende seines Zeitquantums zu warten. Priorität 0 gehört dem Thread zum Nullsetzen von Seiten, der freie Seiten löscht.

Bestimme die Basispriorität aus zwei Einstellungen

Die Basispriorität eines Threads hängt von der Prioritätsklasse seines Prozesses und seiner eigenen relativen Threadstufe ab. Prozessklassen sind Idle, Below normal, Normal, Above normal, High und Realtime. Zu den Threadstufen gehören Idle, Lowest, Below normal, Normal, Above normal, Highest und Time critical.

ProzessklasseThreadstufeBasispriorität
NormalNormal8
NormalHighest10
HighNormal13
RealtimeNormal24

Time critical ergibt außerhalb der Klasse Realtime 15 und innerhalb davon 31. Die Threadstufe Idle ergibt außerhalb von Realtime 1 und innerhalb davon 16. Diese Randstufen sind besondere Tabelleneinträge, sodass das Addieren eines festen Versatzes zu jeder Klasse falsche Ergebnisse liefern würde.

Verfolge eine vorübergehende Anhebung

Die Prioritäten 1–15 bilden den variablen Bereich; 16–31 bilden den Echtzeitbereich. Ein Thread beginnt mit einer dynamischen Priorität, die seiner Basispriorität entspricht. Bei Threads im variablen Bereich können Ereignisse wie eine Eingabe oder das Ende eines Wartens die dynamische Priorität vorübergehend erhöhen. Threads mit Echtzeit-Basisprioritäten erhalten keine solchen Anhebungen.

Angenommen, ein Thread mit Basispriorität 8 wird auf 14 angehoben. Rechnet er weiter, sinkt seine dynamische Priorität nach jedem vollständigen Zeitquantum um eine Stufe: auf 13 nach dem ersten, 12 nach dem zweiten und 8 nach dem sechsten. Die Anhebung ändert die Basispriorität nicht dauerhaft und fällt nicht unter diese Basis.

Das ist Rückkopplung: Gerade freigegebene Arbeit wird schnell bedient, während anhaltende CPU-Nutzung den vorübergehenden Vorteil verliert. Windows verwendet auch vorübergehende Anhebungen für lange wartende bereite Threads, um Verhungern entgegenzuwirken. Eine solche Anhebung kann einem Sperrinhaber mit niedrigem Rang helfen, Fortschritt zu machen, ist aber ein anderer Mechanismus als die sperrenspezifische Prioritätsvererbung.

Erkenne verwandte Entwürfe

Die Zeitteilklasse von Solaris ist ein tabellengesteuerter MLFQ-Entwurf. ULE von FreeBSD verwendet Ausführungswarteschlangen pro CPU und vergleicht das Schlaf- mit dem Laufverhalten, um interaktive Threads zu erkennen. Diese Systeme teilen die Idee, die Bedienung an beobachtetes Verhalten anzupassen, ohne identische Warteschlangenregeln zu verwenden.

macOS bietet Dienstgüteklassen (QoS), darunter benutzerinteraktiv, benutzerinitiiert, Standard, Hilfsprogramm und Hintergrund. Sie beschreiben die Dringlichkeit der Arbeit. Auf Apple Silicon hilft QoS dem System, Arbeit auf Leistungs- und Effizienzkerne zu verteilen. Programme teilen die Wichtigkeit der Arbeit mit; das Betriebssystem wählt die Platzierung gemäß Strategie und verfügbarer Hardware.

Reale Scheduler kombinieren Rückkopplung, Prioritäten, Fairness und Affinität. Eine Windows-Klasse Realtime bietet stärkeren Vorrang, aber weder eine garantiert schnellere Berechnung noch eine vollständige Garantie für Echtzeitkorrektheit.

Wichtige Erkenntnisse

  • Windows-Prioritätszahlen steigen mit dem Vorrang.
  • Die Basispriorität kombiniert die Prozessklasse mit der relativen Threadstufe.
  • Anhebungen im variablen Bereich sinken pro vollständigem Zeitquantum um eine Stufe zur Basispriorität.
  • Echtzeit-Basisprioritäten erhalten keine dynamischen Anhebungen.
  • Solaris, ULE und macOS nutzen verwandte Ideen mit unterschiedlichen Mechanismen.
  • QoS vermittelt die Dringlichkeit von Arbeit und hilft bei der Platzierung.

6.3 Wähle eine Strategie und prüfe ihre Folgen

Bestimme das Ziel der Arbeitslast, bevor du einen Scheduler auswählst. Bei einer Warteschlange für Stapelaufträge kann der schnelle Abschluss vieler kleiner Aufträge wichtig sein. Ein Editor benötigt nach Eingaben eine schnelle Bedienung. Ein gemeinsam genutzter Server braucht eine vertretbare Zuteilung unter Benutzern oder Gruppen.

Wähle den Mechanismus passend zum Ziel
Bedarf der ArbeitslastGeeigneter MechanismusZu prüfende Abwägung
Niedrige mittlere Durchlaufzeit bei StapelaufträgenSJF oder STCF mit bekannten oder vorhergesagten CPU-BurstsVorhersagefehler und Verhungern
Schnelle interaktive BedienungVerdrängung mit Rückkopplung oder latenzbewusste faire AuswahlWechselaufwand und Verzögerungen im oberen Randbereich
Proportionaler Zugang für BenutzerTickets, Schrittweiten oder GruppengewichteFairness in kurzen Zeitfenstern und Gruppenzuteilung
Lange CPU-gebundene BerechnungGenügend Bedienzeit pro Einsatz, um Wechsel zu amortisierenReaktionsfähigkeit konkurrierender Arbeit
Zeitkritische GerätearbeitGeeignete EchtzeitstrategienBeeinträchtigung anderer Aufgaben
Vergleiche Strategien bei gleichen Eingaben

A kommt bei 0 ms an und benötigt 8 ms, B bei 1 ms und benötigt 4 ms, C bei 2 ms und benötigt 2 ms. Der Wechselaufwand bleibt unberücksichtigt. FIFO führt A, B, C aus. SJF startet ebenfalls A, führt danach aber C vor B aus. STCF führt A 0–1, B 1–2, C 2–4, B 4–7, A 7–14 aus. RR nutzt ein Zeitquantum von 2 ms; Aufträge, die am Ende einer Zeitscheibe ankommen, werden vor der verdrängten Aufgabe eingereiht.

StrategieMittlere DurchlaufzeitMittlere Antwortzeit bis zur ersten Ausführung
FIFO10,33 ms5,67 ms
SJF9,67 ms5 ms
STCF7,33 ms0 ms
RR9 ms1 ms

STCF gewinnt bei dieser Arbeitslast in beiden Kennzahlen, weil jeder neu ankommende kürzere Auftrag sofort läuft. RR ermöglicht einen schnellen Start, ohne die CPU-Burst-Längen zu kennen. Bei gleichzeitig ankommenden gleich langen Aufträgen kann FIFO eine niedrigere mittlere Durchlaufzeit als RR haben. Eine Rangfolge für eine Arbeitslast ist ein Beleg für diese Arbeitslast.

Wähle eine Bewertungsmethode

Deterministische Modellierung berechnet einen festen Ablauf von Hand. Sie liefert exakte Ergebnisse für ihre Eingaben und macht Entscheidungen leicht nachvollziehbar, lässt aber oft Dispatch- und Cache-Aufwand aus. Warteschlangenmodelle beschreiben Ankunfts- und Bedienmuster mithilfe von Verteilungen und sagen das mittlere Verhalten voraus.

Für ein stabiles System im stationären Zustand verknüpft das Gesetz von Little die mittlere Anzahl n, die Ankunftsrate λ und die mittlere Verweildauer W:

n=λW

Bei 14 Aufträgen/s und einer mittleren Zeit im System von 0,5 s beträgt die mittlere Anzahl 7 Aufträge. Wähle die Abgrenzung einheitlich: Zur Anzahl in der Bereitwarteschlange gehört die Wartezeit in dieser Warteschlange, zur Anzahl im ganzen System die Zeit im ganzen System. Rechne vor der Multiplikation die Einheiten um.

Eine Simulation führt ein Modell des Schedulers aus, oft mit einer aufgezeichneten Arbeitslast. Sie kann komplizierte Ankunfts- und Blockierungsmuster prüfen, aber ihre Schlussfolgerungen hängen vom Modell und den gewählten Aufzeichnungen ab. Eine Implementierung misst den Scheduler in einem realen Betriebssystem und umfasst den tatsächlichen Verwaltungsaufwand; sie erfordert mehr Arbeit und benötigt weiterhin repräsentative Arbeitslasten und wiederholbare Messungen.

Untersuche neben Mittelwerten auch Durchsatz, Auslastung, einzelne Verzögerungen und Verzögerungen im oberen Randbereich, Fairness und Energieverbrauch. In einem Mehrprozessorsystem kann ein ausgelasteter Rechner die Bedienzeit trotzdem ungleich aufteilen oder Zeit für das erneute Füllen von Caches aufwenden. Vergleiche Strategien bei gleichem Beobachtungsfenster und gleicher Arbeitslast und verändere dann die Merkmale der Arbeitslast, die für die vorgesehenen Benutzer wichtig sind.

Wichtige Erkenntnisse

  • Wähle Kennzahlen passend zum tatsächlichen Bedarf der Arbeitslast.
  • Vergleiche Strategien bei gleichen Ankünften und gleichem CPU-Bedarf.
  • Eine arbeitslastspezifische Rangfolge bestimmt keinen allgemeingültigen Sieger.
  • Das Gesetz von Little erfordert ein stabiles System und passende Abgrenzungen für Anzahl und Zeit.
  • Eine Simulation hängt vom Modell ab; eine Implementierung umfasst den realen Verwaltungsaufwand.
  • Bewerte neben Mittelwerten auch Verzögerungen im oberen Randbereich, Fairness, Durchsatz und Energieverbrauch.

CPU-Scheduling: Beispiele

6 Interaktive Lektionen

1

Von bereiten Zuständen zu gemessenen Verzögerungen

11 Schritte
Verfolge eine Schedulingentscheidung und entnimm dann einem Zeitablaufdiagramm Antwortzeit, Wartezeit und Durchlaufzeit.
  1. 1
    EinführungVerfolge die CPU-Übergabe

    Ein laufender Auftrag startet einen Festplattenlesevorgang, während ein anderer Auftrag bereit ist. Das Betriebssystem kann diese Wartezeit nutzen, um andere Arbeit voranzubringen. Wir verfolgen zunächst die Zustandswechsel (ein Auftrag ist bereit, laufend oder blockiert) und lesen dann ein kurzes CPU-Zeitablaufdiagramm, um zu messen, was jeder Auftrag erlebt hat: Antwortzeit, Wartezeit und Durchlaufzeit.

    Halte beim Arbeiten zwei Fragen auseinander: Wer kann jetzt laufen und welche Verzögerung soll eine Kennzahl zählen? Ein Auftrag kann einen schnellen ersten Einsatz haben und dennoch viel später enden.

  2. 2
    ErklärungWähle unter ausführbaren Aufträgen

    Der Scheduler wählt bereite Arbeit. Eine laufende Aufgabe hat bereits eine CPU; eine blockierte Aufgabe muss auf ihr Ereignis warten. Wenn der Lesevorgang beginnt, wird die aufrufende Aufgabe blockiert und gibt die CPU frei. Wenn der Lesevorgang endet, wird sie wieder bereit.

    Der abgeschlossene Lesevorgang schafft eine Auswahlmöglichkeit. Ob die zurückkehrende Aufgabe sofort läuft, hängt von der Strategie und anderer bereiter Arbeit ab.

  3. 3
    VerbindungTrenne die Auswahl vom Wechsel

    Die Strategie wählt die nächste bereite Aufgabe. Der Dispatcher sichert den alten Zustand, stellt den ausgewählten Zustand wieder her und setzt die Ausführung fort. Seine Latenz und das erneute Füllen der Caches für die nächste Aufgabe kosten Zeit.

    Ein Timer kann die Kontrolle an den Kernel zurückgeben, selbst wenn ein Programm die CPU nie freiwillig abgibt. Ein Geräteinterrupt kann ebenfalls bevorzugte Arbeit bereit machen. Bei der Verdrängung bleibt die unterbrochene Aufgabe für einen späteren Einsatz erhalten.

  4. 4
    HerausforderungKann der wartende Editor verdrängen?

    Ein Editor ist beim Warten auf Eingaben blockiert, während eine CPU-gebundene Aufgabe läuft. Der Editor hat eine höhere Priorität. Kann er die CPU übernehmen, bevor die Eingabe eintrifft? Erkläre, welcher Zustand entscheidend ist.

    ---reveal---

    Nein. Der Editor ist blockiert und kann erst ausgeführt werden, wenn sein Eingabeereignis eintritt. Nachdem die Eingabe ihn bereit gemacht hat, kann ein Prioritätsscheduler mit Verdrängung ihn auswählen. Die Priorität ordnet bereite Arbeit nach Rang; sie beseitigt nicht die Abhängigkeit vom Ereignis.

  5. 5
    BeispielZeichne die Bedienintervalle

    A kommt bei 0 ms an und benötigt 5 ms, B bei 2 ms und benötigt 3 ms, C bei 4 ms und benötigt 1 ms. Es sind Aufträge ohne Ein-/Ausgabe. FIFO ohne Wechselaufwand führt A 0–5, B 5–8 und dann C 8–9 aus.

    Halte die Zeitpunkte der ersten Ausführung 0, 5 und 8 ms sowie die Abschlusszeitpunkte 5, 8 und 9 ms fest. Das sind Zeitpunkte. Als Nächstes ziehen wir die Ankunft jedes Auftrags ab, um daraus Verzögerungen zu machen.

  6. 6
    BeispielMiss die Verzögerung bis zum Abschluss

    Die Durchlaufzeit reicht von der Ankunft bis zum Abschluss. Für das Zeitablaufdiagramm beträgt die Durchlaufzeit von A 5 ms, die von B 6 ms und die von C 5 ms.

    Der Mittelwert ist:

    (5+6+5)/3=16/3≈5,33 ms.

    Der Abschlusszeitpunkt von B liegt bei 8 ms, aber B war nur 6 ms im System, weil er bei 2 ms ankam. Würde jeder Auftrag ab dem Beginn des Diagramms gemessen, würden die Verzögerungen später ankommender Aufträge überschätzt.

  7. 7
    BeispielMiss den ersten Einsatz und die gesamte Wartezeit

    Die Antwortzeit endet, wenn der Auftrag erstmals läuft. A wartet 0 ms auf diesen ersten Einsatz, B wartet 3 ms und C wartet 4 ms. Ihre mittlere Antwortzeit beträgt etwa 2,33 ms.

    Hier entspricht die Antwortzeit der gesamten Wartezeit, weil jeder Auftrag ohne Ein-/Ausgabe nach seiner Auswahl ununterbrochen läuft. Bei Verdrängung zählen auch spätere bereite Zeiträume zur Wartezeit. Ein blockiertes Ein-/Ausgabeintervall zählt zur Durchlaufzeit, aber nicht zur Wartezeit in der Bereitwarteschlange.

  8. 8
    HerausforderungBerechne die Verzögerungen eines verdrängten Auftrags

    Aufgabe R kommt bei 1 ms an, läuft erstmals bei 4 ms und endet bei 15 ms. Sie nutzt 6 ms CPU-Zeit ohne Ein-/Ausgabe. Bestimme Antwortzeit, Durchlaufzeit und Wartezeit.

    ---reveal---

    Die Antwortzeit beträgt 3 ms und die Durchlaufzeit 14 ms. Zieht man 6 ms Bedienzeit von der Durchlaufzeit ab, ergeben sich 8 ms gesamte Wartezeit. Die anfänglichen 3 ms sind nur ein Teil dieser Wartezeit; weitere 5 ms entstehen nach dem ersten Einsatz.

  9. 9
    KernaussageMiss den Rechner und den einzelnen Auftrag

    Unser FIFO-Ablauf schließt drei Aufträge in 9 ms ohne Leerlaufzeit ab. Sein Durchsatz beträgt etwa 333,33 Aufträge/s und seine CPU-Auslastung in diesem Intervall 100 %. Diese Kennzahlen für den gesamten Rechner beschreiben nicht die Erfahrung jedes einzelnen Auftrags.

    Untersuche einzelne Verzögerungen und ein hohes Perzentil, wenn seltene lange Wartezeiten für Benutzer wichtig sind. Fairness fragt auch, ob bereite Arbeit bedient wird, einschließlich der Aufträge, die sich hinter einem günstigen Mittelwert verbergen.

  10. 10
    HerausforderungNutze ein blockiertes Intervall richtig

    Eine Aufgabe kommt bei 0 ms an, läuft 0–2, wartet 2–7 auf ein Gerät, wartet 7–10 im Zustand „bereit“ und läuft 10–12 bis zum Abschluss. Wie groß sind ihre Antwortzeit und Wartezeit?

    ---reveal---

    Die Antwortzeit beträgt 0 ms, weil die Aufgabe sofort läuft. Die Wartezeit beträgt 3 ms, das bereite Intervall 7–10. Ihre Durchlaufzeit von 12 ms enthält außerdem 4 ms CPU-Zeit und 5 ms im blockierten Zustand. Alle 8 ms außerhalb der CPU-Ausführung als „Wartezeit“ zu bezeichnen, würde zwei Prozesszustände vermischen.

  11. 11
    ZusammenfassungPrüfe den Zustand, bevor du Zeit zählst

    Bestimme bei einem neuen Ablauf an jedem Ereignis die bereite Arbeit, halte die Bedienintervalle fest und ermittle dann die Zeitpunkte der ersten Ausführung und des Abschlusses. Ziehe vor der Mittelwertbildung die Ankunftszeiten ab. Halte blockierte Zeit getrennt, wenn du die Wartezeit in der Bereitwarteschlange misst.

2

Erstelle Ablaufpläne anhand der Strategieregel

17 Schritte
Vergleiche Auswahlregeln, Verdrängungen, Round-Robin-Einsätze und Prioritätsabhängigkeiten anhand durchgerechneter Zeitablaufdiagramme.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungEine Arbeitslast, mehrere Wahlmöglichkeiten
  2. 2
    BeispielBeginne mit der Ankunftsreihenfolge
  3. 3
    BeispielLass kurze Arbeit zuerst enden
  4. 4
    HerausforderungSage den nächsten CPU-Burst vorher
  5. 5
    BeispielUnterbrich den langen Auftrag für einen kürzer ankommenden
  6. 6
    BeispielBeende die verbleibende Arbeit
  7. 7
    HerausforderungVergleiche mit der verbleibenden Zeit
  8. 8
    VerbindungLass blockierte Arbeit Kapazität schaffen
  9. 9
    BeispielWechsle zwei gleiche Aufträge ab
  10. 10
    BeispielBerechne den Abschluss beim Abwechseln
  11. 11
    HerausforderungOrdne eine Ankunft am Ende der Zeitscheibe ein
  12. 12
    KernaussageBerücksichtige den Aufwand jeder Übergabe
  13. 13
    BeispielLies vor der Ausführung den Rang
  14. 14
    BeispielVerfolge den Sperrinhaber
  15. 15
    HerausforderungWähle die nützliche Prioritätsänderung
  16. 16
    HerausforderungWähle zwischen Antwortzeit und Abschluss
  17. 17
    ZusammenfassungSetze eine Regel in ein Zeitablaufdiagramm um
3

Verfolge Rückkopplung und erkenne Manipulation

12 Schritte
Verfolge einen Auftrag durch Warteschlangenstufen und behebe dann strategische Prozessorabgabe und lange Wartezeiten durch Verbrauchserfassung und Anhebungen.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungLerne ohne Kenntnis der zukünftigen CPU-Burst-Länge
  2. 2
    ErklärungNutze eine Warteschlange und zwei Begrenzungen der Bedienzeit
  3. 3
    BeispielLass anhaltende CPU-Nutzung zum Abstieg führen
  4. 4
    BeispielGib dem neuen Auftrag früh eine Chance
  5. 5
    HerausforderungErhalte ein unterbrochenes Kontingent
  6. 6
    BeispielDecke die Lücke bei früher Prozessorabgabe auf
  7. 7
    BeispielErhalte die Verbrauchshistorie
  8. 8
    HerausforderungZähle nur den CPU-Verbrauch
  9. 9
    ErklärungGib lange wartender Arbeit eine neue Gelegenheit
  10. 10
    HerausforderungUnterscheide die beiden Korrekturen
  11. 11
    VerbindungStimme Einsätze und Einstufung getrennt ab
  12. 12
    ZusammenfassungVerfolge den Verbrauch, der die Priorität ändert
4

Erfasse proportionale CPU-Bedienzeit

16 Schritte
Wandle Tickets in Wahrscheinlichkeiten und Schrittweiten um und verfolge dann gewichteten virtuellen Fortschritt und die Zulassung bei EEVDF.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungBeginne mit einem Anspruch
  2. 2
    BeispielLies die Ticketintervalle
  3. 3
    KernaussageErwarte Schwankungen in kurzen Zeitfenstern
  4. 4
    HerausforderungRechne eine lokale Zuteilung um
  5. 5
    VerbindungLass einen Dienst den Anspruch des Clients übernehmen
  6. 6
    BeispielBerechne umgekehrt zur Ticketzahl proportionale Schrittweiten
  7. 7
    BeispielFühre den gewichteten Fortschritt wieder zusammen
  8. 8
    HerausforderungOrdne eine neue Stride-Aufgabe ein
  9. 9
    ErklärungRechne reale Bedienzeit in virtuellen Einheiten an
  10. 10
    BeispielTeile einen angestrebten Zeitraum auf
  11. 11
    TippLies Nice als Eingabe für das Gewicht
  12. 12
    VerbindungFinde das Minimum effizient
  13. 13
    ErklärungPrüfe die Zulassung vor den Fristen
  14. 14
    HerausforderungWende beide EEVDF-Vergleiche an
  15. 15
    HerausforderungErhalte den Anteil bei veränderter Anforderungsgröße
  16. 16
    ZusammenfassungTrenne Zuteilung und Auswahl
5

Gleiche CPU-Last aus und erhalte nützliche Lokalität

11 Schritte
Untersuche Hardwareaufwand, vergleiche Warteschlangenentwürfe und entscheide, wann das Verschieben bereiter Arbeit hilft.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungEine zweite CPU bringt eine Platzierungsentscheidung
  2. 2
    ErklärungErkenne die verfügbare Parallelität
  3. 3
    BeispielErhalte eine kürzlich genutzte Arbeitsmenge
  4. 4
    HerausforderungSchützt Kohärenz die gesamte Aktualisierung?
  5. 5
    ErklärungWähle eine Warteschlangenaufteilung
  6. 6
    BeispielErkenne ungleiche Bedienung auf beschäftigten CPUs
  7. 7
    BeispielWechsle die Platzierung für gleiche Bedienung
  8. 8
    HerausforderungNutze eine untätige CPU zulässigerweise
  9. 9
    KernaussageWäge Wiederherstellungsaufwand gegen eingesparte Verzögerung ab
  10. 10
    HerausforderungEntscheide, ob der Wechsel Zeit spart
  11. 11
    ZusammenfassungPrüfe Kapazität, Zulässigkeit und Lokalität
6

Lies Systemsteuerungen und bewerte einen Scheduler

15 Schritte
Deute das Verhalten von Linux und Windows, wähle dann eine Messabgrenzung und bewerte die Ergebnisse.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungLies jede Steuerung auf ihrer eigenen Ebene
  2. 2
    ErklärungPrüfe die Linux-Strategieklasse
  3. 3
    BeispielUnterscheide Anteil und Platzierung
  4. 4
    BeispielWende Gruppengewichte bei Konkurrenz an
  5. 5
    HerausforderungLies eine Gesamtquote
  6. 6
    VerbindungErkenne die Scheduler-Generation
  7. 7
    ErklärungOrdne Windows-Einstellungen einem Basisrang zu
  8. 8
    BeispielLass eine vorübergehende Anhebung abklingen
  9. 9
    HerausforderungPrüfe den Bereich für Anhebungen
  10. 10
    VerbindungErkenne verwandte Rückkopplungsideen
  11. 11
    ErklärungWähle die entscheidende Messung
  12. 12
    BeispielHalte beim Gesetz von Little eine Abgrenzung ein
  13. 13
    HerausforderungBestimme die Wartezeit aus der Anzahl
  14. 14
    HerausforderungErkläre einen scheinbaren Leistungsgewinn
  15. 15
    ZusammenfassungVerbinde eine Einstellung mit einer gemessenen Wirkung

CPU-Scheduling: Übungsaufgaben

50 Übungsfragen in 5 Sets

Set 1: Lies Entscheidungen und verfolge CPU-Bedienzeit10 Übungsfragen

Frage 1 von 10

Ein Editor wartet auf einen Festplattenlesevorgang, ein Compiler ist bereit und ein Anzeigeprogramm ist beendet. Welche Aufgabe kann der CPU-Scheduler jetzt auswählen?
  1. Den Editor.
  2. Den Compiler.
  3. Das Anzeigeprogramm.
  4. Den Editor und den Compiler.
Antwort zeigenAntwort ausblenden
Antwort: B
Der Compiler ist bereit und kann ausgeführt werden, sobald er ausgewählt wird. Der Editor muss auf sein Festplattenereignis warten, bevor er infrage kommt. Nicht abgeschlossene Arbeit allein genügt nicht: Blockierte Arbeit kann die CPU noch nicht nutzen.

Frage 2 von 10

Eine Aufgabe ohne Ein-/Ausgabe kommt bei 4 ms an, läuft erstmals bei 9 ms und endet bei 22 ms, nachdem sie 10 ms CPU-Zeit verbraucht hat. Wie groß sind ihre Antwortzeit und ihre gesamte Wartezeit?
  1. Antwortzeit 9 ms; Wartezeit 12 ms.
  2. Antwortzeit 5 ms; Wartezeit 18 ms.
  3. Antwortzeit 8 ms; Wartezeit 5 ms.
  4. Antwortzeit 5 ms; Wartezeit 8 ms.
Antwort zeigenAntwort ausblenden
Antwort: D
Die Antwortzeit ist die Verzögerung bis zur ersten Ausführung: 9 minus 4 ergibt 5 ms. Die Durchlaufzeit ist 22 minus 4, also 18 ms. Die Wartezeit beträgt daher 18 minus 10, also 8 ms. Würde die Verzögerung bis zur ersten Ausführung als gesamte Wartezeit verwendet, blieben die 3 ms im Zustand „bereit“ nach der ersten Ausführungsübergabe unberücksichtigt.

Frage 3 von 10

Drei Aufträge ohne Ein-/Ausgabe kommen gleichzeitig an: A benötigt 18 ms, B 4 ms und C 8 ms. Wie groß ist ihre mittlere Durchlaufzeit bei SJF ohne Verdrängung und ohne Wechselaufwand?
  1. 15,33 ms.
  2. 10,00 ms.
  3. 20,67 ms.
  4. 24,67 ms.
Antwort zeigenAntwort ausblenden
Antwort: A
SJF führt B, C und dann A aus, mit Abschlusszeitpunkten von 4, 12 und 30 ms. Da alle Ankunftszeiten null sind, beträgt ihre mittlere Durchlaufzeit 46 geteilt durch 3, also 15,33 ms. Der Mittelwert der CPU-Burst-Längen beträgt 10 ms und lässt die Zeit hinter vorheriger Arbeit unberücksichtigt.

Frage 4 von 10

Ein Verfahren zur Vorhersage der CPU-Burst-Länge hat eine Schätzung von 20 ms und verwendet für die neueste Messung das Gewicht 0,25. Es beobachtet CPU-Bursts von 8 ms und danach 12 ms. Wie lautet seine Vorhersage nach beiden Beobachtungen?
  1. 17,00 ms.
  2. 14,00 ms.
  3. 15,75 ms.
  4. 13,50 ms.
Antwort zeigenAntwort ausblenden
Antwort: C
Die erste Aktualisierung ist 0,25 mal 8 plus 0,75 mal 20 und ergibt 17 ms. Die zweite nutzt diese aktualisierte Schätzung: 0,25 mal 12 plus 0,75 mal 17 ergibt 15,75 ms. Würde erneut die ursprüngliche Schätzung von 20 ms verwendet, ginge die Wirkung der ersten Beobachtung verloren.

Frage 5 von 10

Aufträge ohne Ein-/Ausgabe sind A (Ankunft 0 ms, Bedarf 10 ms), B (2 ms, 4 ms) und C (3 ms, 2 ms). Wie groß ist die mittlere Durchlaufzeit unter STCF? Berücksichtige keinen Wechselaufwand.
  1. 7,00 ms.
  2. 9,33 ms.
  3. 8,00 ms.
  4. 8,67 ms.
Antwort zeigenAntwort ausblenden
Antwort: C
A läuft 0–2, B 2–3, C 3–5, B 5–8 und A 8–16. Die Durchlaufzeiten sind 16, 6 und 2 ms, im Mittel 8 ms. Würde B beendet, bevor C berücksichtigt wird, bliebe die zweite Verdrängung unberücksichtigt: Bei 3 ms benötigt B noch 3 ms und C nur 2 ms.

Frage 6 von 10

Bei 0 ms beginnt Aufgabe D eine Geräteoperation von 7 ms und blockiert. Aufgabe E ist bereit und benötigt 5 ms CPU-Zeit ohne Ein-/Ausgabe. Wann endet E, wenn die CPU arbeitserhaltend arbeitet und kein Wechselaufwand entsteht?
  1. Bei 7 ms.
  2. Bei 12 ms.
  3. Bei 2 ms.
  4. Bei 5 ms.
Antwort zeigenAntwort ausblenden
Antwort: D
E kann die CPU sofort nutzen, während die Geräteoperation von D abläuft, sodass seine fünf Millisekunden Bedienzeit bei 5 ms enden. Würde E bis zum Ende der Operation von D warten, ergäben sich 12 ms. D ist aber blockiert und belegt die CPU nicht. Gerätezeit und CPU-Zeit einer anderen Aufgabe können sich überlappen.

Frage 7 von 10

Das Round-Robin-Verfahren nutzt ein Zeitquantum von 3 ms. A kommt bei 0 ms an und benötigt 7 ms, B bei 1 ms und benötigt 4 ms, C bei 3 ms und benötigt 2 ms. Eine Ankunft am Ende einer Zeitscheibe wird vor dem verdrängten Auftrag eingereiht. Wann endet A? Berücksichtige keinen Wechselaufwand.
  1. Bei 13 ms.
  2. Bei 10 ms.
  3. Bei 11 ms.
  4. Bei 12 ms.
Antwort zeigenAntwort ausblenden
Antwort: A
Die Einsätze sind A 0–3, B 3–6, C 6–8, A 8–11, B 11–12 und A 12–13. A benötigt seine letzte Millisekunde nach dem letzten Einsatz von B und endet daher bei 13 ms. Würde A vor dem am Ende der Zeitscheibe ankommenden C eingereiht, änderte sich die Warteschlange nach der ersten Zeitscheibe fälschlich.

Frage 8 von 10

Ein sich wiederholender Schedulingzyklus enthält 3,8 ms nützliche CPU-Arbeit, gefolgt von einem Wechsel von 0,2 ms. Welcher Anteil der verstrichenen Zeit ist Wechselaufwand?
  1. 5,26 %.
  2. 5 %.
  3. 0,05 %.
  4. 95 %.
Antwort zeigenAntwort ausblenden
Antwort: B
Der gesamte Zyklus dauert 4 ms, davon entfallen 0,2 ms auf den Wechsel. Der Anteil beträgt also 0,05 oder 5 %. Die Division durch nur 3,8 ms nützliche Arbeit ergibt etwa 5,26 %, aber das ist ein Verhältnis zur nützlichen Arbeit und nicht der gefragte Anteil an der gesamten verstrichenen Zeit.

Frage 9 von 10

Die bereiten Aufträge P, Q, R und S haben die Lehrbuchprioritäten 7, 2, 5 und 9. Kleinere Zahlen bedeuten eine höhere Priorität. Welcher läuft beim Prioritätsscheduling zuerst?
  1. P.
  2. R.
  3. S.
  4. Q.
Antwort zeigenAntwort ausblenden
Antwort: D
Q hat die kleinste Prioritätszahl und damit den höchsten Rang auf dieser Skala. Prioritätsscheduling wählt Q unabhängig von den Namen vor P, R oder S aus. Wer S wegen der größten Zahl wählt, wendet die Windows-Richtung auf eine ausdrücklich umgekehrt definierte Skala an.

Frage 10 von 10

Eine laufende Aufgabe startet freiwillig einen Lesevorgang und wird blockiert. Eine andere bereite Aufgabe wird ausgewählt. Erfordert diese Übergabe Scheduling mit Verdrängung?
  1. Ja; jeder Wechsel ist Verdrängung.
  2. Nein; Blockieren gibt die CPU frei.
  3. Ja; Ein-/Ausgabe ist ein Timerereignis.
  4. Nein; die blockierte Aufgabe läuft weiter.
Antwort zeigenAntwort ausblenden
Antwort: B
Eine blockierte Aufgabe kann nicht weiterlaufen, sodass auch ein Scheduler ohne Verdrängung einen anderen Auftrag wählen kann. Verdrängung entzieht ausdrücklich einer Aufgabe die CPU, die weiterhin laufen könnte. Wer jeden Kontextwechsel Verdrängung nennt, verwechselt den Wechselmechanismus mit dem Grund für die Übergabe.
Set 2: Verfolge Prioritäten, Kontingente und Rückkopplung10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Ein Thread mit hoher Priorität wartet auf eine Sperre, die ein Thread mit niedriger Priorität hält, während ein Thread mit mittlerer Priorität weiterläuft. Wie heißt dieses Schedulingproblem?
  1. Alterung der Priorität.
  2. Round-Robin-Abwechslung.
  3. Prioritätsinversion.
  4. CPU-Lastungleichgewicht.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Ein bereiter Auftrag beginnt mit Priorität 12, wobei kleinere Zahlen höher sind. Alterung verbessert seine Priorität alle 15 ms Wartezeit im Zustand „bereit“ um eins. Welchen Rang hat er bei 90 ms gegenüber einem bereiten Auftrag mit Priorität 5?
  1. Priorität 6; er steht weiterhin niedriger.
  2. Priorität 5; beide stehen nun gleich.
  3. Priorität 6; er steht nun höher.
  4. Priorität 7; er steht weiterhin niedriger.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Eine MLFQ-Stufe hat ein Zeitquantum von 4 ms und ein kumulatives Kontingent von 10 ms. Eine Aufgabe verbraucht 4 ms, später 3 ms und läuft dann weiter. Wie viel CPU-Bedienzeit bleibt vor der Herabstufung?
  1. 4 ms.
  2. 3 ms.
  3. 6 ms.
  4. 7 ms.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Eine MLFQ hat Q2 über Q1 über Q0 mit Zeitquanten von 4 ms und Kontingenten von 4 ms auf jeder Stufe. A kommt bei 0 ms an und benötigt 15 ms; B kommt bei 6 ms an und benötigt 3 ms. Es gibt keine Anhebungen und keinen Wechselaufwand. Wann läuft A erstmals in Q0?
  1. Bei 8 ms.
  2. Bei 9 ms.
  3. Bei 12 ms.
  4. Bei 11 ms.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Eine Aufgabe läuft 5 ms, blockiert 1 ms und wiederholt dies. Ihr Kontingent auf der höchsten Stufe beträgt 8 ms; der CPU-Verbrauch wird kumulativ erfasst und es gibt keine Anhebungen. Während welches CPU-Bursts wird sie erstmals herabgestuft?
  1. Während ihres zweiten CPU-Bursts.
  2. Nach ihrem ersten vollen CPU-Burst.
  3. Während ihres dritten CPU-Bursts.
  4. Sie behält unbegrenzt die höchste Priorität.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Ein MLFQ-Auftrag befindet sich in Q1 und hat 7 ms seines Kontingents von 12 ms verbraucht. Er läuft 3 ms, blockiert 5 ms und läuft dann erneut. Es findet keine Anhebung statt. Nach welcher verstrichenen Zeit ab Beginn dieser Ereignisse wird er herabgestuft?
  1. Nach 5 ms.
  2. Nach 8 ms.
  3. Nach 13 ms.
  4. Nach 10 ms.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Ein CPU-gebundener Auftrag wartete in der untersten Warteschlange, verarbeitet nun aber nach Eingaben kurze CPU-Bursts. Welcher MLFQ-Mechanismus ermöglicht es, sein neues Verhalten wieder von oben zu erlernen?
  1. Ein längeres Zeitquantum unten.
  2. Ein größeres Kontingent unten.
  3. Eine regelmäßige Prioritätsanhebung.
  4. Ein Rücksetzen bei jeder frühen Abgabe.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Drei ausführbare Lotterieaufträge besitzen 40, 60 und 100 Tickets. Wie groß ist die Gewinnchance des zweiten Auftrags bei der nächsten Ziehung?
  1. 20 %.
  2. 30 %.
  3. 40 %.
  4. 60 %.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Ein Benutzer hat 120 globale Tickets und gibt den lokalen Aufträgen L und M 1 beziehungsweise 3 lokale Tickets. Ein zweiter Benutzer hat 80 globale Tickets für einen ausführbaren Auftrag. Alle Aufträge bleiben ausführbar. Wie groß ist der erwartete systemweite CPU-Anteil von L, wenn der erste Benutzer beide lokalen Zuteilungen verdoppelt?
  1. 15 %.
  2. 25 %.
  3. 30 %.
  4. 7,5 %.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Zwei Stride-Aufträge haben gleiche Pass-Werte. Auftrag A hat 20 Tickets und Auftrag B hat 40, bei einer Stride-Konstanten von 800. Um wie viel steigt der Pass-Wert von A, nachdem A eine Zeitscheibe erhält?
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 3: Verfolge Ticket- und virtuelle Zeiterfassung10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Die Lotterieaufträge A, B und C besitzen in dieser Reihenfolge 35, 25 und 40 Tickets. Die Ticketnummerierung beginnt bei null. Welcher Auftrag gewinnt bei einer gezogenen 60?
  1. A.
  2. B.
  3. B und C stehen gleich.
  4. C.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Ein Lotterieauftrag besitzt 20 % aller Tickets ausführbarer Aufträge und gewinnt 2 der ersten 20 gleich langen Zeitscheiben. Was lässt sich aus diesem Ergebnis schließen?
  1. Sein Ticketanteil muss nun 10 % sein.
  2. Es kann bei einer fairen Ziehung auftreten.
  3. Seine nächsten zwei Gewinne sind garantiert.
  4. Die Lotterie muss falsch implementiert sein.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Benutzer X hat 180 globale Tickets, lokal aufgeteilt als A:2 und B:1. Benutzer Y hat 120 globale Tickets für C. Alle drei Aufträge sind ausführbar. X ändert nur die lokale Zahl von A von 2 auf 5. Wie groß ist der neue erwartete Systemanteil von B?
  1. 20 %.
  2. 16,67 %.
  3. 10 %.
  4. 8,33 %.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Die Stride-Aufträge A, B und C haben 30, 60 und 20 Tickets, bei einer Konstanten von 600 und anfänglich durchgehendem Pass-Wert null. Löse Gleichstände alphabetisch auf. Wie lautet die Auswahlfolge der ersten sechs Aufträge?
  1. A, B, C, B, A, B.
  2. A, B, C, A, B, C.
  3. A, B, C, B, C, A.
  4. A, B, C, B, B, A.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Bestehende Stride-Pass-Werte sind 420, 440 und 460. Eine neue Aufgabe wird mit dem aktuellen kleinsten Pass-Wert initialisiert. Wie lautet ihr anfänglicher Pass-Wert?
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Die Stride-Aufträge A und B haben die Schrittweiten 15 und 40 und beginnen beide mit Pass-Wert null. Löse Gleichstände alphabetisch auf. Wie viele Zeitscheiben hat A erhalten, wenn ihre Pass-Werte erstmals wieder gleich sind?
  1. 3 Zeitscheiben.
  2. 8 Zeitscheiben.
  3. 5 Zeitscheiben.
  4. 11 Zeitscheiben.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Ein klassisches CFS-Modell hat Aufgabengewichte von 1024 und 512 und einen angestrebten Zeitraum von 30 ms, ohne aktive Mindestgranularitätsbeschränkung. Welche nominelle Zeitscheibe erhält die schwächer gewichtete Aufgabe?
  1. 5 ms.
  2. 15 ms.
  3. 20 ms.
  4. 10 ms.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Eine Aufgabe mit Gewicht 256 läuft in einem klassischen CFS-Modell 2 reale ms. Wie viel virtuelle Laufzeit erhält sie?
  1. 0,5 virtuelle ms.
  2. 2 virtuelle ms.
  3. 8 virtuelle ms.
  4. 4 virtuelle ms.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Bei einer EEVDF-Entscheidung hat A den Lag −1 und die virtuelle Frist 6, B den Lag 2 und die Frist 12 und C den Lag 0 und die Frist 9. Welche Aufgabe läuft als Nächstes?
  1. A.
  2. C.
  3. B.
  4. A und C stehen gleich.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Zwei stets ausführbare Aufgaben der fairen Klasse mit gleichem Gewicht konkurrieren auf einer CPU. Eine fordert kürzere EEVDF-Zeitscheiben an. Was sollte sich ändern, ohne ihr Gewicht zu ändern?
  1. Ihr Anteil verdoppelt sich; ihre Latenz bleibt gleich.
  2. Ihr Anteil sinkt; ihre Fristen bleiben gleich.
  3. Ihre Latenz bleibt gleich; ihr Anteil wird zufällig.
  4. Ihre Latenz kann sich verbessern; ihr Anteil bleibt gleich.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 4: Platziere Arbeit und deute Linux-Steuerungen10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Ein Programm hat einen ausführbaren Thread und keine Hilfsprozesse. Wie viele logische CPUs können diesen Thread im selben Moment ausführen?
  1. Eine.
  2. Zwei.
  3. Alle CPUs seiner Affinitätsmaske.
  4. Alle CPUs, die seinen Cache teilen.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Zwei CPUs lesen jeweils eine gemeinsame Warteschlangenlänge, ändern einen Eintrag und schreiben dann eine aktualisierte Länge. Ihre Caches sind kohärent. Was wird zusätzlich benötigt, um die Aktualisierung zu schützen?
  1. Eine Cache-Invalidierung vor jedem Lesen der Warteschlange.
  2. Ein längeres Zeitquantum für jede Aufgabe.
  3. Eine Synchronisierung über die gesamte Warteschlangenoperation.
  4. Nur eine doppelte private Warteschlangenlänge.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Zwei identische CPUs bedienen die gleichen CPU-gebundenen Aufträge A, B und C. Für 12 ms läuft A allein, während B und C sich die andere CPU gleichmäßig teilen. Für die nächsten 6 ms läuft B allein, während A und C teilen; für die letzten 6 ms läuft C allein, während A und B teilen. Wie groß ist nach 24 ms die größte minus die kleinste CPU-Bedienzeit pro Auftrag, wenn der Aufwand unberücksichtigt bleibt?
  1. 0 ms.
  2. 6 ms.
  3. 12 ms.
  4. 3 ms.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Drei Aufträge ohne Ein-/Ausgabe sind bei 0 ms bereit: A benötigt 8 ms, B 2 ms und C 6 ms. A und B dürfen nur auf CPU 1 laufen; C darf auf CPU 0 oder 1 laufen. Beide CPUs sind identisch und arbeitserhaltend, mit lokalem SJF und kostenloser Migration. Was ist die niedrigste erreichbare mittlere Durchlaufzeit?
  1. 5,33 ms.
  2. 6 ms.
  3. 8 ms.
  4. 8,67 ms.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Ein Programm wird aus einer Shell mit Nice 0 durch nice -n 8 ./worker gestartet. Was ändert der Befehl beim normalen fairen Scheduling mit beschäftigten Konkurrenten?
  1. Der Arbeitsprozess wird stärker bevorzugt.
  2. Der Arbeitsprozess wird weniger bevorzugt.
  3. Der Arbeitsprozess erhält Echtzeitpriorität 8.
  4. Der Arbeitsprozess wird auf 8 % einer CPU begrenzt.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Zwei cgroups auf derselben Ebene teilen sich eine CPU. A hat Gewicht 300 und eine Quote von 40 ms pro 100 ms; B hat Gewicht 100 und keine Quote. Beide sind ständig beschäftigt. Berücksichtige keinen Verwaltungsaufwand. Welche mittlere Zuteilung ist über vollständige Quotenzeiträume möglich?
  1. A 75 %; B 25 %.
  2. A 40 %; B 25 %.
  3. A 40 %; B 60 %.
  4. A 30 %; B 70 %.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Bei einer cgroup ist cpu.max auf „60000 100000“ gesetzt. Zu Beginn eines neuen Zeitraums laufen zwei ihrer Threads gleichzeitig auf zwei CPUs. Nach wie viel verstrichener Laufzeit erschöpfen sie das Budget?
  1. 30 ms.
  2. 60 ms.
  3. 100 ms.
  4. 120 ms.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Zwei bereite Linux-Echtzeit-Tasks können auf derselben CPU laufen: Einer nutzt SCHED_FIFO mit Priorität 35, der andere SCHED_RR mit Priorität 45. Welcher hat den höheren Vorrang?
  1. Der FIFO-Task mit Priorität 35.
  2. Keiner; sie teilen sich die CPU.
  3. Der Task mit dem niedrigeren Nice-Wert.
  4. Der RR-Task mit Priorität 45.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Ein Windows-Thread hat die Basispriorität 10 und wird auf die dynamische Priorität 14 angehoben. Danach verbraucht er ohne weitere Anhebungen drei vollständige Zeitquanten. Wie hoch ist seine dynamische Priorität?
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Eine stabile Bereitwarteschlange erhält 250 Aufträge/s und enthält im Mittel 5 wartende Aufträge. Jeder Auftrag nutzt nach Verlassen der Warteschlange 8 ms CPU-Zeit ohne weitere Verzögerung. Wie groß ist seine mittlere Zeit von der Ankunft bis zum Abschluss?
  1. 28 ms.
  2. 20 ms.
  3. 8 ms.
  4. 12 ms.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 5: Vergleiche Systemverhalten und bewerte Ergebnisse10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Ein Windows-Prozess hat die Prioritätsklasse Normal und einen Thread auf der relativen Stufe Highest. Welche Basispriorität hat diese Kombination?
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Ein Windows-Thread hat die Basispriorität 18 und beendet ein Warten auf die Tastatur. Hebt ihn der normale Mechanismus für dynamische Prioritätsanhebungen an?
  1. Ja; eine Tastatureingabe führt immer zur Anhebung.
  2. Nein; seine Basispriorität liegt im Echtzeitbereich.
  3. Nein; nur CPU-gebundene Threads werden angehoben.
  4. Ja; seine Basispriorität wird dauerhaft auf 31 gesetzt.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Die Aufträge A und B ohne Ein-/Ausgabe kommen gleichzeitig an und benötigen 6 ms beziehungsweise 2 ms. Alphabetisch aufgelöste Gleichstände setzen A bei FIFO und RR an die erste Stelle. Vergleiche FIFO mit RR bei 2 ms Zeitquantum und berücksichtige keinen Wechselaufwand. Wie verändert RR die mittlere Antwortzeit und Durchlaufzeit?
  1. Die Antwortzeit verbessert sich um 2 ms; die Durchlaufzeit verbessert sich um 1 ms.
  2. Die Antwortzeit verbessert sich um 1 ms; die Durchlaufzeit verschlechtert sich um 2 ms.
  3. Die Antwortzeit verbessert sich um 2 ms; die Durchlaufzeit verschlechtert sich um 1 ms.
  4. Die Antwortzeit verschlechtert sich um 2 ms; die Durchlaufzeit verbessert sich um 1 ms.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Ein stabiles System enthält im Mittel 6 Aufträge und schließt 15 Aufträge/s ab, was seiner Ankunftsrate entspricht. Wie groß ist die mittlere Verweildauer?
  1. 2,50 s.
  2. 0,90 s.
  3. 0,10 s.
  4. 0,40 s.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Zwei RR-Entwürfe nutzen nützliche Zeitquanten von 0,9 ms und 4,9 ms. Auf jedes vollständige Zeitquantum folgt ein Wechsel von 0,1 ms. Die nützliche Ausführung schließt 2 Datensätze pro CPU-Millisekunde ab. Welcher Entwurf erreicht mindestens 1900 Datensätze/s und welchen Durchsatz erzielt er? Gehe davon aus, dass sich vollständige Zeitquanten ununterbrochen wiederholen.
  1. Der Entwurf mit 0,9 ms; 2000 Datensätze/s.
  2. Beide Entwürfe; jeweils 2000 Datensätze/s.
  3. Der Entwurf mit 4,9 ms; 1900 Datensätze/s.
  4. Der Entwurf mit 4,9 ms; 1960 Datensätze/s.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Eine MLFQ nutzt zwei Warteschlangen. Das obere Zeitquantum und Kontingent betragen 3 ms; das untere Zeitquantum beträgt 6 ms. Bei 0 ms werden A und B in dieser Reihenfolge nach oben angehoben und haben noch 10 ms beziehungsweise 4 ms vor sich. Es gibt keine Ankünfte, weiteren Anhebungen oder Kosten. Wann endet B?
  1. Bei 7 ms.
  2. Bei 10 ms.
  3. Bei 13 ms.
  4. Bei 14 ms.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Eine Migration benötigt 2 ms, um nützliche Cache-Inhalte wiederherzustellen. In der aktuellen Warteschlange zu bleiben bedeutet 9 ms Wartezeit; das Verschieben auf eine geeignete untätige CPU hat keine weitere Verzögerung. Welchen direkten Vorteil bei Warte- und Wiederherstellungszeit bietet die Migration?
  1. 7 ms.
  2. 11 ms.
  3. 9 ms.
  4. 2 ms.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Zwei stets ausführbare faire Aufgaben haben auf einer CPU die Gewichte 2048 und 1024. Beide erhalten Bedienzeit, bis sie ausgehend von gleichen Anfangswerten jeweils 12 virtuelle ms hinzugewonnen haben. Wie viel reale CPU-Bedienzeit hat die stärker gewichtete Aufgabe erhalten?
  1. 6 ms.
  2. 24 ms.
  3. 12 ms.
  4. 36 ms.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Ein aktiver sched_ext-BPF-Scheduler hält eine ausführbare Aufgabe auf und der Kernel erkennt den Fehler. Welche Wiederherstellung bietet die Schnittstelle?
  1. Ihn aktiv lassen und alle Nice-Gewichte erhöhen.
  2. Alle betroffenen Aufgaben zu SCHED_FIFO verschieben.
  3. Ihn abbrechen und das eingebaute faire Scheduling wiederherstellen.
  4. Seine Aufgaben blockieren, bis die BPF-Strategie neu geladen wird.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Strategie X liefert eine niedrigere mittlere Antwortzeit als Strategie Y, aber ein langer bereiter Auftrag läuft unter X während eines anhaltenden Stroms ankommender kurzer Aufträge nie. Welche zusätzliche Eigenschaft muss untersucht werden?
  1. Schutz vor Verhungern.
  2. Genauigkeit der Ankunftszeit.
  3. Gleiche Programmgrößen.
  4. Maximaler Gerätedurchsatz.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Hängst du bei deiner eigenen Aufgabe fest? Hausaufgabenhilfe

Schlüsselbegriffe

87 Schlüsselbegriffe, jeweils mit Definition

A

Alterung
Alterung ist die schrittweise Verbesserung der Priorität eines wartenden Auftrags, damit lange wartende Arbeit konkurrieren kann und Verhungern entgegengewirkt wird.
Alterung hebt einen lange wartenden Stapelauftrag in Richtung des Rangs ständig ankommender Vordergrundarbeit an.
Amortisierung
Amortisierung verteilt feste Kosten auf genügend nützliche Arbeit, sodass die Kosten einen kleineren Anteil der Gesamtzeit ausmachen.
Längere Einsätze verbessern die Amortisierung des Aufwands für das erneute Füllen des Caches nach einem Wechsel.
Antwortzeit
Die Antwortzeit in einem Schedulingablauf ist der Zeitraum von der Ankunft eines Auftrags bis zu seiner ersten CPU-Ausführung, vor späteren Wartezeiten.
Ein Editor kann eine kurze Antwortzeit haben, selbst wenn seine gesamte Operation viel später endet.

B

Basispriorität
Die Basispriorität eines Windows-Threads ist sein Ausgangsrang, der aus der Prioritätsklasse seines Prozesses und seiner relativen Threadstufe gebildet wird.
Die Prozessklasse Normal und die Threadstufe Highest ergeben eine Windows-Basispriorität von 10.

C

Cache-Affinität
Cache-Affinität ist die Bevorzugung einer Ausführung nahe der zuletzt genutzten CPU, damit eine Aufgabe vorhandene Cache-Inhalte und Übersetzungen wiederverwenden kann.
Cache-Affinität kann nach einer kurzen Verdrängung eines dort sortierenden Threads Kern 2 bevorzugen.
Cache-Kohärenz
Cache-Kohärenz hält zwischengespeicherte Kopien einzelner Speicherstellen über Kerne hinweg konsistent, ohne mehrstufige Operationen atomar zu machen.
Cache-Kohärenz kann eine Aktualisierung einer gemeinsamen Warteschlange aus mehreren Befehlen nicht vor schädlicher Verzahnung schützen.
CFS
CFS ist der klassische faire Linux-Scheduler, der in 2.6.23 eingeführt wurde und bei der Aufgabenauswahl die kleinste gewichtete virtuelle Laufzeit bevorzugt.
CFS rechnet einer schwächer gewichteten Aufgabe für dieselbe reale CPU-Bedienzeit mehr virtuelle Laufzeit an.
CPU-Affinität
CPU-Affinität beschränkt oder bevorzugt die Prozessoren, auf denen eine Aufgabe läuft; eine explizite Maske legt fest, welche CPUs erlaubt sind.
Eine auf Kern 0 beschränkte CPU-Affinität erklärt, warum die bereite Aufgabe den untätigen Kern 1 nicht nutzen kann.
CPU-Auslastung
Die CPU-Auslastung ist der Anteil eines Beobachtungsintervalls, in dem eine CPU beschäftigt ist; dazu kann Kernelaufwand gehören.
Eine CPU mit langer Bereitwarteschlange erreicht 100 % CPU-Auslastung, obwohl mehrere ihrer Aufträge schlechte Antwortzeiten haben.
CPU-Burst
Ein CPU-Burst ist eine Berechnungsphase zwischen Wartezeiten oder bis zum Abschluss. Er beschreibt den Bedarf einer Aufgabe an CPU-Bedienzeit.
Der CPU-Burst eines Texteditors nach einer Eingabe kann viel kürzer sein als der CPU-Burst eines Videokodierers.
CPU-gebundener Auftrag
Ein CPU-gebundener Auftrag benötigt lange Berechnungsphasen und wartet zwischen CPU-Bursts vergleichsweise selten auf Eingaben oder Geräte.
Ein CPU-gebundener Auftrag wie Videokodierung kann jeden verfügbaren Einsatz lange nutzen.
CPU-Scheduler
Ein CPU-Scheduler ist die Betriebssystemkomponente, die auswählt, welcher bereite Prozess oder Thread als Nächstes auf einer CPU ausgeführt werden soll.
Der CPU-Scheduler wählt den Editor aus, nachdem ein abgeschlossener Lesevorgang seinen nächsten CPU-Burst bereit gemacht hat.
CPU-Zeitkontingent
Ein CPU-Zeitkontingent ist die gesamte CPU-Bedienzeit, die eine Aufgabe auf einer MLFQ-Stufe vor der Herabstufung verbrauchen darf, gegebenenfalls über mehrere Einsätze hinweg.
Das Kontingent von 15 ms erlaubt drei vollständige Zeitquanten von 5 ms auf derselben Prioritätsstufe.
cpu.max
Die Einstellung cpu.max begrenzt die gesamte CPU-Bedienzeit einer cgroup-v2-Gruppe innerhalb jedes konfigurierten Bandbreitenzeitraums.
Eine cpu.max-Quote kann eine Gruppe drosseln, nachdem ihre Arbeitsprozesse das Budget des Zeitraums gemeinsam verbraucht haben.
cpu.weight
Die Einstellung cpu.weight weist einer cgroup-v2-Gruppe ein relatives Gewicht für faire Bedienung zu, wenn sie mit aktiven Gruppen derselben Ebene konkurriert.
Ein Dienst mit cpu.weight 300 konkurriert um etwa dreimal so viel Bedienzeit wie eine beschäftigte Gruppe derselben Ebene mit 100.

D

Deterministische Modellierung
Deterministische Modellierung bewertet Schedulingstrategien anhand einer festen Arbeitslast mit angegebenen Ankunftszeiten, Bedarfen und modellierten Kosten.
Deterministische Modellierung macht jede Schedulingentscheidung nachvollziehbar, liefert aber nur Ergebnisse für diesen Ablauf.
Dienstgüte
Die Dienstgüte ist eine Klassifizierung der Dringlichkeit von Arbeit, mit der macOS Bedienentscheidungen einschließlich der Platzierung auf Kerntypen steuert.
Die Dienstgüte für Hintergrundarbeit signalisiert auf Apple Silicon eine andere Dringlichkeit als benutzerinteraktive Arbeit.
Dispatch-Latenz
Die Dispatch-Latenz ist die Verzögerung bei der Übergabe der CPU-Ausführung von einer Aufgabe an die vom Scheduler ausgewählte Aufgabe.
Bei einem kürzeren Zeitquantum macht die Dispatch-Latenz einen größeren Anteil jedes Bedienzyklus aus.
Dispatcher
Der Dispatcher ist der Mechanismus, der eine Schedulingentscheidung ausführt, indem er Aufgabenzustände sichert und wiederherstellt und die Ausführung fortsetzt.
Der Dispatcher stellt die Register des ausgewählten Threads wieder her, bevor er zu dessen Benutzercode zurückkehrt.
Durchlaufzeit
Die Durchlaufzeit ist die verstrichene Zeit von der Ankunft eines Auftrags bis zu seinem Abschluss, einschließlich Bedienzeit, Wartezeiten im Zustand „bereit“ und blockierter Zeit.
Ein Stapelauftrag, der nur 7 ms CPU-Bedienzeit verbraucht, aber 18 ms nach seiner Ankunft endet, hat eine Durchlaufzeit von 18 ms.
Durchsatz
Der Durchsatz ist die Anzahl abgeschlossener Aufträge pro Einheit verstrichener Zeit während eines angegebenen Beobachtungsintervalls.
Ein Test zum Vergleich zweier Schedulingstrategien gibt den Durchsatz für jede Strategie über dasselbe Intervall in Aufträgen pro Sekunde an.
Dynamische Priorität
Die dynamische Priorität eines Windows-Threads ist sein aktueller Schedulingrang, der im variablen Bereich vorübergehend über die Basispriorität steigen kann.
Die dynamische Priorität des Threads sinkt nach jedem vollständigen angehobenen Zeitquantum in Richtung seiner Basispriorität.

E

EEVDF
EEVDF ist eine Auswahl in der fairen Klasse, die unter Aufgaben mit zulässigem Anspruch die früheste virtuelle Frist wählt.
EEVDF kann eine zugelassene kurze Anforderung bevorzugen, ohne den langfristigen gewichteten Anteil der Aufgabe zu erhöhen.
Ein-/ausgabegebundener Auftrag
Ein ein-/ausgabegebundener Auftrag hat häufig kurze CPU-Bursts, die durch Geräte- oder Eingabewartezeiten getrennt sind, und benötigt oft schnelle Bedienung, wenn er bereit wird.
Ein ein-/ausgabegebundener Auftrag wie ein Editor kann nach jedem Tastendruck kurz laufen und dann wieder blockieren.
Exponentielle Glättung
Exponentielle Glättung sagt einen nächsten CPU-Burst vorher, indem sie einen festen Anteil der letzten Messung mit der vorherigen Schätzung kombiniert.
Bei exponentieller Glättung lässt ein größeres Messgewicht Vorhersagen schneller auf neue CPU-Bursts reagieren.

F

FIFO
FIFO ist eine Strategie ohne Verdrängung, die bereite Aufgaben in Ankunftsreihenfolge auswählt und einen laufenden CPU-Burst fortsetzt, bis er endet oder die CPU abgibt.
Unter FIFO wartet ein kurzer neu angekommener CPU-Burst hinter dem bereits laufenden langen CPU-Burst.

G

Geräteinterrupt
Ein Geräteinterrupt signalisiert ein Ereignis wie den Abschluss einer Ein-/Ausgabe und ermöglicht dem Kernel, wartende Arbeit wieder bereit zu machen.
Ein Geräteinterrupt signalisiert den abgeschlossenen Lesevorgang eines Editors und versetzt diesen von „blockiert“ zu „bereit“.
Gesetz von Little
Das Gesetz von Little verknüpft mittlere Anzahl, Ankunftsrate und Verweildauer in einem stabilen System im stationären Zustand bei einheitlicher Abgrenzung.
Das Gesetz von Little ergibt eine mittlere Anzahl von vier, wenn pro Sekunde acht Aufträge ankommen und 0,5 s bleiben.

H

Herabstufung
Herabstufung ist der Wechsel auf eine MLFQ-Stufe mit niedrigerer Priorität, nachdem eine Aufgabe das ihrer aktuellen Stufe zugewiesene Bedienkontingent verbraucht hat.
Durch die Herabstufung steht die lange Berechnung hinter neu bereiter Arbeit in einer höheren Warteschlange.

I

Interaktiver Auftrag
Ein interaktiver Auftrag reagiert häufig auf Eingaben oder andere Ereignisse mit kurzen CPU-Bursts, die durch Wartezeiten getrennt sind.
Ein interaktiver Auftrag kann den größten Teil der verstrichenen Zeit blockiert verbringen und dennoch nach jeder Eingabe schnelle Bedienung benötigen.
Intervall zwischen Prioritätsanhebungen
Das Intervall zwischen Prioritätsanhebungen ist die verstrichene Zeit zwischen MLFQ-weiten Rücksetzungen der Priorität und wägt neue Chancen gegen eine nützliche Prioritätstrennung ab.
Ein sehr kurzes Intervall zwischen Prioritätsanhebungen bringt lange Berechnungen wiederholt in die interaktiven Warteschlangen zurück.

K

Kontextwechselaufwand
Kontextwechselaufwand ist CPU-Zeit, die für Ausführungsübergaben zwischen Aufgaben und die Wiederherstellung eines für die Ausführung nützlichen Zustands statt für Anwendungsarbeit aufgewendet wird.
Ein winziges Zeitquantum erhöht den Kontextwechselaufwand, weil häufige Übergaben die nützlichen CPU-Bursts trennen.
Kontrollgruppe
Eine Kontrollgruppe ist eine Linux-Gruppierung von Prozessen oder Threads, auf die Controller Strategien zur Ressourcenzuteilung und zum Ressourcenverbrauch anwenden.
Eine Kontrollgruppe lässt das CPU-Budget eines Dienstes mehrere kooperierende Arbeitsprozesse umfassen.
Konvoieffekt
Der Konvoieffekt ist die Verzögerung kurzer Aufgaben, die hinter einem langen CPU-Burst warten, wodurch schlechte mittlere Abschlusszeiten entstehen.
Der Konvoieffekt wird sichtbar, wenn mehrere sehr kleine Aufträge erst nach dem ersten großen Auftrag enden.
Kumulative Verbrauchserfassung
Kumulative Verbrauchserfassung addiert die CPU-Nutzung einer Aufgabe über Einsätze auf einer Prioritätsstufe hinweg, sodass Blockieren oder Prozessorabgabe verbrauchtes Kontingent nicht löschen kann.
Die kumulative Verbrauchserfassung stuft die Aufgabe herab, obwohl keiner ihrer einzelnen CPU-Bursts ein volles Zeitquantum dauert.

L

Lag
Lag ist die Differenz zwischen der CPU-Bedienzeit, die einer Aufgabe zusteht, und der Bedienzeit, die sie erhalten hat; ein positiver Lag zeigt zustehende Bedienzeit an.
Eine Aufgabe mit negativem Lag hat bereits zusätzliche Bedienzeit erhalten und ist unter EEVDF nicht zugelassen.
Langfristiger Scheduler
Ein langfristiger Scheduler steuert, welche eingereichten Aufträge in ein System gelangen, und beeinflusst dadurch dessen Grad des Mehrprogrammbetriebs.
Der langfristige Scheduler eines Clusters lässt einen weiteren Stapelauftrag zu, wenn Kapazität verfügbar wird.
Lastaufzeichnung
Eine Lastaufzeichnung ist eine aufgezeichnete Folge von Ereignissen wie Ankünften, CPU-Bursts und Wartezeiten, die ein Schedulingexperiment antreiben kann.
Eine Lastaufzeichnung aus interaktiver Nutzung kann Verzögerungen aufdecken, die in einem Stapeltest ohne Ein-/Ausgabe fehlen.
Lastungleichgewicht
Ein Lastungleichgewicht ist eine ungleiche Verteilung ausführbaren Bedarfs auf CPUs, die Kapazität verschwenden oder vergleichbaren Aufträgen ungleiche Bedienzeit geben kann.
Ein Lastungleichgewicht zeigt sich, wenn eine einzelne Aufgabe eine ganze CPU erhält, während zwei vergleichbare Aufgaben eine andere teilen.
Lotterie-Scheduling
Lotterie-Scheduling wählt jede nächste CPU-Zeitscheibe durch eine zufällige Ticketziehung und gibt ausführbaren Aufgaben Gewinnchancen proportional zu ihren Tickets.
Lotterie-Scheduling kann einem Auftrag mit 60 Tickets in seinen ersten zehn Ziehungen weniger als sechs Gewinne geben.

M

Manipulation des Schedulers
Manipulation des Schedulers ist die absichtliche Beeinflussung des beobachteten Verhaltens, um Bedienvorteile zu erhalten, die die Strategie nicht gewähren sollte.
Die Manipulation des Schedulers gelingt, wenn eine Regel für frühe Prozessorabgabe die vor jeder Ein-/Ausgabe genutzte CPU-Zeit vergisst.
Migration
Migration verschiebt den Ausführungsort einer Aufgabe zwischen CPUs, oft um ein Ungleichgewicht auf Kosten der Cache- und Speicherlokalität zu korrigieren.
Migration auf eine geeignete untätige CPU kann mehr Wartezeit sparen, als das erneute Füllen der Caches kostet.
Mindestgranularität
Die Mindestgranularität ist die untere Größe eines Bedienungseinsatzes im klassischen CFS und verhindert, dass viele ausführbare Aufgaben übermäßig kurze Zeitscheiben erzeugen.
Die Mindestgranularität kann dazu führen, dass der gesamte Schedulingzeitraum bei starker Konkurrenz seinen Zielwert überschreitet.
Mittelfristiger Scheduler
Ein mittelfristiger Scheduler suspendiert vorübergehend ganze Prozesse, indem er sie aus dem Speicher auslagert und später wiederherstellt.
Ein mittelfristiger Scheduler kann den Speicherdruck verringern, indem er einen Prozess vorübergehend suspendiert.
MLFQ
Eine MLFQ ist ein Scheduler mit mehreren Prioritätswarteschlangen, der die Warteschlange eines Auftrags anhand des beobachteten CPU-Verbrauchs und der Rückkopplung ändert.
Die MLFQ startet den neuen Auftrag oben und stuft ihn nach anhaltender CPU-Nutzung herab.
MQMS
MQMS ist Mehrprozessorscheduling mit lokalen Bereitwarteschlangen pro CPU, das skalierbare lokale Auswahl unterstützt, aber Lastausgleich benötigt.
MQMS kann eine CPU untätig lassen, während zwei bereite Aufgaben einer anderen CPU zugewiesen bleiben.

N

Nice-Wert
Ein Nice-Wert ist eine für Benutzer zugängliche Prioritätseingabe für normale Linux-Tasks und reicht von −20, am stärksten bevorzugt, bis +19, am wenigsten bevorzugt.
Ein größerer Nice-Wert verringert den relativen CPU-Anteil eines normalen Tasks, wenn Konkurrenten ausführbar sind.
NUMA
NUMA ist eine Speicherarchitektur, bei der die Zugriffslatenz davon abhängt, ob der Speicher beim ausführenden Prozessor oder auf einem anderen Knoten liegt.
NUMA-Platzierung ist wichtig, wenn ein migrierter Thread wiederholt auf Speicher an seinem vorherigen Prozessorsockel zugreift.

P

Pass-Wert
Ein Pass-Wert erfasst den gewichteten Bedienfortschritt beim Stride-Scheduling und wird zur Auswahl eines Einsatzes mit den Pass-Werten anderer ausführbarer Aufträge verglichen.
Die Aufgabe mit Pass-Wert 40 läuft vor einem Konkurrenten, dessen Pass-Wert bereits 60 erreicht hat.
Prioritätsanhebung
Eine Prioritätsanhebung erhöht vorübergehend den Schedulingrang; eine MLFQ-weite Anhebung bringt Aufträge nach oben zurück, damit ihr Verhalten neu erlernt werden kann.
Die Prioritätsanhebung gibt dem lange wartenden Auftrag aus der untersten Warteschlange eine neue Chance, oben zu laufen.
Prioritätsinversion
Prioritätsinversion entsteht, wenn Arbeit mit hoher Priorität auf eine Abhängigkeit mit niedrigerer Priorität wartet, die durch Ausführung mit mittlerer Priorität verzögert werden kann.
Prioritätsinversion hält die dringende Aufgabe blockiert, während Arbeit mit mittlerer Priorität ihren Sperrinhaber verdrängt.
Prioritätsklasse
Eine Windows-Prioritätsklasse ist eine Einstellung auf Prozessebene, die zusammen mit der relativen Stufe jedes Threads dessen Basispriorität bestimmt.
Eine Änderung der Prioritätsklasse des Prozesses ändert die Zuordnung seiner Threadstufen zu Basisprioritäten.
Prioritätsscheduling
Prioritätsscheduling wählt die bereite Aufgabe mit dem höchsten Rang und löst gleiche Ränge durch eine andere Regel wie FIFO oder das Round-Robin-Verfahren auf.
Prioritätsscheduling führt in einem System mit Verdrängung eine neu bereite dringende Aufgabe vor gewöhnlicher Arbeit aus.
Prioritätsvererbung
Prioritätsvererbung gibt einem Sperrinhaber vorübergehend die Priorität einer Aufgabe mit höherer Priorität, die auf diese Sperre wartet.
Prioritätsvererbung lässt den Inhaber mit niedrigem Rang lange genug laufen, um die benötigte Sperre freizugeben.
Proportionaler Anteil
Ein proportionaler Anteil ist ein angestrebter Bruchteil der umkämpften CPU-Bedienzeit, der einer Aufgabe oder Gruppe durch einen relativen Anspruch zugewiesen wird.
Der Dienst erhält einen größeren proportionalen Anteil, wenn sein Gewicht gegenüber dem einer beschäftigten Gruppe derselben Ebene steigt.

R

Räumliche Lokalität
Räumliche Lokalität ist die Tendenz eines Programms, auf Daten nahe kürzlich abgerufener Stellen zuzugreifen, etwa auf benachbarte Elemente eines Arrays.
Räumliche Lokalität hilft beim sequenziellen Durchlaufen eines Arrays, vom Abruf einer ganzen Cache-Zeile zu profitieren.
Restlaufzeit
Die Restlaufzeit ist die CPU-Bedienzeit, die ein Auftrag oder CPU-Burst nach Abzug der bereits erhaltenen Bedienzeit noch benötigt.
Der Scheduler vergleicht die Restlaufzeit des laufenden Auftrags mit dem gesamten CPU-Burst des neu ankommenden Auftrags.
Rot-Schwarz-Baum
Ein Rot-Schwarz-Baum ist ein balancierter Suchbaum; der klassische CFS ordnet eingereihte ausführbare Aufgaben in einer solchen Struktur nach virtueller Laufzeit.
Der Rot-Schwarz-Baum unterstützt Aktualisierungen in logarithmischer Zeit, während ein zwischengespeicherter Zeiger sein Minimum schnell liefert.
Round-Robin-Verfahren
Das Round-Robin-Verfahren ist eine Strategie, die bereite Aufgaben in einer FIFO-Warteschlange abwechselt und jeder höchstens ein Zeitquantum gibt, bevor sie erneut eingereiht wird.
Beim Round-Robin-Verfahren erhält ein Berichtsgenerator mit verbleibender Arbeit einen weiteren Einsatz, nachdem die anderen bereiten Aufträge gelaufen sind.

S

sched_ext
Die Klasse sched_ext lässt einen entsprechend konfigurierten Linux-Kernel einen dynamisch geladenen BPF-Scheduler ausführen und bei Fehlern zum eingebauten Scheduling zurückkehren.
Ein Fehler in der aktiven sched_ext-Strategie führt dazu, dass der Kernel das gewöhnliche faire Scheduling wiederherstellt.
SCHED_FIFO
SCHED_FIFO ist eine Linux-Echtzeitstrategie ohne Zeitquantum für gleiche Priorität; Tasks laufen bis zum Blockieren, zur freiwilligen Prozessorabgabe oder zur Verdrängung durch höhere Priorität weiter.
Ein SCHED_FIFO-Task mit Priorität 40 kann vor normaler Arbeit laufen, solange er ausführbar bleibt.
SCHED_RR
SCHED_RR ist Linux-Echtzeitscheduling, das bereite Tasks mit gleicher statischer Priorität anhand von Zeitquanten abwechselt.
SCHED_RR lässt zwei Tasks mit Priorität 50 abwechselnd laufen, während Priorität 60 jeden von ihnen verdrängen kann.
Schrittweite
Eine Schrittweite ist eine gemeinsame Konstante geteilt durch die Ticketzahl einer Aufgabe und wird nach einer erhaltenen Bedienzeitscheibe zu ihrem Pass-Wert addiert.
Eine kleinere Schrittweite lässt den Pass-Wert des bevorzugten Auftrags nach jedem ausgewählten Einsatz langsamer steigen.
Shortest Job First
Shortest Job First ist eine Strategie ohne Verdrängung, die die bereite Aufgabe mit dem kürzesten bekannten oder vorhergesagten nächsten CPU-Burst auswählt.
Shortest Job First wählt einen bereiten CPU-Burst von 3 ms vor einem bereiten CPU-Burst von 11 ms.
Simulation
Eine Simulation bewertet einen Scheduler, indem sie ein Modell mit synthetischen Arbeitslasten oder aufgezeichneten Ereignissen ausführt und das resultierende Verhalten misst.
Eine Simulation kann denselben Ablauf von Ankünften und Blockierungen mit zwei Schedulingstrategien durchspielen.
SMP
SMP ist ein Mehrprozessorentwurf, bei dem CPUs Betriebssystemcode ausführen und selbst Schedulingentscheidungen treffen können.
Ein SMP-Kernel koordiniert gleichzeitige Aktualisierungen der Bereitwarteschlange durch mehrere CPUs.
SMT
SMT lässt mehrere logische CPUs die Ausführungsressourcen eines physischen Kerns teilen und bietet parallele Befehlsströme bei gemeinsamer Kapazität.
Zwei CPU-gebundene Threads auf logischen CPUs desselben SMT-Kerns konkurrieren direkter als Threads auf getrennten Kernen.
SQMS
SQMS ist Mehrprozessorscheduling über eine gemeinsame Bereitwarteschlange, das Arbeit leicht verteilt, aber gemeinsamen Synchronisierungsaufwand verursacht.
SQMS kann einer geeigneten untätigen CPU den nächsten wartenden Auftrag geben, ohne getrennte Warteschlangen zu durchsuchen.
STCF
STCF ist eine Strategie mit Verdrängung, die den bereiten Auftrag mit dem geringsten verbleibenden CPU-Bedarf ausführt; sie heißt auch Shortest Remaining Time First.
STCF verdrängt einen Auftrag mit 14 ms Restlaufzeit, wenn ein neu bereiter Auftrag nur 2 ms benötigt.
Stride-Scheduling
Stride-Scheduling ist eine deterministische proportionale Aufteilung, die die Aufgabe mit dem kleinsten Pass-Wert ausführt und ihren Pass-Wert um eine zur Ticketzahl umgekehrt proportionale Schrittweite erhöht.
Stride-Scheduling hält die Bedienung in kurzen Zeitfenstern ohne zufällige Lotterieziehungen nahe an den Ticketverhältnissen.

T

Tail-Latenz
Die Tail-Latenz beschreibt Verzögerungen nahe dem langsamen Ende einer Antwortzeitverteilung und wird oft durch ein hohes Perzentil angegeben.
Die Tail-Latenz des Dienstes verschlechtert sich, wenn eine kleine Anzahl von Anfragen weit länger als im Durchschnitt wartet.
Ticketinflation
Ticketinflation erhöht die eigene Ticketzahl eines Auftrags, um mehr Bedienzeit anzufordern, und benötigt Vertrauen oder Kontrollen gegen unfaire Verwässerung.
Unbeschränkte Ticketinflation erlaubt einer gierigen Aufgabe, die Gewinnwahrscheinlichkeit jedes anderen ausführbaren Auftrags zu senken.
Ticketübertragung
Ticketübertragung ist das vorübergehende Verleihen der Tickets eines Auftrags an einen anderen Auftrag, oft an einen Server, der die Anfrage des Verleihers bearbeitet.
Ticketübertragung lässt den Server, der die Anfrage des Clients bearbeitet, mit dem Anspruch des Clients konkurrieren.
Ticketwährung
Eine Ticketwährung teilt den festen globalen Anspruch eines Benutzers unter lokalen Aufträgen auf, indem sie lokale Ticketanteile in globale Tickets umrechnet.
Eine Ticketwährung lässt einen Benutzer eine feste Zuteilung von 80 Tickets auf drei lokale Aufträge aufteilen.

Ü

Überlappung von Ein-/Ausgabe und Berechnung
Eine Überlappung von Ein-/Ausgabe und Berechnung liegt vor, wenn die CPU eine Aufgabe ausführt, während eine von einer anderen Aufgabe angeforderte Geräteoperation noch läuft.
Die Überlappung von Ein-/Ausgabe und Berechnung lässt den Compiler während des Festplattenlesevorgangs des Editors Fortschritte machen.

U

ULE
ULE ist der Scheduler von FreeBSD, der Ausführungswarteschlangen pro CPU und das beobachtete Schlaf- und Laufverhalten nutzt, um interaktive Threads zu erkennen.
ULE kombiniert lokales CPU-Scheduling mit Rückkopplung darüber, wie häufig ein Thread schläft.

V

Verdrängung
Verdrängung ist der Entzug der CPU von einer laufenden Aufgabe, die weiterlaufen könnte, wobei ihr Zustand für eine spätere Fortsetzung erhalten bleibt.
Eine durch den Timer ausgelöste Verdrängung lässt einen anderen bereiten Thread laufen, bevor die Berechnung endet.
Verhungern
Verhungern ist das unbegrenzte Aufschieben eines bereiten Auftrags, weil Schedulingentscheidungen wiederholt anderen Aufträgen die CPU geben.
Ein stetiger Strom kurzer Aufträge kann unter SJF das Verhungern eines langen Auftrags verursachen.
Virtuelle Frist
Eine virtuelle Frist ist ein gewichteter Endpunkt zur Reihenfolge der Bedienung, den EEVDF verwendet, um Anforderungen von zur Bedienung zugelassenen Aufgaben zu vergleichen.
Eine frühere virtuelle Frist hilft einer kurzen zugelassenen Anforderung, früher zu laufen, ohne einen Zeitpunkt auf der Uhr zu garantieren.
Virtuelle Laufzeit
Virtuelle Laufzeit ist nach Aufgabengewicht skalierte CPU-Bedienzeit, sodass stärker gewichtete Aufgaben langsamer virtuellen Fortschritt ansammeln.
Die stärker gewichtete Aufgabe gewinnt pro Millisekunde weniger virtuelle Laufzeit und bleibt für weitere Bedienzeit konkurrenzfähig.

W

Warteschlangenmodell
Ein Warteschlangenmodell stellt Ankünfte und Bedienung durch Wahrscheinlichkeitsverteilungen dar, um mittlere Anzahlen, Verzögerungen und Kapazität zu untersuchen.
Ein Warteschlangenmodell kann die mittlere Wartezeit bei einer gewählten Verteilung der CPU-Burst-Längen schätzen.
Wartezeit
Die Wartezeit ist die Summe der Zeiträume, in denen eine Aufgabe bereit ist, aber nicht ausgeführt wird; CPU-Bedienzeit und blockierte Wartezeiten sind ausgeschlossen.
Die Wartezeit der Aufgabe umfasst sowohl die anfängliche Verzögerung in der Warteschlange als auch das Warten nach einer Verdrängung.
Work Stealing
Work Stealing ist ein Ausgleichsverfahren, bei dem eine wenig ausgelastete CPU ausführbare Arbeit aus der Warteschlange einer stärker beschäftigten CPU holt.
Work Stealing verschiebt eine eingereihte Berechnung auf den untätigen Kern, nachdem geprüft wurde, ob sie dort laufen darf.

Z

Zeitliche Lokalität
Zeitliche Lokalität ist die Tendenz eines Programms, kürzlich abgerufene Daten erneut zu verwenden, sodass zwischengespeicherte Inhalte für spätere Ausführung nützlich sind.
Zeitliche Lokalität hilft der Schleife, dieselben Tabelleneinträge aus einem bereits gefüllten Cache wiederzuverwenden.
Zeitquantum
Ein Zeitquantum ist die maximale CPU-Bedienzeit, die in einem Round-Robin-Einsatz erlaubt ist, bevor eine noch nicht abgeschlossene bereite Aufgabe verdrängt wird.
Ein Zeitquantum von 4 ms lässt eine Aufgabe mit 10 ms Arbeit über mehrere Einsätze weiterlaufen.
Zustand „bereit“
Der Zustand „bereit“ bezeichnet eine Aufgabe, die ausgeführt werden kann, aber darauf wartet, für eine verfügbare CPU ausgewählt zu werden.
Ein verdrängter Compiler kehrt in den Zustand „bereit“ zurück, während eine andere Aufgabe die CPU nutzt.
Zustand „blockiert“
Der Zustand „blockiert“ bezeichnet eine Aufgabe, die erst fortfahren kann, wenn ein Ereignis eintritt, etwa der Abschluss einer Ein-/Ausgabeanfrage.
Der Editor wechselt in den Zustand „blockiert“, während er auf das nächste Tastaturereignis wartet.

Über diese Einheit

Von StudeliFehler melden

Erstelle deine eigenen Lernmaterialien

Mach aus deinen Notizen, Folien und Dokumenten Lernleitfäden, Übungsfragen, Karteikarten und 6 weitere Tools.

Jetzt starten