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 +- ![image_158.png](image_158.png) + +## 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 +- ![image_159.png](image_159.png) + +## 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