+ All Categories
Home > Documents > 6.5 Lindas Tupelraum Interaktion von Prozessen über zentralen Umschlagplatz für alle zwischen...

6.5 Lindas Tupelraum Interaktion von Prozessen über zentralen Umschlagplatz für alle zwischen...

Date post: 05-Apr-2015
Category:
Upload: bernd-welz
View: 105 times
Download: 0 times
Share this document with a friend
21
6.5 Lindas Tupelraum nteraktion von Prozessen über zentralen Umschlagplatz ür alle zwischen Prozessen ausgetauschten Daten: upelraum (tuple space) (Carriero/Gelernter, Yale 1985) = Multimenge von Tupeln beliebiger Typen
Transcript
Page 1: 6.5 Lindas Tupelraum Interaktion von Prozessen über zentralen Umschlagplatz für alle zwischen Prozessen ausgetauschten Daten: Tupelraum (tuple space) (Carriero/Gelernter,

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

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

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.

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

Musteranpassung bei read t und in t :

(x1,...,xn) paßt zu (t1,...,tm) , wenn

n = m

die Typen von xi und ti sind gleich (für alle i)

(abschwächbar bei polymorphen Typen)

xi = ti – außer wenn der Variablen ti ein ?vorangestellt ist: ti fungiert dann als

Platzhalter (wildcard)

z.B. mit int count und boolean b = false

paßt (4711, 17, false) zu (4711, ? count, b)

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

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

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

Prozeßerzeugung:

eval t arbeitet wie ein „asynchrones out“:

alle ti 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)

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

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)

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

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).

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

6.5.2 Programmbeispiele

findet man in den Bereichen

Parallelrechnen

Client/Server-Systeme

u.a.

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

6.5.2.1 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)

vi nach x lesen: read("v", i, ? x)

vi verändern: in ("v", i,?old)out("v", i, new)

Element hinzufügen oder löschen mit out bzw. in

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

6.5.2.2 n Philosophen bei Tisch

Initialisierung:

for(int i=0; i<n-1; i++) out("room ticket"); // jeweils höchstens n-1 Philosophen werden // am Tisch zugelassen, um Verklemmungen // zu vermeiden

for(int i=0; i<n; i++) { out("chopstick", i); // Stäbchen hinlegen eval(philosopher(i)); } // Philosophen starten

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

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!)

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

6.5.2.3 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);

}

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

Klient:

int ticket;

in("ticket", ? ticket); // ticket dispenserout("ticket", ticket+1);

... prepare request ...

out("4711", "request", ticket, request);in ("4711","response", ticket, ? response);

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

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

http://java.sun.com/products/javaspaceshttp://wwws.sun.com/software/jini/specs/jini1.2html/js-title.html

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

6.5.3.1 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:

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

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.

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

6.5.3.2 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.

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

6.5.3.3 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;}

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

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 ...

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

... prepare request data ...

Request request = new Request(number, data);

service4711.write(request, null, 0);

Response response = new Response(number);

response = service4711.take(response, null, 0);

... process response ...

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

Ende der Folien

zur 2-st. Vorlesung Nichtsequentielle Programmierung

Weiterführende Themen:

Softwaretechnik für nichtsequentielle Systeme

Formale Methoden (Spezifikation, Verifikation)

Parallelprogrammierung

Betriebssysteme

Verteilte SystemeEnde


Recommended