update
This commit is contained in:
parent
21fcb18ed4
commit
e7480b304f
BIN
Writerside/images/image_161.png
Normal file
BIN
Writerside/images/image_161.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 130 KiB |
BIN
Writerside/images/image_162.png
Normal file
BIN
Writerside/images/image_162.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 47 KiB |
BIN
Writerside/images/image_163.png
Normal file
BIN
Writerside/images/image_163.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 75 KiB |
BIN
Writerside/images/image_164.png
Normal file
BIN
Writerside/images/image_164.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 40 KiB |
BIN
Writerside/images/image_165.png
Normal file
BIN
Writerside/images/image_165.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.5 KiB |
@ -14,6 +14,7 @@
|
||||
<toc-element topic="07_Prozesssynchronisation.md"/>
|
||||
<toc-element topic="08_Threads.md"/>
|
||||
<toc-element topic="09_Interprozesskommunikation.md"/>
|
||||
<toc-element topic="10_Scheduling.md"/>
|
||||
</toc-element>
|
||||
<toc-element toc-title="OOAD">
|
||||
<toc-element topic="IntroductionOOAD.md"/>
|
||||
|
@ -108,9 +108,7 @@
|
||||
- Programm wartet auf Ergebnis/Rückmeldung einer asynchronen Operation
|
||||
- blockiert dabei NICHT Haupt-Thread
|
||||
- Wird oft verwendet in
|
||||
- JavaScript
|
||||
- Python
|
||||
- Frameworks wie Javas CompletableFuture
|
||||
- _JavaScript, Python, Frameworks wie Javas CompletableFuture_
|
||||
- 
|
||||
|
||||
### Sockets
|
||||
|
145
Writerside/topics/BS/10_Scheduling.md
Normal file
145
Writerside/topics/BS/10_Scheduling.md
Normal file
@ -0,0 +1,145 @@
|
||||
# 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
|
||||
|
||||
|
||||
## 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](#pr-emptives-scheduling)
|
||||
- Jeder Prozess wird für eine festgelegte Zeitscheibe auf dem Prozessor ausgeführt
|
||||
- sobald abgelaufen → nächster Prozess
|
||||
- wiederholt sich zyklisch
|
||||
- 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](#scheduling-unter-linux)
|
||||
- Multilevel-Scheduling
|
||||
- ...
|
||||
|
||||
## Scheduling unter Linux
|
||||

|
||||
|
||||
[](https://www.youtube.com/watch?v=2UYuWWX3SMc)
|
||||
|
||||
### 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
|
||||
|
||||
### 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](https://de.wikipedia.org/wiki/Rot-Schwarz-Baum)
|
||||
- 
|
||||
|
||||
### Beispiel Funktionsweise des CFS
|
||||

|
||||
|
||||
- Neue Prozesse können während Latenz des Schedulers eingefügt werden
|
||||
- **vruntime** wird initialisiert mit minimaler Laufzeit (**min_vruntime**)der bereits vorhanden Tasks
|
||||
- weil jetzt ein zusätzlicher Task da ist, wird allen vorhandenen Tasks automatisch anteilig weniger Laufzeit zugeteilt
|
||||
- 
|
||||
|
||||
> Manchmal möchte man die Priorität eines Prozesses verändern. Sie kann mit **nice** gesetzt werden
|
||||
> und mit **renice** angepasst werden
|
||||
>
|
||||
> Jeder Prozess kann einen [nice-Wert](#nicewert) von -20 bis 19(20) haben. Standard ist 0
|
||||
|
||||
### Berechnung der Gewichtung (CFS)
|
||||
- **1024/1,25<sup>[niceWert](#nicewert)</sup>**
|
||||
- Falls [niceWert](#nicewert) abnimmt, steigt Gewicht an
|
||||
- Zeitscheibe ist proportional zur Gewichtung dividiert durch Gesamtgewichtung aller Prozesse
|
||||
- 
|
||||
|
||||
#### 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
|
||||
- 131*1024 / (131*1024 + 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](06_prozessstruktur.md#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
|
||||
|
||||
- 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
|
Loading…
x
Reference in New Issue
Block a user