mirror of
https://github.com/theoleuthardt/hwr-notes.git
synced 2026-06-06 02:11:08 +00:00
121 lines
No EOL
8 KiB
Markdown
121 lines
No EOL
8 KiB
Markdown
# 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). |