Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

6 Interaktion über Nachrichten. Motivation: Prozesse haben keinen gemeinsamen Speicher, in dem sie gemeinsame Objekte unterbringen könnten z.B.Parallelrechner.

Ähnliche Präsentationen


Präsentation zum Thema: "6 Interaktion über Nachrichten. Motivation: Prozesse haben keinen gemeinsamen Speicher, in dem sie gemeinsame Objekte unterbringen könnten z.B.Parallelrechner."—  Präsentation transkript:

1 6 Interaktion über Nachrichten

2 Motivation: Prozesse haben keinen gemeinsamen Speicher, in dem sie gemeinsame Objekte unterbringen könnten z.B.Parallelrechner mit verteiltem Speicher (distributed-memory parallel computer) (auch „Mehrrechnersystem“ – multi-computer) Rechnernetz (computer network) mit enger Kopplung (cluster) oder LAN oder WAN

3  Prozesse in verschiedenen Rechnern müssen über Nachrichten (messages) interagieren, „kommunizieren“ (Nachrichtenaustausch, message passing, Interprozeßkommunikation, inter-process communication, IPC)

4  Prozesse in verschiedenen Rechnern müssen über Nachrichten (messages) interagieren, „kommunizieren“ (Nachrichtenaustausch, message passing, Interprozeßkommunikation, inter-process communication, IPC) Kommunikationsnetz (communication network) ist die HW/SW-Infrastruktur für die Nachrichtenübertragung Kommunikationsnetz Rechner

5 Aber: Nachrichtenbasierte Interaktion kann auch innerhalb eines Rechners sinnvoll sein, z.B. zwischen Prozessen mit disjunkten Adreßräumen

6 Def.:Verteiltes System (distributed system) = System von Prozessoren, Prozessen, Threads,..., die mangels gemeinsamen Speichers nicht über Datenobjekte, sondern über Nachrichten interagieren (Gegensatz: zentralisiertes System) Beachte:Die Klassifikation eines Systems als verteilt oder zentralisiert ist u.U. abhängig von der Abstraktionsebene, auf der das System betrachtet wird (Beispiel: System lokal kommunizierender Prozesse) (  LV Verteilte Systeme)

7 Prozesse kommunizieren unter Verwendung von Kommunikationsoperationen (communication primitives) send – Nachricht versenden (auch write,...); die Nachrichtenquelle heißt Sender (sender) oder Produzent (producer) recv – Nachricht entgegennehmen (auch read,...); die Nachrichtensenke heißt Empfänger (receiver), Verbraucher (consumer) in vielen möglichen Varianten (s.u.)

8 Asynchrone Nachrichtenübertragung wenn Pufferungskapazität > 0 Synchrone Nachrichtenübertragung wenn Pufferungskapazität = 0 send/recv beziehen sich auf 1. die Nachricht, 2. den Empfänger/Sender – entweder direkt oder indirekt über einen Kanal (channel), der sich wie ein Puffer (3  ) verhält3 [auch bei „direkt“ gibt es einen verborgenen Kanal, der dem Empfänger zugeordnet ist und aus dem nur dieser liest (mailbox) ]

9 Direkte Zustellung kann an einen oder mehrere Empfänger gehen: Einfachsendung (unicast) oder Rundsendung (multicast oder broadcast)

10 Direkte Zustellung kann an einen oder mehrere Empfänger gehen: Einfachsendung (unicast) oder Rundsendung (multicast oder broadcast) Indirekte Zustellung über Kanal kann mit einem oder mehreren Sendern bzw. Empfängern verbunden sein:

11 Disjunktives Warten (selective wait) – nicht Java - beim Empfangen von mehreren Kanälen: SELECT { message = channelA.recv();... break; OR message = channelB.recv();... break; OR... } wartet, bis bei mindestens einem der Kanäle eine Nachricht anliegt, führt dann (nichtdeterministisch) eines der möglichen recv und die darauf folgenden Anweisungen aus.

12 Softwaretechnische Klassifizierung :  Datenfluß-Architektur (dataflow) (  6.1): Filter (filter) wandelt Eingabedaten in Ausgabedaten, weiß nichts von seiner Umgebung  Dienst-Architektur (client/server) (  6.2): Klienten (clients) beauftragen Dienstanbieter (servers), erwarten bestimmte Funktionalität und Antwort

13  Verteilte Algorithmen (distributed algorithms) (  6.4): gleichberechtigte Partner (peers) kooperieren, setzen vereinbartes Verhalten voraus  Ereignisbasierte Systeme (event-based systems) (  6.3): Abonnenten (subscribers) sind an bestimmten Ereignissen interessiert, über deren Eintreten sie von den auslösenden Ereignisquellen (publishers) benachrichtigt werden

