# Zusammenfassung: Scheduling ## 1. Grundlagen und Definitionen **Was ist Scheduling?** Scheduling ist die Strategie und Methode, mit der das Betriebssystem die verfügbare Prozessorzeit (CPU-Zeit) auf die verschiedenen lauffähigen Prozesse oder Threads verteilt. ### Die drei Arten des Schedulings 1. **Kurzfristiges Scheduling (Short-Term / CPU-Scheduling):** Die Entscheidung, welcher Prozess als nächstes die CPU bekommt. (Dies ist der Fokus dieser Zusammenfassung) 2. **Mittelfristiges Scheduling:** Verwaltung des Arbeitsspeichers (Swapping, Prozess auslagern). 3. **Langfristiges Scheduling:** Entscheidung, welche Aufgaben (Jobs) überhaupt ins System zugelassen werden (Job-Queue). ### Wichtige Komponenten - **Scheduler:** Die „Logik". Er entscheidet basierend auf einem Algorithmus, welcher Prozess als nächstes laufen darf. - **Dispatcher:** Der „Mechaniker". Er führt den tatsächlichen Kontextwechsel durch. Er stoppt den alten Prozess, sichert den Status, lädt den neuen Status und übergibt die Kontrolle an die CPU. - **Dispatch-Latenz:** Die Zeit, die der Dispatcher für das Umschalten braucht. Diese Zeit ist „Verlust" (Overhead) und sollte so gering wie möglich sein. ## 2. Prozess-Verhalten: Bursts Prozesse arbeiten nicht linear. Sie wechseln ständig zwischen zwei Phasen: 1. **CPU-Burst:** Der Prozess rechnet aktiv (nutzt die CPU). 2. **E/A-Burst (I/O-Burst):** Der Prozess wartet auf Daten (Festplatte, Netzwerk, Tastatur) und nutzt die CPU nicht. ### Unterscheidung der Prozess-Typen - **CPU-gebunden (CPU-bound):** Lange CPU-Bursts, seltenes Warten. (Beispiel: Videorendering, Simulationen) - **E/A-gebunden (I/O-bound):** Kurze CPU-Bursts, häufiges Warten. (Beispiel: Texteditor, Webbrowser) - **Ziel:** Ein guter Scheduler mischt diese Typen, um die Hardware optimal auszulasten. ## 3. Wann wird geschedult? Der Scheduler muss in vier Situationen aktiv werden: 1. **Neuer Prozess:** Ein Programm wird gestartet. 2. **Prozessende:** Ein Prozess ist fertig. 3. **Blockierung:** Ein Prozess wartet auf E/A oder einen Semaphor/Mutex. 4. **Interrupt (nur bei Präemption):** Ein Hardware-Timer (Clock-Interrupt) unterbricht den laufenden Prozess. ## 4. Ziele des Schedulings Die Ziele hängen stark von der Art des Systems ab. Es gibt oft Konflikte (z.B. Fairness vs. Effizienz). ### Allgemeine Ziele - **Fairness:** Jeder Prozess erhält einen gerechten Anteil der CPU (Mindestzuteilung). - **Effizienz:** Die CPU soll immer zu 100% beschäftigt sein (kein Leerlauf). - **Balance:** Alle Systemteile (CPU, Disk, RAM) sollen ausgelastet sein. - **Policy Enforcement:** Durchsetzung von Regeln (z.B. „Chef-Prozesse haben Vorrang"). ### Spezifische Ziele nach Modus **Batch-Systeme (Stapelverarbeitung):** - Maximierung des Durchsatzes (Jobs pro Stunde). - Minimierung der Durchlaufzeit (Zeit von Abgabe bis Fertigstellung). **Interaktive Systeme (PC/Server):** - Minimierung der Antwortzeit (Zeit bis zur ersten Reaktion auf eine Eingabe). - Minimierung der Wartezeit in der "Bereit"-Schlange. **Echtzeitsysteme:** - Einhaltung von Deadlines (Fristen). - Vorhersagbarkeit (kein Datenverlust durch Verzögerung). ## 5. Algorithmen-Konzepte: Präemptiv vs. Nicht-Präemptiv ### A. Nicht-Präemptiv (Kooperativ) - Ein Prozess behält die CPU, bis er fertig ist, blockiert (I/O) oder sie freiwillig abgibt. - **Vorteil:** Einfach, keine Timer-Hardware nötig. - **Nachteil:** Ein Endlos-Schleifen-Prozess kann das ganze System einfrieren (Windows 3.1 Ära). ### B. Präemptiv (Verdrängend) - Das OS kann einem Prozess die CPU gewaltsam entziehen. - Benötigt Clock-Interrupts. - Jeder Prozess erhält ein Zeitquantum (Zeitscheibe, typisch 10–200 ms). - **Faustregel:** Verhältnis Kontextwechsel zu Quantum sollte ca. 1:20 bis 1:50 betragen, um Overhead gering zu halten. ## 6. Die Scheduling-Algorithmen im Detail ### 6.1 FCFS (First Come First Serve) - **Prinzip:** „Wer zuerst kommt, mahlt zuerst". Einfache Warteschlange (FIFO). - **Typ:** Nicht-präemptiv. - **Vorteil:** Sehr einfach zu implementieren. - **Nachteil:** Konvoi-Effekt. Ein langer CPU-Prozess blockiert alle kurzen E/A-Prozesse. Führt zu schlechter Durchschnitts-Wartezeit. ### 6.2 SJF (Shortest Job First) - **Prinzip:** Der Prozess mit dem kürzesten CPU-Burst wird als nächstes gewählt. - **Typ:** Nicht-präemptiv. - **Vorteil:** Garantiert die beste (minimale) durchschnittliche Wartezeit aller Verfahren. - **Nachteil:** Die Laufzeit muss im Voraus bekannt sein (schwierig bei interaktiven Systemen). Gefahr von Starvation (Verhungern) langer Jobs, wenn immer neue kurze Jobs kommen. ### 6.3 SRTN (Shortest Remaining Time Next) - **Prinzip:** Die präemptive Version von SJF. Wenn ein neuer Job kommt, dessen Laufzeit kürzer ist als der Rest des aktuellen Jobs, wird gewechselt. - **Vorteil:** Sehr gut für kurze Jobs geeignet. - **Nachteil:** Laufzeit muss bekannt sein; Overhead durch Überwachung der Restzeiten. ### 6.4 RR (Round Robin) - **Prinzip:** Jeder Prozess bekommt die CPU für ein festes Zeitquantum (z.B. 20ms). Ist er nicht fertig, kommt er ans Ende der Schlange. - **Typ:** Präemptiv. - **Vorteil:** Der fairste Algorithmus. Keine Starvation. Gute Antwortzeit für Benutzer. - **Nachteil:** Durchschnittliche Durchlaufzeit oft schlechter als SJF. **Das Quantum-Problem:** - **Zu groß:** RR verhält sich wie FCFS (schlechte Reaktion). - **Zu klein:** Zu viele Kontextwechsel (CPU verbringt nur Zeit mit Umschalten, nicht mit Rechnen). ## 7. Prioritätsmechanismen Priorität ist kein eigener Algorithmus, sondern ein Aufsatz auf andere (z.B. Priority-Queue statt FIFO). ### Hierarchie (Wer hat Vorrang?) 1. Kernel (Höchste Prio). 2. OS-Dienste / Treiber. 3. Interrupts. 4. GUI / Interaktive Apps. 5. Hintergrunddienste. ### Problem Starvation & Lösungen Wenn Prozesse mit hoher Priorität die CPU monopolisieren, verhungern niedrige Prozesse. - **Aging (Altern):** Die Priorität wartender Prozesse wird schrittweise erhöht. - **Dynamische Anpassung:** Das OS beobachtet das Verhalten (z.B. Gauß-Methode oder Lotterie-Scheduling) und passt Prioritäten zur Laufzeit an. ## 8. Echtzeit-Modus (Real-Time) Hier zählt nicht Geschwindigkeit, sondern Vorhersagbarkeit. - **Harte Echtzeit:** Deadline muss gehalten werden (z.B. Airbag-Auslösung). Verspätung = Systemversagen. - **Weiche Echtzeit:** Verspätung ist tolerierbar, aber Qualität sinkt (z.B. Video-Stream ruckelt). - **Bedingung:** Das System ist nur planbar, wenn die Summe aller Prozess-Laufzeiten kleiner ist als die verfügbare CPU-Zeit. ## 9. Das große Rechenbeispiel (Klausur-relevant!) Die Quelle vergleicht Algorithmen anhand von 5 Prozessen. Dies zeigt die Unterschiede in der Durchlaufzeit (Turnaround Time). ### Szenario - **Prozesse:** A (Länge 12), B (6), C (7), D (2), E (9). - **Prioritäten (0=hoch):** C(1), B(2), E(3), A(4), D(5). (Achtung: D hat niedrigste Prio!) ### A. FCFS (Reihenfolge A, B, C, D, E) - A wartet 0, läuft 12 → Ende bei 12. - B wartet auf A (12), läuft 6 → Ende bei 18. - C endet bei 25. - D endet bei 27. - E endet bei 36. - **Durchschnitt:** (12+18+25+27+36)/5 = **23,6** ### B. SJF (Sortiert nach Länge: D, B, C, E, A) - D (2) läuft zuerst → Ende bei 2. - B (6) startet bei 2 → Ende bei 8. - C (7) startet bei 8 → Ende bei 15. - E (9) startet bei 15 → Ende bei 24. - A (12) startet bei 24 → Ende bei 36. - **Durchschnitt:** (2+8+15+24+36)/5 = **17** - **Fazit:** SJF ist der beste für den Durchsatz, aber unfair für A. ### C. Round Robin mit Priorität (Hier als Beispiel für "Worst Case") - Im Beispiel führt dies zu vielen Wechseln und einer durchschnittlichen Zeit von 25,4. - **Fazit:** RR ist der schlechteste für die Durchlaufzeit, aber der fairste Algorithmus. ## 10. Zusammenfassende Erkenntnisse für MC-Fragen 1. **Dispatcher vs. Scheduler:** Scheduler plant, Dispatcher schaltet. 2. **SJF:** Beste Performance, aber Gefahr von Starvation und schwer vorhersagbar. 3. **Round Robin:** Beste Fairness, Nutzung in interaktiven Systemen, abhängig vom Quantum. 4. **Batch vs. Interaktiv:** Batch will Durchsatz, Interaktiv will kurze Antwortzeiten. 5. **1:20 bis 1:50:** Das goldene Verhältnis von Overhead (Kontextwechsel) zu Nutzlast (Quantum).