3.2.13 Interprozesskommunikation

[gesichtete Version][gesichtete Version]
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(27 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
<p>
 
{{#index:Interprozesskommunikation|Interprocess Communication|IPC}}
<loop_index id="5fa978612c3f6">Interprozesskommunikation</loop_index><loop_index id="5fa978b14f4f0">Interprocess Communication</loop_index><loop_index id="5fa978b14f4f9">IPC</loop_index><loop_index id="5fa978b14f4ff">Protokoll</loop_index>
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.
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''.
</p>
<p>
Im Folgenden sind einige Beispiele der Kommunikation angegeben.
</p>
</p>


<br />
<br />
==== Zwei Threads kommunizieren über gemeinsame Variablen ====
== Grundbegriffe der IPC ==
 
<p>
<p>
<loop_area type="example">
Die folgende Aufgabe nimmt sich der Grundbegriffe an:
<p>
In dem [http://youtu.be/dlOg4Dz-bgM Video] zu den [[Race Conditions]] wurde [[Race_Conditions#Quellcode_aus_dem_Video|Quellcode]] gezeigt, bei dem zwei Threads auf eine gemeinsame Variable <span style="font-family:Courier">counter</span> zugreifen.
</p>
<p>
Prozessintern ist es also möglich, dass zwei (oder mehr) Threads sich gegenseitig Informationen über gemeinsame Datenbereiche (&rarr;Variablen) bereitstellen.
</p>
</loop_area>
</p>
 
<p>
Eine [[Synchronisation]] der beteiligten Threads beim Zugriff auf die gemeinsamen Datenbereiche wird erforderlich, da es hier zu [[Race_Conditions#Definition:_Race_Conditions|kritischen Abläufen]] kommt.
</p>
</p>


<br />
<br />
==== Zwei Prozesse kommunizieren über gemeinsame Speicherobjekte ====
== Aufgabe 1 ==
<p>
Unter ''Speicherobjekten'' kann man sich beispielsweise ''Dateien'' vorstellen.
</p>
<p>
<loop_area type="example">
<p>
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.
</p>
</loop_area>
</p>
<p>
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]]).
</p>
<p>
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.
</p>
<p>
{{#index:Lock-Mechanismus}}
In dieser Situation kann etntweder der Mensch eingreifen, indem er Prozess B erst dann startet, wenn Prozess A fertig ist (in [http://de.wikipedia.org/wiki/Shell-Skript Shell-Skripten] oder [http://de.wikipedia.org/wiki/Batch-Skript 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.
</p>
<br />
==== Aufgabe 1 ====
<p>
<p>
<loop_area type="task">
<loop_area type="task">
<loop_task title="Lock">
<loop_task title="IPC-Grundbegriffe" id="5fa978612c3fc">
<p>
<p>
Recherchiere:<br />
<loop_index id="5fa978612c400">Verbindungsorientierte Kommunikation</loop_index><loop_index id="5fa9786159f7a">Kommunikation, verbindungsorientiert</loop_index><loop_index id="5fa9786159f83">Verbindungslose Kommunikation</loop_index><loop_index id="5fa9786159f8a">Kommunikation, verbindungslos</loop_index><loop_index id="5fa9786159f90">Speicherbasierte Kommunikation</loop_index><loop_index id="5fa9786159f96">Kommunikations, speicherbasiert</loop_index><loop_index id="5fa9786159f9c">Nachrichtenbasierte Kommunikation</loop_index><loop_index id="5fa9786159fa2">Kommunikation, nachrichtenbasiert</loop_index><loop_index id="5fa9786159fa7">Synchrone Kommunikation</loop_index><loop_index id="5fa9786159fae">Kommunikation, synchron</loop_index><loop_index id="5fa9786159fb3">Asynchrone Kommunikation</loop_index><loop_index id="5fa9786159fb9">Kommunikation, asynchron</loop_index><loop_index id="5fa9786159fbf">Halbduplex-Betrieb</loop_index><loop_index id="5fa9786159fc5">Vollduplex-Betrieb</loop_index><loop_index id="5fa9786159fca">Unicast</loop_index><loop_index id="5fa9786159fd0">Multicast</loop_index><loop_index id="5fa9786159fd5">Anycast</loop_index><loop_index id="5fa9786159fdb">Broadcast</loop_index>
Was versteht man unter einem Lock-Mechanismus im Hinblick auf den schreibenden oder lesenden Zugriff mehrerer Prozesse auf eine Datei?
<cite id="5fa978612c403">Mandl+2013</cite> 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
</p>
</p>
</loop_task>
</loop_task>
Zeile 61: Zeile 36:


<br />
<br />
==== Zwei Prozesse kommunizieren über Shared Memory ====
<p>
{{#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.
</p>
<br />
==== Aufgabe 2 ====
<p>
<loop_area type="task">
<loop_task title="">
<p>
<p>
Überlege, recherchiere und diskutiere in deiner Lerngruppe: Wie kann Shared Memory sehr einfach mehreren Prozessen zur Verfügung gestellt werden?
Im Folgenden werden einige Möglichkeiten der Interprozesskommunikation erläutert. Dabei sei es dem geneigten Leser überlassen, für jede Möglichkeit zu überlegen, welche der gerade angesprochenen Grundbegriffe zutreffen.
</p>
<spoiler text="Tipp">
<p>
Man spricht hier vom ''Einblenden'' des Shared Memory in mehrere virtuelle Adressräume.
</p>
<p>
Schau dir das Video [http://youtu.be/PpyWObQw70o Grundlagen virtueller Speicherverwaltung mit MMU] noch einmal an und überlege, wie hier der Zusammenhang zwischen einem physikalischen Seitenrahmen (Frame), und dem Einblenden als virtuelle Seite in '''mehreren virtuellen Adressräumen''' wohl sein wird.
</p>
</spoiler>
</loop_task>
</loop_area>
</p>
</p>


<br />
<br />
==== Zwei Prozesse kommunizieren über Pipes ====
<p>
{{#index:Pipe}}
<cite>Mandl+2013</cite> 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.
</p>
<p>
<loop_area type="example">
<p>
Ein ganz einfaches Beispiel für eine Pipe liefert der folgende Befehl, der beispielsweise auf einer Linux-Shell eingegebene werden kann:
</p>
<p>
<span style="font-family:Courier">ls -l | more</span>
</p>
<p>
Genaugenommen handelt es sich hier um die beiden Programme <span style="font-family:Courier">ls</span> und <span style="font-family:Courier">more</span>.
</p>
<p>
Das erste Programm wird mit dem Parameter &nbsp;&nbsp; <span style="font-family:Courier">-l</span> &nbsp;&nbsp; aufgerufen und insgesamt ergibt <span style="font-family:Courier">ls -l</span> einen Prozess, der den Inhalt des aktuellen Verzeichnisses zurückliefert.
</p>
<p>
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.
</p>
<p>
Das Zeichen &nbsp;&nbsp; <span style="font-family:Courier">|</span> &nbsp;&nbsp; ist das sogenannte Pipe-Zeichen, es verbindet die Ausgabe des ersten Prozesses mit der Eingabe des zweiten.
</p>
<p>
Durch den Befehl &nbsp;&nbsp; <span style="font-family:Courier">ls -l | more</span> &nbsp;&nbsp; wird also der Inhalt des aktuellen Verzeichnisses seitenweise auf dem Bildschirm ausgegeben.
</p>
</loop_area>
</p>
<br >
<p>
<p>
Bisher konnten (oder mussten) alle Beispiele auf einem Rechner ablaufen. Aber auch eine Kommunikation von Prozessen über Rechnergrenzen hinweg ist möglich:
</p>


<br />
== So geht es weiter: ==
==== Zwei Prozesse kommunizieren über Sockets ====
<p>
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 auch rund um die Welt zwischen verschiedenen Prozessen auf völlig verschiedenen Rechnern ausgetauscht werden.
</p>
<p>
Es sei an dieser Stelle erwähnt, dass die Kommunikation aber auch per TCP/UPD zwischen zwei Prozessen auf demselben Rchner erfolgen kann.
</p>
</p>
<p>
<p>
http://link.springer.com/book/10.1007/978-3-8348-9724-4
<loop_area type="arrangement"><loop_toc> </loop_toc></loop_area>
</p>
</p>



Aktuelle Version vom 10. November 2020, 13:52 Uhr

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

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, welche der gerade angesprochenen Grundbegriffe zutreffen.


So geht es weiter:



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