14 6.1 Datenfluß-Architekturen Prozeß arbeitet als Filter (filter), d.h. empfängt Daten, evtl. über verschiedene Kanäle, berechnet daraus neue Daten, versendet diese, evtl. über verschiedene Kanäle. Nicht notwendig, aber typisch ist:  Kommunikationspartner bzw. -kanäle sind formale Parameter des Prozeß-Codes: Ports (ports)  Parameter ist entweder Eingabe- oder Ausgabekanal (input port, output port)

15 Beliebte graphische Darstellung: gerichteter Graph mit Filtern als Ecken und Kanälen als Kanten, d.h. genau 1 Sender/Empfänger je Kanal Beispiel 1: Partialsummen von Skalarprodukt: + * 0

16 Beliebte graphische Darstellung: gerichteter Graph mit Filtern als Ecken und Kanälen als Kanten, d.h. genau 1 Sender/Empfänger je Kanal Beispiel 1: Partialsummen von Skalarprodukt: + * 0 Beispiel 2: Verschmelzen sortierter Zahlenfolgen: merge

17 6.1.1 Imperative Formulierung Kanaltyp repräsentiert durch generische Schnittstelle interface Channel { void send(Message m); Message recv(); } Prozesse erzeugen, die mit Kanälen parametrisiert sind (mehrere Sender/Empfänger je Kanal möglich!)

18 Beispiel (s.o.): Verschmelzen dreier Zahlenfolgen void merge3(Channel in1, Channel in2, Channel in3, Channel out) { Channel ch = new ChImp(); FORK merge(in1, in2, ch); FORK merge(ch, in3, out); } mit FORK wie in 2.1.22.1.2 und merge wie folgt:

