next up previous contents index
Next: 4.1.1 Programmeigenschaften Up: 4 Distributed Memory Computer Previous: 4 Distributed Memory Computer

Kanäle, Senden und Empfangen

Physikalische Leitungen  und Übertragungsprotokolle  werden durch Kanäle  notiert:

channel ch tex2html_wrap_inline2705 .
Dabei ist ch der Name des Kanals. tex2html_wrap_inline2709 bezeichnen (optionale) Variablennamen vom jeweiligen Typ tex2html_wrap_inline2711 . In der Implementierung können die channels sowohl direkte Hardware bezeichnen (z.B. Transputer-Links), aber auch Softwareprotokolle (pipes, sockets und bind bei Unix und TCP/IP).   Beispielsweise definiert
channel Eingabe (CHAR);
channel Ausgabe (INTEGER);
einen Eingabekanal für Zeichen und einen Ausgabekanal für Integer.

Zur Darstellung der eigentlichen Datenübertragung dienen die Konstrukte send und receive. Der Aufruf von send besitzt folgende Syntax:

send ch tex2html_wrap_inline2713 .
Der Parameter ch bezeichnet einen Übertragungskanal, und tex2html_wrap_inline2717 stellen Ausdrücke vom Typ tex2html_wrap_inline2711 dar. Die Typen tex2html_wrap_inline2721 entsprechen den Typen der Variablen des Kanals ch. Die Ausdrücke tex2html_wrap_inline2717 werden ausgewertet und das Ergebnis wird auf dem angegebenen Kanal übertragen.  

Der Receive-Aufruf wird analog zum Send-Befehl folgendermaßen definiert:

receive ch tex2html_wrap_inline2727 .
ch ist wiederum der Name des Übertragungskanals, und die tex2html_wrap_inline2709 bezeichnen Variablen vom Typ tex2html_wrap_inline2711 entsprechend der Definition des Kanals ch. Der Befehl liest Daten aus dem Kanal und schreibt sie in die Variablen tex2html_wrap_inline2709 . Sind keine Daten vorhanden, blockiert receive die weitere Ausführung des Programms, bis die erforderlichen Daten eingetroffen sind.  

Die Semantik eines send/receive-Paares entspricht somit der Semantik von n Zuweisungen

tex2html_wrap_inline2741 ; tex2html_wrap_inline2066 ; tex2html_wrap_inline2745
Voraussetzung ist, daß Daten übertragen wurden (val, da im Empfänger keine Nebeneffekte sichtbar werden.).

Während der Aufruf von receive immer blockierend ist, kann der Sendbefehl sowohl synchron als auch asynchron arbeiten:

   Im ersten Fall wird das Programm nach dem Versenden der Daten ohne weitere Verzögerung fortgesetzt. Im zweiten Fall wird die weitere Programmausfürung nach dem Send so lange verzögert bis ein entsprechendes receive ausgeführt wurde.

Das asynchrone send erfordert einen potentiell unbeschränkt großen Puffer,  während das synchrone send nur einen Puffer fester Größe erfordert. Die Programmierung des synchronen send ist aber aufwendiger, da es sehr genau auf die zeitlich richtige Reihenfolge aller send / receive Operationen ankommt. Das synchrone send wird daher fast nur mit sogenannten `selected receives'   verwendet, bei denen mehrere receives zusammengefaßt werden und dasjenige receive zur Ausführung ausgewählt wird, für das ein send wartet.

Für diesen Fall ist auch die Funktion

empty(ch): BOOLEAN;
wichtig, die testet, ob Daten in einem Kanal vorhanden sind. Bei der Verwendung von empty ist aber Vorsicht geboten, da die Funktion nur Momentaufnahmen vom Zustand des Kanals liefert. So können beispielsweise kurz nachdem die Funktion den Wert TRUE zurückgeliefert hat, Daten eintreffen. Umgekehrt können die Daten kurz nachdem die Funktion FALSE zurückgeliefert hat, bereits durch einen anderen Prozeß abgeholt worden sein (falls mehrere Prozesse von diesem Kanal Daten empfangen).




next up previous contents index
Next: 4.1.1 Programmeigenschaften Up: 4 Distributed Memory Computer Previous: 4 Distributed Memory Computer

parallel@rz.uni-mannheim.de
Mon Okt 28 14:38:25 PST 1996