6.0 KiB
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/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
- stellt sicher, dass
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
- Dateien
- Message Queues
- Pipes
- Promises (Futures)
- Sockets
- Semaphoren
- Mutexe
- 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
- Kann von beteiligten Systemen gelesen und beschrieben werden
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 sein
- Darauf muss man achten:
- Zugriffsrechte korrekt setzen um Sicherheit zu gewährleisten
- geeignete Synchronisationsmechanismen nutzen
Message Queues
- besonders nützlich, wenn strukturierte Daten zwischen Prozessen ausgetauscht werden
- Struktur muss zwischen Prozessen vereinbart werden
- Verwendung von Semaphoren kann erforderlich sein, damit Zugriff auf Queue ordnungsgemäß funktioniert
Linux-Systemaufrufe Message Queues
- msgget - MQ erzeugen / auf bestehende zugreifen
- msgsnd - Nachricht in MQ schicken
- msgrcv - Nachricht aus MQ empfangen
- msgctl - Status einer MQ abfragen/ändern/löschen
Pipes
- ermöglichen, dass Output eines Prozesses direkt als Input eines anderen Prozesses dient
- sind unidirektional
- gibt Möglichkeiten 2 Pipes zu erstellen → bidirektionale Kommunikation
- haben begrenzte Puffergröße
- zu viele Daten in der Pipe
- blockieren des Schreibprozesses
- zu viele Daten in der Pipe
- arbeiten nach FIFO Prinzip (First In First Out)
Erstellung von Pipes mit POSIX API
-
pipe - Pipe mit zwei Endpunkten erzeugen
-
popen - Prozess starten (benutzt fork) und Pipe zum Prozess öffnen
-
pclose - Mit popen geöffnete Pipe schließen
-
mkfifo - Named Pipe erzeugen
-
open - Named Pipe öffnen
-
close - (Named) Pipe schließen
-
read - aus (Named) Pipe lesen
-
write - in (Named) Pipe schreiben
Pipes in der Shell
-
werden verwendet um 2 oder mehr Befehle zu kombinieren
- Ausgabe eines Befehls fungiert als Eingabe für anderen Befehl
- Ausgabe dessen = Eingabe für den nächsten ...
- Ausgabe eines Befehls fungiert als Eingabe für anderen Befehl
-
Kann temporäre Verbindung zwischen 2 oder mehr Befehlen/Programmen/Prozessen sein
- Filter
- Kommandozeilenprogramme, die weitere Verarbeitung übernehmen
- Filter
-
"I" - anonyme Pipe
- bspw. ps ax | less
-
">" - benannte Pipe
- bspw. mkfifo myPipe ls > myPipe
Promises (Futures)
- Konzept für asynchrone Programmierung
- Programm wartet auf Ergebnis/Rückmeldung einer asynchronen Operation
- blockiert dabei NICHT Haupt-Thread
- Programm wartet auf Ergebnis/Rückmeldung einer asynchronen Operation
- Wird oft verwendet in
- JavaScript
- Python
- Frameworks wie Javas CompletableFuture
Sockets
- Verwendung geeignet, wenn
- Kommunikation zwischen verschiedenen Rechnern erforderlich ist
- verbindungsorientierte Kommunikation (bspw. TCP) erwünscht ist
- Falls über Internet
- Sicherheitsaspekte müssen berücksichtigt werden
- bspw. Verschlüsselung
- Sicherheitsaspekte müssen berücksichtigt werden
Erstellung von Sockets mit POSIX API
-
socket - Socket erzeugen
-
socketpair - Zwei Sockets erzeugen, ähnlich pipe
-
read, recv - Aus Socket lesen
-
write, send - In Socket schreiben
-
close - Socket schließen
-
select - warten auf Socketaktivität
-
poll - warten auf Socketaktivität
-
send und recv können beliebig lange dauern
- können Prozesse/Threads blockieren
→ Einsetzen von select
- Dient als Multiplexer für mehrere Sockets (File-Descriptors: fdts)
Condition Variables
- Dienen Synchronisation von Threads in einem Multithreading-Kontext
- Threads werden informiert, dass Bedingung erfüllt / Ressource verfügbar ist
- Normalerweise auf Threads innerhalb desselben Prozesses beschränkt
- nicht direkt für IPC zwischen verschiedenen Prozessen nutzbar
Remote Procedure Call (RPC)
- Programm kann Funktion/Prozedur auf einem entfernten Rechner/Adressraum ausführen, als wäre sie lokal vorhanden
- abstrahiert Netzwerkkommunikation
- ermöglicht Entwicklern sich auf Logik ihrer eigenen Anwendungen zu konzentrieren
- Verschiedene Implementierungen von TPC existieren für verschiedene Plattformen / Programmiersprachen