19 void merge(Channel in1, Channel in2, Channel out) { int one = (in1.recv()).intValue(); int two = (in2.recv()).intValue(); while(true) { if(one < two) { out.send(new Integer(one)); one = (in1.recv()).intValue();} else {out.send(new Integer(two)); two = (in2.recv()).intValue();} } arbeitet nichtterminierend auf unendlichen Eingabefolgen! (Übung: endliche Folgen mit null als Ende-Markierung)

20 Ohne Objektorientierung, Kommunikation als Sprachkonzept: z.B. CSP (Hoare 1978) Occam (Inmos Ltd. 1983, für Transputer) Pascal-FC (Burns/Davies 1993, für Ausbildung) Senden:ChannelExpr ! MessageExpr Empfangen:ChannelExpr ? MessageVar Nebenläufigkeitsanweisung: PAR process1 process2...

21 Einfaches Beispiel Produzent und Verbraucher: CHAN ch: PAR REAL64 x: SEQ produce x ch ! x continue REAL64 y: SEQ prepare ch ? y consume y

22 Beachte:Kanäle und Semaphore sind gleich mächtig:  Kanäle können mit Semaphoren implementiert werden (3  ):3 class Buffer implements Channel {...}  Semaphore können mit Kanälen implementiert werden: class ChanSema implements Semaphore { Channel c = new Ch (); public void P() {c.recv();} public void V() {c.send(null);} public ChanSema(int init){ for(int i=0; i<init; i++) V(); } }

23 6.1.2 Deklarative Formulierung in hypothetischer Datenflußsprache (dataflow language)  Kanäle benennen  Prozesse deklarieren, auf Kanäle bezogen (mehrere Sender/Empfänger je Kanal möglich!) ! Es wird vorausgesetzt, daß Elementarbausteine wie *, +, merge,... fertig vorliegen (als Sprachelemente oder in Bibliothek)

24 Beispiel Partialsummen: sums(in chan float a, in chan float b, out chan float s) channels float product, float sum, float back(0) filters times(a,b,product), plus(product,back,sum), copy(sum,back,s) end sums.

25 Beispiel Verschmelzen: merge3(in chan int in1, in chan int in2, in chan int in3, out chan int res) channels int ch filters merge(in1,in2,ch), merge(ch,in3,res) end merge3.

26 6.1.3 Pipes und Pipelines in Unix Ein interaktives Programm mit einfacher, textbasierter Benutzer-Interaktion liest von Standard-Eingabe (standard input) – hinter der sich die Tastatur verbirgt (in Java durch Benutzung von System.in ), schreibt nach Standard-Ausgabe (standard output) – hinter der sich der Bildschirm verbirgt (in Java durch Benutzung von System.out )

27 Typische Systemaufrufe (system calls) für Ein/Ausgabe: read (portNumber, bufferAddress, byteCount) write(portNumber, bufferAddress, byteCount) In Unix: Lesen von Standard-Eingabe: read(0,b,c) Schreiben nach Standard-Ausgabe: write(1,b,c) ! 0, 1 sind implizite formale Parameter des Programms, die bei Programmstart mit bestimmten Kanälen aktualisiert werden ! read entspricht recv, write entspricht send.

28 Pipeline, in der Unix-Befehlssprache (Shell) formuliert, ist einfaches, lineares Datenflußsystem in deklarativer Formulierung (2.1.2  )2.1.2 Beispiel: ls | grep.pdf | wc –l grep.pdf ls wc –l ! Tiefsinnige Bedeutung von | :  Trennzeichen zwischen 2 Prozessen,  Kanal, der den Ausgabe-Port 1 des Senders mit dem Eingabe-Port 0 des Empfängers verbindet (nur 1 Sender/Empfänger je Kanal möglich!) liefert Anzahl der PDF-Dateien im aktuellen Verzeichnis

29 Als Kanal fungiert eine Pipe ( = „Rohr“), die mit einem speziellen Systemaufruf eingerichtet werden kann. Befehlsinterpretierer richtet die benötigten Pipes ein und startet die Prozesse mit entsprechend aktualiserten Ports. (  VL Betriebssysteme) Datenflußarchitekturen werden daher häufig auch als pipe-and-filter architectures bezeichnet.

30 6.1.4 Funktionale Formulierung Zur Erinnerung: Bei Auswertung eines Funktionsaufrufs Argumentübergabe entweder als Wert (sofortige Auswertung, eager evaluation, applicative order evaluation, data-driven) oder als Ausdruck (verzögerte Auswertung, lazy evaluation, normal order evaluation, demand-driven)

31 Haskell praktiziert verzögerte Auswertung und erlaubt damit  nichtstrikte Funktionen  Verschränkung von Aufbau/Verarbeitung von Listen  unendliche Listen Verzögert ausgewertete Listen heißen auch Ströme (streams) und die damit arbeitenden Funktionen stromverarbeitende Funktionen (stream-processing f.)

32 Beispiel 1: Zahlenfolge durch Quadratwurzeln ersetzen roots :: Floating a => [a] -> [a] roots = map sqrt oder mit expliziter Rekursion: roots(h:t) = sqrt h : (roots t) Anwendung z.B. roots [3, 4, 5/0, 6] liefert [1.73205, 2.0,... (Fehlermeldung)

33 Noch prägnantere Anwendung: Liste wird vom Benutzer stückweise eingegeben (in Miranda, nicht in Haskell!) roots $+  [  3 ,1.73205  4 ,2.0 ^D... (Fehlermeldung weil roots[] nicht definiert) 6.1.4.1 Interaktive Benutzung

34 Beispiel 2: wie Beispiel 1, aber vorher negative Zahlen streichen saferoots stream = roots(map abs stream) oder saferoots = map sqrt. map abs Bildlich: sqrtabs  Datenfluß-Architektur ! Filter= Applikation einer stromverarbeitenden Funktion Port= formales Argument/Ergebnis mit Listentyp Kanal= (unsichtbar, Kapazität 0) Implementierung koroutinenartig, keine echte Nichtsequentialität

35 Sei f :: String -> String Skript prog.hs enthalte... main = interact f... Dann ist runhugs prog ein Unix-Filter, der eine Bytefolge stream in eine Bytefolge f stream umwandelt Achtung bei interaktivem Test: die Eingabe wird nicht geechot ! 6.1.4.2 Stromverarbeitende Funktion als Unix-Filter

36 Merke also: Unix Pipelines erlauben in einfacher Weise, Software zu entwickeln, die sowohl imperativen als auch funktionalen Code enthält Beispiel – vgl. mit obigem roots : roots = unlines. (map show). (map sqrt). (map read). lines main = interact roots

37 merge :: Ord a => [a] -> [a] -> [a] merge(x:xs)(y:ys) –- duplicates ignored ! | x = y = x : merge xs ys | x <= y = x : merge xs (y:ys) | x >= y = y : merge(x:xs) ys merge [] l = l merge l [] = l Damit z.B. (6.1.1  )6.1.1 merge3 a b c = merge(merge a b)c 6.1.4.3 Mehrfache E/A-Ströme

38 2 Eingabe/Ausgabeströme bei einfachem Vergleichselement: xmin(x,y) ymax(x,y) liest 2 Zahlen an den Eingabe-Ports, schreibt 2 Zahlen an den Ausgabe-Ports sort2 :: Ord a => [a] -> [a] -> ([a],[a]) sort2(x:xs)(y:ys) = ((min x y) : mins, (max x y) : maxs) where (mins,maxs) = sort2 xs ys sort2[][] = ([],[])

39 Damit z.B. folgendes Sortiernetz: sort3 in1 in2 in3 = (out1,out2,out3) where (a,b) = sort2 in1 in2 (c,out3) = sort2 b in3 (out1,out2) = sort2 a c

40 Beachte:eine Nachricht erreicht u.U. als Rundsendung mehrere Empfänger – nämlich falls mehrfach auf einen Strom Bezug genommen wird ! Beispiel: Variante von roots : Wurzelberechnung wie in diesem Beispiel: 4–2516...  (4,2)(25,5)(16,4)... 6.1.4.4 Rundsendungen und Rückkoppelung

41 wurzeln x = zip y (map sqrt y) where y = map abs x abs sqrt (,)

42 Auch zyklische Datenflüsse sind möglich ! Beispiel Partialsummen von Skalarprodukt (s.o.):s.o. + * 0 abab c sums a b = c where x = times a b c = plus x (0:c) times a b = map2 (*) a b plus a b = map2 (+) a b

43 Beispiel Hamming-Problem: gesucht ist Zahlenfolge, die mit 1 beginnt, mit x auch die Zahlen 2x, 3x, 5x enthält, und nur solche.  1 2 3 4 5 6 8 9...

44 Beispiel Hamming-Problem: gesucht ist Zahlenfolge, die mit 1 beginnt, mit x auch die Zahlen 2x, 3x, 5x enthält, und nur solche.  1 2 3 4 5 6 8 9... merge3 2*5*3* 1 h h = 1 : merge3(map(2*)h)(map(3*)h)(map(5*)h)

45 6.1.5 Systolische Algorithmen = in Hardware gegossene Datenfluß-Algorithmen, mit getakteten, synchronen Parallelschritten Beispiele:  Sortiernetze  Matrix-Vektor-Multiplikation

46 6.1.5.1 Beispiel Sortiernetze xmin(x,y) ymax(x,y) liest 2 Zahlen an den Eingabe-Ports, schreibt 2 Zahlen an den Ausgabe-Ports Sortiernetze aus einfachen Vergleichselementen (6.1.4  ):6.1.4

47 3 Zahlen sortieren: (keine Parallelarbeit)3 Schritte 4 Zahlen sortieren: 4 Schritte 5 Zahlen sortieren: 5 Schritte 6 Zahlen sortieren: 6 Schritte

48  odd-even transposition sort * n Zahlen sortieren: Maximaler Parallelitätsgrad:n div 2  O(n) Anzahl Bausteine:½ n(n-1)  O(n 2 ) Anzahl Schritte:n  O(n) (statt typisch O(n log n) ) amortisiert für k Zahlensätze bei Pipelining: (n+k-1)/k  1 für k   * siehe Knuth (vol. 3) oder Cormen et al.

49 6.1.5.2 Beispiel Matrix-Vektor-Multiplikation Bauelement für einen Schritt des Skalarprodukts von Vektoren: a b cc‘ (b) (a) c‘ = c + a b

50 Damit systolischer Algorithmus fürC = A B mit spezieller Matrix: Bandmatrix der Breite k CAB c1a11a12b1 c2a21a22a23b2 c3a31a32a33a34b3 c4a42a43a44a45b4 c5a53a54.b5.....

51 a33a42 a23a32 a22a31 a12a21 a11 0 0 00 0 cici bibi... b 2 0 b 1

52 a33a42 a23a32 a22a31 a12a21 0a11 0 0 0 cici bibi b1b1 0

53 a33a42 a23a32 a22a31 a12 0a21 0 0 cici bibi b1b1 a 11 b 1 b2b2

54 a33a42 a23a32 0a22 0a31 0 cici bibi b2b2 a 21 b 1 b1b1 a 11 b 1 + a 12 b 2

55 a33a42 a23a32 0 cici bibi b2b2 a 31 b 1 a 21 b 1 + a 22 b 2 b3b3 0

56 a33a42 0 cici bibi b2b2 a 31 b 1 + a 32 b 2 b3b3 a 21 b 1 + a 22 b 2 + a 23 b 3

57 a34 a43 0 cici bibi b4b4 a 42 b 2 b3b3 a 31 b 1 + a 32 b 2 + a 33 b 3 0

58 0 cici bibi b4b4 b3b3 a 31 b 1 + a 32 b 2 + a 33 b 3 + a 34 b 4 a 42 b 2 + a 43 b 3

59 ... usw. Vergleich mit Beispiel Sortiernetze:  hier typischer Pipelining-Algorithmus  k Funktionseinheiten bei Bandbreite k (auch k/2 möglich)  für Ergebnisvektor der Länge n sind 2n + k Schritte erforderlich – im Gegensatz zu O(n k) Schritten bei sequentieller Berechnung


Herunterladen ppt "6 Interaktion über Nachrichten. Motivation: Prozesse haben keinen gemeinsamen Speicher, in dem sie gemeinsame Objekte unterbringen könnten z.B.Parallelrechner."

Ähnliche Präsentationen


Google-Anzeigen