zusammenfassungen/Writerside/topics/02/BS/09_Interprozesskommunikation.md
David Schirrmeister 73e1392286 update
2024-12-05 13:53:10 +01:00

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
  • 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

Mechanismen

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
  • Darauf muss man achten:

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
  • 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 ...
  • Kann temporäre Verbindung zwischen 2 oder mehr Befehlen/Programmen/Prozessen sein

    • Filter
      • Kommandozeilenprogramme, die weitere Verarbeitung übernehmen
  • "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
  • Wird oft verwendet in
    • JavaScript, Python, Frameworks wie Javas CompletableFuture
  • image_160.png

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

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)

How one thread listens to many sockets with select in C

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