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

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Imperative Programmierung
Imperative Programmierung
10.2 Wechselseitiger Ausschluss in Hardware
Wiederholung Betriebssystem bietet eine Abstraktion der Hardware an:
Zusammenfassung der Vorwoche
Kapselung , toString , equals , Java API
10. Grundlagen imperativer Programmiersprachen
der Universität Oldenburg
der Universität Oldenburg
Threads Richard Göbel.
Java: Dynamische Datentypen
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Grundlagen der Sprache
Algorithmentheorie 04 –Hashing
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 6 Model-View-Controler als Grundlage für Nutzerschnittstellen Sommersemester 2003 Lars Bernard.
Robotik mit LEGO Mindstorms
Imperative Programmierung
Übung Datenbanksysteme SQL-Anfragen (2)
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
DVG Ablaufsteuerung
DVG Felder1 Felder. DVG Felder 2 Was sind Felder? Felder sind Reihungen aus endlich vielen Elementen gleichen Typs. Z.B.: Vektoren : (x.
DVG Klassen und Objekte
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Einführung in die Programmierung Datensammlung
Einführung in die Programmierung Anweisungen und Datentypen
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 6 Sitzung 6: Model-View-Controller als Grundlage.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Grundkonzepte Java - Klassendefinition
Java programmieren mit JavaKara
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Grundlagen der Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Parallel Matrix Multiplication
Informatik 1 Letzte Übung.
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
Dynamische Datentypen
Datenbanksysteme für hörer anderer Fachrichtungen
Variablenkonzept Klassisch, in Java Basistyp
Relationales Datenmodell ist beherrschend: –Riesige Datenbestände und damit hohe Investitionen. –Die große Mehrzahl der Anwendungen arbeitet mit weitgehend.
Algorithmen und Datenstrukturen SS 2005
Einführung in PHP.
Einführung in PHP 5.
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Programmieren in C Grundlagen C 2
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
7.2.4 Klassifikation mobilen Codes Nicht vergessen:  Sowohl das Fernkopieren als auch die Migration von Objekten setzt voraus, daß der Code entweder am.
Formulare Vanessa Kogelbauer.
Sammlungsklassen Array.
2.3 Implementierung von Prozessen
Vs Replizierte Objekte Vollständige Replikationsabstraktion ist attraktiv und machbar. 2 Beispiele: Orca(H. Bal, VU Amsterdam, ) = klassenbasierte,
Vs Objektpufferung (caching) = dynamische, ad-hoc-Replikation einer Primärkopie: Zugriffswilliger beschafft sich temporär eine lokale Kopie cache.
Grafik (z.B.) einfügen mit Einfügen – Grafik – Aus Datei.
Controller Werkstatt updaten Werkstatt ws = werkstattarray.get(werkstattId); ws.setName(name); ws.setAnsprechpartner(ansprechpartner); ws.setTelefonnummer(telefonnummer);
Variablen und Operatoren. C++ Teil 2: Grundstrukturen Variablen Operatoren Kontrollstrukturen Funktionen Header-Dateien Pointer und Referenzen.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
 Präsentation transkript:

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

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.

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)

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

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 )

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)

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

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

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

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

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

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

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

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

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 :

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.

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.

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

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

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

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