diff --git a/Writerside/images/image_158.png b/Writerside/images/image_158.png
new file mode 100644
index 0000000..6c16694
Binary files /dev/null and b/Writerside/images/image_158.png differ
diff --git a/Writerside/images/image_159.png b/Writerside/images/image_159.png
new file mode 100644
index 0000000..2e92980
Binary files /dev/null and b/Writerside/images/image_159.png differ
diff --git a/Writerside/in.tree b/Writerside/in.tree
index 5eed987..49572a2 100644
--- a/Writerside/in.tree
+++ b/Writerside/in.tree
@@ -13,6 +13,7 @@
+
diff --git a/Writerside/topics/BS/07_Prozesssynchronisation.md b/Writerside/topics/BS/07_Prozesssynchronisation.md
index 94bdaf4..dd2376d 100644
--- a/Writerside/topics/BS/07_Prozesssynchronisation.md
+++ b/Writerside/topics/BS/07_Prozesssynchronisation.md
@@ -82,6 +82,9 @@ resume_execution();
- Zugriff auf gemeinsam genutzte Datenstrukturen
- Hardware
+## Semaphores
+- Ähnlich wie Mutex, nur zusätzlich mit Kommunikation durch [Signale](#signale)
+
## Mutex vs Semaphore
Befehle mit [POSIX API](06_prozessstruktur.md#posix-api)
### Mutex
@@ -108,6 +111,7 @@ Befehle mit [POSIX API](06_prozessstruktur.md#posix-api)
> Es ist wichtig, Synchronisationsmechanismen sorgfältig zu verwenden,
> um sicherzustellen, dass kritische Abschnitte effizient und sicher koordiniert werden
+**Praktisches Anwendungsbeispiel: Siehe Praktikum 4**
## Deadlock
(Stillstand / Blockade) ist eine Situation, bei der zwei oder mehr Prozesse auf unbestimmte Weise blockiert sind, weil sie auf die Freigabe von Ressourcen warten
diff --git a/Writerside/topics/BS/08_Threads.md b/Writerside/topics/BS/08_Threads.md
index 589f34e..60dcdb4 100644
--- a/Writerside/topics/BS/08_Threads.md
+++ b/Writerside/topics/BS/08_Threads.md
@@ -10,7 +10,7 @@
|-------------------------------------------------|-----------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|
| Definition | Kleinste ausführbare Einheit innerhalb eines Prozesses | Unabhängiges Programm in Ausführung |
| Ressourcenzuweisung | Teilen denselben Adressraum & Ressourcen innerhalb eines Prozesses | Haben eigenen Adressraum und separate Ressourcen |
-| Kommunikation | direkter Zugriff auf gemeinsame Daten
erfordert synchronisierte Mechanismen | erfordert aufwändige Mechanismen wie IPC |
+| Kommunikation | direkter Zugriff auf gemeinsame Daten
erfordert synchronisierte Mechanismen | erfordert aufwändige Mechanismen wie [IPC](09_Interprozesskommunikation.md) |
| [Synchronisation](07_Prozesssynchronisation.md) | benötigt Synchronisationsmechanismen um Rennbedingungen zu vermeiden | Isoliert voneinander, weniger Rennbedingungen,
aber schwerere Synchronisation zwischen Prozessen |
| Overhead | **geringerer Overhead** | höherer Overhead, da separate Adressräume und Ressourcen |
| Ressourcennutzung | **effiziente Nutzung innerhalb desselben Prozesses** | höherer Ressourcenverbrauch aufgrund separater Adressräume |
diff --git a/Writerside/topics/BS/09_Interprozesskommunikation.md b/Writerside/topics/BS/09_Interprozesskommunikation.md
new file mode 100644
index 0000000..a558245
--- /dev/null
+++ b/Writerside/topics/BS/09_Interprozesskommunikation.md
@@ -0,0 +1,58 @@
+# Interprozesskommunikation (IPC)
+- Mechanismen und Techniken, die es Prozessen ermöglichen miteinander zu kommunizieren
+ - auf demselben Computer / über ein Netzwerk hinweg
+- Ist grundsätzlich wichtig, wenn Prozesse
+ - zusammenarbeiten
+ - Daten austauschen
+ - miteinander interagieren
+- Wahl der Methodik hängt von Anforderung der Anwendung ab
+ - Effizienz
+ - Datenvolumen
+ - Sicherheit
+ - Komplexität
+
+## Synchrone IPC
+- Prozess, bei dem der Absender eines [Signals](07_Prozesssynchronisation.md#signale)/Nachricht auf eine Bestätigung oder eine Antwort vom Empfänger wartet
+ - stellt sicher, dass
+ - Absender und Empfänger synchronisiert sind
+ - Ereignisse/Aufgaben sind abgeschlossen bevor andere anfangen
+- 
+
+## Asynchrone IPC
+- Prozesse, bei dem der Absender nicht auf sofortige Antwort wartet
+ - Absender setzt Ausführung fort, während Empfänger verarbeitet und ggf. später antwortet
+- 
+
+## Mechanismen
+- [Shared Memory](#shared-memory)
+- [Dateien](#dateien)
+- [Message Queues](#message-queues)
+- Pipes
+- Promises (Futures)
+- Sockets
+- [Semaphoren](07_Prozesssynchronisation.md#semaphores)
+- [Mutexe](07_Prozesssynchronisation.md#mutex-mutual-exclusion)
+- Condition Variables
+- Remote Procedure Call (RPC)
+
+### Shared Memory
+- ermöglicht mehreren Prozessen auf denselben _physischen Speicherbereich_ zuzugreifen
+ - Austausch von Daten effizient ohne explizite Kommunikation
+ - Speicherbereich wird im RAM erstellt
+ - Kann von beteiligten Systemen gelesen und beschrieben werden
+ - müssen sich selbst koordinieren
+
+#### Linux-Systemaufrufe Shared Memory
+- **shmget** - Segment erzeugen oder auf bestehendes Zugreifen
+- **shmat** - Segment an anderen Prozess anhängen
+- **shmdt** - Segment von Prozess lösen/freigeben
+- **shmctl** - Status eines Segments abfragen/ändern/löschen
+
+### Dateien
+- Prozesse können auf gemeinsame Dateien zugreifen
+ - Zugriff kann langsamer als andere [IPC-Mechanismen](#mechanismen) sein
+- Darauf muss man achten:
+ - Zugriffsrechte korrekt setzen um Sicherheit zu gewährleisten
+ - geeignete [Synchronisationsmechanismen](07_Prozesssynchronisation.md#mutex-vs-semaphore) nutzen
+
+## Message Queues