diff --git a/Writerside/images/image_161.png b/Writerside/images/image_161.png
new file mode 100644
index 0000000..85abede
Binary files /dev/null and b/Writerside/images/image_161.png differ
diff --git a/Writerside/images/image_162.png b/Writerside/images/image_162.png
new file mode 100644
index 0000000..1bde339
Binary files /dev/null and b/Writerside/images/image_162.png differ
diff --git a/Writerside/images/image_163.png b/Writerside/images/image_163.png
new file mode 100644
index 0000000..2150b9e
Binary files /dev/null and b/Writerside/images/image_163.png differ
diff --git a/Writerside/images/image_164.png b/Writerside/images/image_164.png
new file mode 100644
index 0000000..bd406ab
Binary files /dev/null and b/Writerside/images/image_164.png differ
diff --git a/Writerside/images/image_165.png b/Writerside/images/image_165.png
new file mode 100644
index 0000000..6c767d6
Binary files /dev/null and b/Writerside/images/image_165.png differ
diff --git a/Writerside/in.tree b/Writerside/in.tree
index 49572a2..faa2529 100644
--- a/Writerside/in.tree
+++ b/Writerside/in.tree
@@ -14,6 +14,7 @@
+
diff --git a/Writerside/topics/BS/09_Interprozesskommunikation.md b/Writerside/topics/BS/09_Interprozesskommunikation.md
index 6617b8d..562dea7 100644
--- a/Writerside/topics/BS/09_Interprozesskommunikation.md
+++ b/Writerside/topics/BS/09_Interprozesskommunikation.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
diff --git a/Writerside/topics/BS/10_Scheduling.md b/Writerside/topics/BS/10_Scheduling.md
new file mode 100644
index 0000000..82f72d9
--- /dev/null
+++ b/Writerside/topics/BS/10_Scheduling.md
@@ -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[niceWert](#nicewert)**
+- 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
\ No newline at end of file