Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

6.5 Lindas Tupelraum Interaktion von Prozessen über zentralen Umschlagplatz für alle zwischen Prozessen ausgetauschten Daten: Tupelraum (tuple space) (Carriero/Gelernter,

Ähnliche Präsentationen


Präsentation zum Thema: "6.5 Lindas Tupelraum Interaktion von Prozessen über zentralen Umschlagplatz für alle zwischen Prozessen ausgetauschten Daten: Tupelraum (tuple space) (Carriero/Gelernter,"—  Präsentation transkript:

1 6.5 Lindas Tupelraum Interaktion von Prozessen über zentralen Umschlagplatz für alle zwischen Prozessen ausgetauschten Daten: Tupelraum (tuple space) (Carriero/Gelernter, Yale 1985) = Multimenge von Tupeln beliebiger Typen

2 6.5.1 Die Sprache Linda Benutzung des Tupelraums T mit folgenden atomaren Anweisungen: out t bewirkt T = T + { t } read t bewirkt t' = x, sobald ein zu t passendes (s.u.) x in T vorhanden ist in t wie read t, außerdem T = T - { x } Die Elemente von x sind Werte, die von t sind Ausdrücke. t fungiert als Muster (template, pattern) für die Tupel-Auswahl.

3 Musteranpassung bei read t und in t : (x 1,...,x n ) paßt zu (t 1,...,t m ), wenn n = m die Typen von x i und t i sind gleich (für alle i) (abschwächbar bei polymorphen Typen) x i = t i – außer wenn der Variablen t i ein ? vorangestellt ist: t i fungiert dann als Platzhalter (wildcard) z.B. mit int count und boolean b = false paßt (4711, 17, false) zu (4711, ? count, b)

4 Beispiele: Nach out(4711, 17, false) und out(4712, 0, true ) bewirkt in(4711, ? count, ? b) den Effekt count = 17, b = false und die Entfernung von (4711, 17, false) aus dem Tupelraum Ein weiteres in (4711, ? x, ? y) blockiert und wird durch ein out(4711, a, b) aufgeweckt

5 Prozeßerzeugung: eval t arbeitet wie ein asynchrones out : alle t i werden asynchron ausgewertet, und sobald das Tupel vollständig ausgewertet ist, wird es im Tupelraum abgelegt z.B. eval("task1", f(x)) (wie fork )... tue etwas anderes... read("task1", ? y) (wie join )

6 Die aus in,out,read,eval bestehende Sprache heißt Linda. Genauer:Linda ist ein Sprachmuster und benötigt eine Wirtssprache, in die die Operationen eingebettet sind, mit Anpassung an das Typsystem der Wirtssprache. Existierende Beispiele: Linda für C, C++, Modula, Eiffel,.....und Java (6.5.3)

7 Implementierungen von Linda-Einbettungen gibt es für verschiedene Systeme, auch für Parallelrechner, insbesondere auch für Mehrrechnersysteme mit verteiltem Speicher und für lose gekoppelte Systeme Charakteristika von Linda/Tupelraum: extrem lose Koppelung der beteiligten Prozesse, daher sehr flexibel einsetzbar, evtl. auch elegant, aber manchmal auch umständlich (und ineffizient).

8 6.5.2 Programmbeispiele findet man in den Bereichen Parallelrechnen Client/Server-Systeme u.a.

9 Dünn besetzter Vektor Vektor v als Menge von Tupeln im Tupelraum: ("v", 3, 12.34) ("v", 17, 0.29) ("v", 41, 5.06) ("v", 66, 47.58) v i nach x lesen: read("v", i, ? x) v i verändern: in ("v", i,?old) out("v", i, new) Element hinzufügen oder löschen mit out bzw. in

10 n Philosophen bei Tisch Initialisierung: for(int i=0; i

11 void philosopher(int i) { while(true){ think(); in("room ticket"); in("chopstick", i); in("chopstick", (i+1)%n); eat(); out("chopstick", i); out("chopstick", (i+1)%n); out("room ticket"); } } (wie mit Semaphoren!)

12 Klienten und Anbieter Anbieter des Dienstes 4711: int ticket = 0; out("ticket", 0); while(true){ in("4711", "request", ticket, ? request);... compute response from request... out("4711","response",ticket++, response); }

13 Klient: int ticket; in("ticket", ? ticket); // ticket dispenser out("ticket", ticket+1);... prepare request... out("4711", "request", ticket, request); in ("4711","response", ticket, ? response);

14 6.5.3 JavaSpaces = Java-Objekte mit Tupelraum-Schnittstelle und Tupel-Objekten, die als (tiefe) Kopien in den / aus dem Tupelraum gelangen Änderungen/Erweiterungen gegenüber Linda: Objektorientierung mehrere Tupelräume Persistenz/Transaktionen

15 Schnittstelle interface JavaSpace { Lease write(Entry tuple, // entspricht out Transaction trans, long lease) throws...; Entry take (Entry template, // entspricht in Transaction trans, long timeout) throws...; Entry read (Entry template, // entspricht read Transaction trans, long timeout) throws...;... } Entry ist Marker Interface :

16 Tupel und Muster müssen folgende Gestalt haben: class Example implements Entry { public Example() {} public T1 attr1; public T2 attr2;... } Die Attribute attr1, attr2,... sind die Elemente des Tupels bzw. des Musters - ihre Typen müssen Verweistypen sein.

17 Musteranpassung Ein Tupel t paßt zu einem Muster m, wenn die Typen gleich sind und die Werte der Attribute gleich sind, außer daß null im Muster m als Platzhalter dient.

18 Beispiel Dienst-Benutzung class Ticket implements Entry { public Ticket() {} public Ticket(int n) { number = new Integer(n); } public Integer number; } class Request implements Entry { public Request() {} public Request(int n, Data d) { number = new Integer(n); data = d; } public Integer number; public Data data; }

19 Klient: JavaSpace service4711 =...; Ticket ticket = new Ticket(); ticket = service4711.take(ticket, null, 0); int number = ticket.number.intValue(); service4711.write(new Ticket(number+1);... prepare request data...

20 Request request = new Request(number, data); service4711.write(request, null, 0); Response response = new Response(number); response = service4711.take(response, null, 0);... process response...

21 Ende der Folien zur 2-st. Vorlesung Nichtsequentielle Programmierung Weiterführende Themen: Softwaretechnik für nichtsequentielle Systeme Formale Methoden (Spezifikation, Verifikation) Parallelprogrammierung Betriebssysteme Verteilte Systeme Ende


Herunterladen ppt "6.5 Lindas Tupelraum Interaktion von Prozessen über zentralen Umschlagplatz für alle zwischen Prozessen ausgetauschten Daten: Tupelraum (tuple space) (Carriero/Gelernter,"

Ähnliche Präsentationen


Google-Anzeigen