5.8 KiB
Scheduling
Prozess, wie das Betriebssystem die Ausführung von Aufgaben (Prozessen, Threads, ...) plant und verwaltet
- Hauptziel: Effiziente Nutzung der Systems
- Erfüllung der Anforderungen des Systems und des Benutzers
- Kritisches Element im BS-Design
- direkter Einfluss auf Leistung, Benutzererfahrung
Aufgaben eines Schedulers
- Prozessorzuweisung
- welcher Prozess als nächstes?
- Prozessorwechsel
- Wechsel von einem laufenden Prozess zu einem anderen
- Prioritätszuweisung
- Bestimmt Priorität von Prozessen → wichtige Aufgaben werden bevorzugt behandelt
- Warteschlangenmanagement
- Verwaltung der Warteschlangen mit Prozessen
Entscheidungsverfahren
- CPU-Auslastung
- Maximierung der CPU-Auslastung
- Durchsatz
- Anzahl abgeschlossene Aufgaben pro Zeit
- Wartezeit
- Minimierung der Wartezeit der Prozesse in der Warteschlange
- Umlaufzeit
- Gesamtzeit die ein Prozess benötigt um abgeschlossen zu werden
- Antwortzeit
- Zeit zwischen der Anforderung eines Benutzers und der ersten Reaktion des Systems
Nicht präemptives Scheduling
- Art von Prozessorscheduling beo dem der laufende Prozess nicht unterbrochen werden kann
- bis CPU-Zeitscheibe vollständig oder andere Blockierungsbedingung
- Eingesetz in
- einfache Systeme, Batch-Verarbeitung-Umgebungen
- Vorhersagbarkeit, einfache Implementierung wichtiger als schnelle Reaktion auf Benutzerinteraktion
- einfache Systeme, Batch-Verarbeitung-Umgebungen
Präemptives Scheduling
- Betriebssystemkern kann Kontrolle über CPU von einem laufenden Prozess übernehmen
- kann anderem Prozess CPU-Zeit zuweisen, falls best. Bedingungen erfüllt
Prioritätengesteuertes Scheduling
- Ausführungsreihenfolge der Prozesse hängt von deren Priorität ab
- Jeder Prozess kriegt bestimmte Prio
- Scheduler nimmt Prozess mit höchster Prio
- es gibt präemptive und nicht präemptive Ansätze
- Wird in Echtzeitsystemen und vielen anderen verwendet
- wichtige oder zeitkritische Aufgaben werden bevorzugt behandelt
Zeitscheiben-Scheduling
- spezielle Form des präemptiven Schedulings
- Jeder Prozess wird für eine festgelegte Zeitscheibe auf dem Prozessor ausgeführt
- sobald abgelaufen → nächster Prozess
- wiederholt sich zyklisch
- Jeder Prozess wird für eine festgelegte Zeitscheibe auf dem Prozessor ausgeführt
- Wird verwendet in
- Mehrbenutzersystemen
Weitere Scheduling-Strategien
- First Come First Served
- Shortest / Longest Process next
- Shortest / Longest Remaining Time next
- Highest Response Ratio next
- Earliest Deadline next
- Fair-Share-Scheduling
- Multilevel-Scheduling
- ...
Scheduling unter Linux
Completely Fair Scheduler (CFS)
- faire Verteilung der CPU-Ressourcen zwischen verschiedenen Prozessen oder Threads
- erstmals in Linux im Kernel 2.6.23
- Bemühung bessere Leistung und Gerechtigkeit bei Verteilung von Ressourcen in Mehrbenutzersystemen
- Implementierungen und genutzte Algorithmen können variieren
- Bemühung bessere Leistung und Gerechtigkeit bei Verteilung von Ressourcen in Mehrbenutzersystemen
Grundprinzipien des CFS
- Fairness
- jeder ausführbare Prozess sollte proportional zur Anzahl der CPU-Ressourcen, die er benötigt, bedient werden
- Keine festen Zeitscheiben
- Ausführungszeit wird dynamisch an Prozesse angepasst
- Gewichtungen
- Prozesse mit höherem "Gewicht" erhalten größere Zeiteinteilung an CPU
- Virtual Runtime
- Gewicht und Ausführungszeit → vRuntime
- Prozesse mit kürzerer vRuntime priorisiert
- Entscheidungsstruktur: Rot-Schwarz-Baum
- Gewicht und Ausführungszeit → vRuntime
Beispiel Funktionsweise des CFS
- Neue Prozesse können während Latenz des Schedulers eingefügt werden
Manchmal möchte man die Priorität eines Prozesses verändern. Sie kann mit nice gesetzt werden
und mit renice angepasst werdenJeder Prozess kann einen nice-Wert von -20 bis 19(20) haben. Standard ist 0
Berechnung der Gewichtung (CFS)
Beispiel
-
131 Tasks (nice = 0) => Gewicht w = 1024
-
20 Tasks (nice = -20) => Gewicht w = 88817,84
-
Alle Tasks mit nice=0 belegen ca. 7% der CPU
- 1311024 / (1311024 + 20*88817,84) => ca. 7%
- tun i.d.R nichts → genug runtime
-
Alle Tasks mit nice=-20 belegen ca. 93% der CPU
niceWert
Befehle mit POSIX-API
- setpriority - niceLevel eines Prozesses setzen
- getpriority - niceLevel eines Prozesses lesen
Real-Time Scheduling
-
zielt darauf ab, dass Prozesse oder Aufgaben spezifische zeitliche Anforderungen erfüllen
-
Bsp.:
- Dekodierung von Bildern eines Videostreams
- 30 Bilder / Sekunde
- Jedes Bild muss in 1/30s dekodiert und angezeigt werden
- 30 Bilder / Sekunde
- Dekodierung von Bildern eines Videostreams
-
in harten Echtzeitsystemen müssen Aufgaben ihre zeitlichen Anforderungen strikt und zuverlässig erfüllen
- bspw. Flugzeug, medizinische Geräte, ...
-
Scheduling-Algorithmen
- Rate Monotonic Scheduling (RMS)
- Earliest Deadline First (EDF)
-
in weichen Echtzeitsystemen sind zeitliche Anforderung auch wichtig, aber Versäumnis ist nicht katastrophal
- bspw. Multimediale Anwendungen, Spiele
-
Scheduling-Algorithmen
- Weighted Fair Queuing (WFQ)
- Proportional Share Scheduling