3.2.13 Interprozesskommunikation

[gesichtete Version][gesichtete Version]
Zeile 37: Zeile 37:
<br />
<br />
<p>
<p>
Im Folgenden werden einige Möglichkeiten der Interprozesskommunikation erläutert. Dabei sei es dem geneigten Leser überlassen, für jede Möglichkeit zu überlegen, wecher der gerade angesprochenen Grundbegriffe zutrifft.
Im Folgenden werden einige Möglichkeiten der Interprozesskommunikation erläutert. Dabei sei es dem geneigten Leser überlassen, für jede Möglichkeit zu überlegen, weche der gerade angesprochenen Grundbegriffe zutreffen.
</p>
</p>



Version vom 11. November 2013, 16:19 Uhr

{{#index:Interprozesskommunikation|Interprocess Communication|IPC|Protokoll}} Bei der Interprozesskommunikation (englisch: Interprocess Communication, kurz: IPC) geht es um den Austausch von Informationen zwischen zwei (oder mehr) Prozessen bzw. Threads. Damit alle Beteiligten die ausgetauschten Informationen in gleicher Weise verstehen können, sind bestimmte Regeln der Kommunikation einzuhalten, das sogenannte Protokoll.


Grundbegriffe der IPC

Die folgende Aufgabe nimmt sich der Grundbegriffe an:


Aufgabe 1

Aufgabe

{{#index:Verbindungsorientierte Kommunikation|Kommunikation, verbindungsorientiert|Verbindungslose Kommunikation|Kommunikation, verbindungslos|Speicherbasierte Kommunikation|Kommunikations, speicherbasiert|Nachrichtenbasierte Kommunikation|Kommunikation, nachrichtenbasiert|Synchrone Kommunikation|Kommunikation, synchron|Asynchrone Kommunikation|Kommunikation, asynchron|Halbduplex-Betrieb|Vollduplex-Betrieb|Unicast|Multicast|Anycast|Broadcast}} Mandl 2013 erläutert in Kapitel 6.5.1 einige Grundbegriffe der Kommunikation. Was versteht man demnach unter:

  • Verbindungsorientierter Kommunikation
  • Verbindungsloser Kommunikation
  • Speicherbasierter Kommunikation
  • Nachrichtenbasierter Kommunikation
  • Synchroner Kommunikation
  • Asynchroner Kommunikation
  • Halbduplex-Betrieb
  • Vollduplex-Betrieb
  • Unicast
  • Multicast
  • Anycast
  • Broadcast


Im Folgenden werden einige Möglichkeiten der Interprozesskommunikation erläutert. Dabei sei es dem geneigten Leser überlassen, für jede Möglichkeit zu überlegen, weche der gerade angesprochenen Grundbegriffe zutreffen.


Zwei Threads kommunizieren über gemeinsame Variablen

Beispiel

In dem Video zu den Race Conditions wurde Quellcode gezeigt, bei dem zwei Threads auf eine gemeinsame Variable counter zugreifen.

Prozessintern ist es also möglich, dass zwei (oder mehr) Threads sich gegenseitig Informationen über gemeinsame Datenbereiche (→Variablen) bereitstellen.

Eine Synchronisation der beteiligten Threads beim Zugriff auf die gemeinsamen Datenbereiche wird erforderlich, da es hier zu kritischen Abläufen kommt.


Zwei Prozesse kommunizieren über gemeinsame Speicherobjekte

Unter Speicherobjekten kann man sich beispielsweise Dateien vorstellen.

Beispiel

Ein Prozess A erzeugt während seiner Laufzeit Daten und speichert diese in einer Datei ab. Ein zweiter Prozess B liest diese Datei zu einem späteren Zeitpunkt ein und kann so die enthaltenen Informationen weiterverarbeiten.

Auch hier ist eine Synchronisation nötig. Allerdings sorgt das Betriebssystem nur für eine Synchronisation beim gleichzeitigen Zugriff der beiden Prozesse auf die Datei (z.B. über Semaphore).

Falls hingegen Prozess B den Dateiinhalt ausliest, lange bevor Prozess A die gewünschten Informationen hineingeschrieben hat, so ist nicht zu erwarten, dass Prozess B das erwartete Ergebnis berechnen kann.

{{#index:Lock-Mechanismus}} In dieser Situation kann etntweder der Mensch eingreifen, indem er Prozess B erst dann startet, wenn Prozess A fertig ist (in Shell-Skripten oder Batch-Dateien kann das sehr einfach über die Reihenfolge der Befehle erfolgen), oder das Betriebssystem stellt einen sogenannten Lock-Mechanismus für den Dateizugriff zur Verfügung.


Aufgabe 2

Aufgabe

Recherchiere: Was versteht man unter einem Lock-Mechanismus im Hinblick auf den schreibenden oder lesenden Zugriff mehrerer Prozesse auf eine Datei?


Zwei Prozesse kommunizieren über Shared Memory

{{#index:Shared Memory|Memory, Shared|gemeinsamer Speicher|Speicher, gemeinsam genutzt}} Man spricht von Shared Memory (auf deutsch: gemeinsamer Speicher), wenn ein Teil des Hauptspeichers gemeinsam mehreren Prozessen zur Verfügung gestellt wird.


Aufgabe 3

Aufgabe

Überlege, recherchiere und diskutiere in deiner Lerngruppe: Wie kann Shared Memory sehr einfach mehreren Prozessen zur Verfügung gestellt werden?


Zwei Prozesse kommunizieren über Pipes

{{#index:Pipe}} Mandl 2013 beschreibt Pipes als Einweg-Kommunikationskanäle, die es einem Prozess ermöglichen, Daten bzw. Nachrichten über das Betriebssystem als Datenstrom an einen anderen Prozess zu übertragen.

Beispiel

Ein ganz einfaches Beispiel für eine Pipe liefert der folgende Befehl, der beispielsweise auf einer Linux-Shell eingegeben werden kann:

ls -l | more

Genaugenommen handelt es sich hier um die beiden Programme ls und more.

Das erste Programm wird mit dem Parameter    -l    aufgerufen und insgesamt ergibt ls -l einen Prozess, der den Inhalt des aktuellen Verzeichnisses in einer ausführlichen Fassung zurückliefert.

Der Prozess des zweiten Programms nimmt eine beliebige Menge an Informationen entgegen und gibt sie seitenweise zurück. Nach jeder Seite wird zunächst ein Tastendruck abgewartet, anschließend wird die nächste Seite geliefert.

Das Zeichen    |    ist das sogenannte Pipe-Zeichen, es verbindet die Ausgabe des ersten Prozesses mit der Eingabe des zweiten.

Durch den Befehl    ls -l | more    wird also der Inhalt des aktuellen Verzeichnisses seitenweise auf dem Bildschirm ausgegeben.


Bisher konnten (oder mussten) alle Beispiele auf einem Rechner ablaufen. Aber auch eine Kommunikation von Prozessen über Rechnergrenzen hinweg ist möglich:


Zwei Prozesse kommunizieren über Sockets

Sockets sind eine vom Betriebssystem bereitgestellte Kommunikationsmöglichkeit, die üblicherweise auf den Internet-Standardprotokollen TCP (Transmission Control Protocol) und/oder UDP (User Datagram Protocol) basiert. Damit können Informationen mit Hilfe des Internets rund um die Welt zwischen verschiedenen Prozessen auf völlig verschiedenen Rechnern ausgetauscht werden. (Es sei an dieser Stelle erwähnt, dass die Kommunikation aber auch per TCP bzw. UDP zwischen zwei Prozessen auf demselben Rchner erfolgen kann.)

Beispiel

Anschauliche Beispiele zur Socket-Programmierung mit Java liefert Dietmar Abts in seinem Buch Masterkurs Client/Server-Programmierung mit Java.

Studierende sind oftmals berechtigt, eine PDF-Version dieses Buches ohne entstehende Kosten über ihre Hochschulen von Springerlink zu beziehen.


Aufgabe 4

Aufgabe

Erläutere ein kleines Beispiel aus deiner täglichen Praxis im Umgang mit dem Computer für eine Kommunikation über Sockets. Welches Programm steckt hinter einem sicher täglich von dir auf deinem Rechner genutzen Prozess, der über Sockets Informationen mit einem anderen Prozess irgendwo auf einem anderen Rechner im weltweiten Internet austauscht? Welches Programm steckt hinter diesem anderen Prozess?


Aus der Sicht eines Betriebssystem-Programmierers

Zusammen­fassung

Die in diesem Kapitel gezeigten Beispiele geben einen Überblick über einige Möglichkeiten der Interprozesskommunikation. Ein Betriebssystem-Programmierer muss also diese (und eventuell noch weitere) Mechanismen implementieren, damit sein Betriebssystem den Prozessen und Threads entsprechende Kommunikationsmöglichkeiten bereitstellt.



Diese Seite steht unter der Creative Commons Namensnennung 3.0 Unported Lizenz http://i.creativecommons.org/l/by/3.0/80x15.png