Top Banner
1 DAJ - DAJ A Toolkit for the Simulation of Distributed Algorithms in Java
47

DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

Apr 06, 2016

Download

Documents

Heini Gehrig
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

1

DAJ -

DAJ

A Toolkit for the Simulation of Distributed Algorithms in Java

Page 2: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

2

DAJ -

1. Einführung in DAJ

2. Grundsätzlicher Aufbau von DAJ – Anwendungen

3. Beispielanwendung: Broadcast durch Fluten

4. Beispielanwendung: Token Ring

5. Zusammenfassung und Fazit

Übersicht

Page 3: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

3

DAJ -

1. Einführung in DAJ

Einführung in DAJ

1.1 Der Autor

Page 4: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

4

DAJ - Einführung in DAJ – Wolfgang Schreiner

• Wolfgang Schreiner• derzeit tätig am Institut für symbolisches Rechnen• RISC – Johannes Kepler Universität, Linz, Österreich• DAJ (1997)• Distributed Maple (1998 - ?)• Brokering Distributed Mathematical Services (2001-2003)

Page 5: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

5

DAJ - Einführung in DAJ

1.2 Definition und Ziel

Page 6: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

6

DAJ -

DAJ (1997):

Definition und Ziel

„DAJ is a toolkit for designing, implementing, testing, simulating, and visualizing distributed algorithms in Java.“ (Schreiner)

„ The goal of the toolkit is to provide an universally accessible platform for research and education in the area of distributed algorithms.“ (Schreiner)

Page 7: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

7

DAJ -

Merkmale:

• bestehend aus einer Java Bibliothek mit einfacher Schnittstelle• Nachrichtenbasiertes System• Kommunikation zwischen Knoten durch Punkt-zu-Punkt Nachrichten in Kanälen die Knoten verbinden • Selbstdefinierte Knotenprogramme werden auf den Knoten ausgeführt• lokale Zeitmessungen in den Knoten sowie für die gesamte Applikation• DAJ - Anwendungen ausführbar als eigenständige Anwendung oder Java - Applet

Definition und Ziel

Page 8: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

8

DAJ - Definition und Ziel

Ziel:

• Problem der hohen Abstraktion bei verteilten Systemen• praktische Umsetzung der in der Lehre vorgestellten Algorithmen erleichtern• schwergewichtige Bibliotheken (z.B. PVM) in der Ausbildung ersetzen• leichtgewichtige Variante schaffen• Transparenz nach unten schaffen

Page 9: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

9

DAJ - Visualisierung

1.2 Visualisierung

Page 10: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

10

DAJ - Oberfläche

Page 11: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

11

DAJ -

• gleiche Oberfläche bei Applets und eigenständigen Applikationen• Darstellung durch gerichteten Graphen• Verschiedene Farbkombinationen geben Status wieder• 1 Zeitschritt in der Anwendung entspricht einer

Sende/Empfangsoperation• Tooltips geben ebenfalls Informationen über Status

Oberfläche

Page 12: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

12

DAJ - Darstellung eines einzelnen Knotens

Name des Knotens

Aktuelle lokale Zeit

Eingehender Kanal

Ausgehender Kanal

• Knoten mit der Bezeichnung „Master“ im initialen Zustand• zwei Kanäle zum Senden bzw. Empfangen

Page 13: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

13

DAJ - Darstellung eines einzelnen Knotens

Knoten „2“ im initialen Zustand und bereit zur Ausführung seines internen Programms

Knoten „1“ im Zustand des blockierenden Wartens auf eine Nachricht aus dem linken eingehenden Kanal.

Knoten „1“ empfängt eine Nachricht,die über den eingehenden Kanal eintrifft.

Knoten „1“ hat die Nachricht aus dem Kanal empfangen und setzt seine lokale Zeit auf 1

Knoten 1 hat die Ausführung seines internen Programms beendet

Page 14: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

14

DAJ -

Kanal ist leer, und der Knoten auf der Empfängerseite wartet auf eine Nachricht.

Der Kanal enthält mindestens eine Nachricht.

Darstellung eines Kommunikationskanal

Page 15: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

15

DAJ -

2. Aufbau von DAJ

Aufbau von DAJ

Page 16: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

16

DAJ -

• Unterscheidung von 3 Programmteilen:

1. Anwendung oder Applikation2. Knotenprogramm3. Nachrichten

• Ein Knotenprogramm läuft in einer eigenen Ausprägung auf einem Knoten und kommuniziert mithilfe von Nachrichten mit anderen Knoten (besser: deren Knotenprogrammen). Die Anwendung ist die Zusammenfassung aller Knoten und deren Überwachung.

Aufbau von DAJ

Page 17: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

17

DAJ -

3. Beispielanwendung: Broadcast durch Fluten

Broadcast durch Fluten

Page 18: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

18

DAJ - Definition des Flutens

• beliebige Verkettung von Knoten mithilfe von bidirektionalen Verbindungen• Broadcast in das Netz mithilfe von Fluten• Auslöser sendet an alle Ausgänge die Nachricht• Knoten nehmen Nachricht entgegen und senden ebenfalls auf deren Ausgänge die Nachricht (mit Ausnahme an den Knoten der die Nachricht gesendet hat)

• mögliche Erweiterung durch Einschränken der maximalen Anzahl von Knotenschritten (Hops)• Grundlage für den Echo-Algorithmus

Page 19: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

19

DAJ - Arbeitsschritte zur Realisierung

Erforderliche Arbeitsschritte um die Anwendung zu realisieren:

1. Nachrichten definieren2. Knotenprogramme implementieren3. Anwendung / Applikation definieren

Page 20: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

20

DAJ - Nachrichten definieren

1.Schritt (Nachrichten definieren):Vorraussetzung: Jeder eigene Nachrichtentyp muss die Klasse Message

erweitern.

• für diese Anwendung wird nur ein Nachrichtentyp benötigt

public class FloodMessage extends Message {

// Knoten der die Flutnachricht versendet hatprivate FloodNode oSender = null;

/** * Konstruktor mit Parameter des Absenders * @param oSender - Absender */

public FloodMessage(FloodNode oSender) {this.oSender = oSender;

}

Page 21: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

21

DAJ -

/** * Liefert den Absender der Nachricht * @return - Absender */public FloodNode getSender() {

return this.oSender;}

/** * Methode liefert den Text der in * der Visualisierung für die Nachricht * angezeigt werden soll */public String getText() {

return "Aufruf zum Fluten von " + this.oSender.getNodeName();}

Nachrichten definieren

Page 22: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

22

DAJ - Knotenprogramme definieren

Schritt 2 (Knotenprogramme implementieren):

Vorraussetzung: Jedes eigene Knotenprogramm muss die abstrakte Klasse Program erweitern und die Methode main() implementieren.

Die main()-Methode muss folgendes leisten:

• ein ausgezeichneter Knoten muss das Fluten starten• Knoten muss eingehende Nachrichten empfangen• weiterleiten der Nachricht auf alle ausgehenden Kanäle • nicht weiterleiten auf einen Kanal auf dessen Empfängerseite der Absender sitzt• den Knoten als geflutet markieren

Page 23: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

23

DAJ - Knotenprogramme definieren

Definition der main()-Methode:

public class FloodNode extends Program {

public void main() {

if(this.in().getSize() != 0) {// Überprüfen, ob der Knoten die Flut starten sollif(this.bStartFlood) {

// an alle ausgehenden Kanäle sendenthis.out().send(new FloodMessage(this));// Knotenflag auf true setzenthis.bFlooded = true;

} else {

- hier Behandlung des ausgezeichneten Knotens zum Starten des Flutens

Page 24: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

24

DAJ - Knotenprogramme definieren

// den Kanal der eingehenden Nachricht bestimmenint iIndex = this.in().select();// Nachricht aus dem Kanal abrufenFloodMessage oMsg = (FloodMessage) this.in(iIndex).receive();// Auf allen ausgehenden Kanälen die Nachricht versendenfor(int i = 0; i < this.out().getSize(); i++) {

// den Knoten bestimmen der hinter dem Kanal empfängtNode oReceiver = ((Channel) this.out(i)).getReceiver();

// ... nur nicht auf den Kanal senden, der Sender war if(!oReceiver.getProgram().equals(oMsg.getSender())) {

this.out(i).send(new FloodMessage(this));}

}// Flag setzen das Knoten in Flut erfasst wurdethis.bFlooded = true;

- Teil im else-Zweig, der die Behandlung der normalen Knoten übernimmt

Page 25: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

25

DAJ - Anwendung / Applikation definieren

Schritt 3 (Anwendung / Applikation definieren):

Vorraussetzung: Jede DAJ-Anwendung muss die abstrakte Klasse Application erweitern und die Methode construct() implementieren.

public class FloodApplication extends Application {

public FloodApplication() {// Fenster erstellen mit Titel und Größesuper("Fluten des Netzes",500,400);

}

public static void main(String[] args) {// eine Applikation erstellen und ausführen(new FloodApplication()).run();

}

Page 26: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

26

DAJ - Anwendung / Applikation definieren

public void construct() {// Zufallsgenerator konstruierenRandom oRand = new Random();

// Feld von Knoten erstellenNode[] aNodes = new Node[7];

// einzelne Knoten erzeugenaNodes[0] = this.node(new FloodNode("Master", true),"Master",300,50);…

// zufällige Verbindungen zwischen den Knoten schaffenfor(int i = 0; i < aNodes.length; i++) {

for(int j = 0; j < aNodes.length; j++) {if(oRand.nextBoolean())

this.link(aNodes[i],aNodes[j]);}

}}

Page 27: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

27

DAJ -

Die Anwendung ist in diesem Zustand nun ausführbar.

Demonstration

Das Einbinden der Anwendung als Applet würde folgendermassen aussehen:

<APPLET code="Flood.FloodApplication.class" width=200 height=25 archive="daj.jar, awt.jar"><param name=buttonLabel value="Klick mich zum Fluten"><param name=fontName value="Arial"><param name=fontStyle value="Bold"><param name=fontSize value=12>Leider kannst Du das Netz nicht fluten !

</APPLET>

Anwendung / Applikation definieren

Page 28: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

28

DAJ -

4. Beispielanwendung: Token Ring

Token Ring

Page 29: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

29

DAJ -

• Zusammenschluss von Knoten in eine Ringstruktur• Verbindung der Knoten über unidirektionale Kommunikationskanäle• Token symbolisiert Senderecht• Besitzer des Tokens sendet seine Nachricht, wartet bis diese einmal

durch den Ring gegangen ist und sendet dann den Token an seinen Nachfolger

• Jeder Knoten der nicht das Senderecht besitzt leitet einkommende Nachrichten an seinen Nachfolger weiter

Definition eines Token Ring

Page 30: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

30

DAJ -

Erforderliche Arbeitsschritte um die Anwendung zu realisieren:

1. Token und Nachrichten definieren2. Knotenprogramme implementieren3. Anwendung / Applikation definieren4. Möglicherweise Zusicherungen integrieren

Realisierung mithilfe von DAJ

Page 31: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

31

DAJ -

Schritt 1 (Token und Nachricht definieren):

Token und Nachrichten definieren

Vorraussetzung: Jeder eigene Nachrichtentyp muss die Klasse Message erweitern.

Token: Der Token ist ein Symbol, er enthält also keine wirklichen Nutzdaten. (ausser man realisiert Piggy-Backing)

public class Token extends Message {/** * Diese Methode wird aufgerufen, wenn man den * Tooltip eines Kanals abruft */public String getText() {

return "Token"; }

}

Page 32: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

32

DAJ -

• (Ring-)Nachricht beinhaltet den Absender und die eigentliche Textnachricht• In diesem Fall private Attribute, die über get()-Methoden abfragbar sind

Token und Nachrichten definieren

public class RingMessage extends Message {

private SingleNode oSender = null; // Absenderprivate String sMessage = null; // Nachricht

/** * Methode liefert den Inhalt der Nachricht. Wird * beim Tooltip im Kanal aufgerufen. */public String getText() {

return this.oSender.getNodeName() + " " + sMessage; }

}

Page 33: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

33

DAJ - Knotenprogramme definieren

Schritt 2 (Knotenprogramme implementieren):

Vorraussetzung: Jedes eigene Knotenprogramm muss die abstrakte Klasse Program erweitern und die Methode main() implementieren.

Die main()-Methode muss folgendes leisten:

• eine ausgezeichnete Station muss den Token erzeugen• auf eingehende Nachrichten warten• unterscheiden ob ein Token oder Nachricht erhalten wurde• bei empfangenem Token eigene Nachricht senden• bei eigener empfangener Nachricht Token weitersenden• bei fremder Nachricht zwischenspeichern und weiterleiten

Page 34: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

34

DAJ - Knotenprogramme definieren

public class SingleNode extends Program {...public void main() {

// Überprüfen, ob dieser Knoten der Master istif(bMaster) {

// Knoten ist der Master, er darf seine Nachricht als// erster sendenout(0).send(new RingMessage(this, "Hallo an alle."));// nun auf die eigene Nachricht wartenthis.oMessage = (RingMessage) in(0).receive();// nun den Token weiterschickenout(0).send(new Token());

}

Definition der main()-Methode mit Sonderbehandlung eines ausgezeichneten Knotens:

Page 35: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

35

DAJ - Knotenprogramme definieren

// Schleife wird von jedem Knoten durchlaufenwhile(true) {

// der Knoten wartet auf eine NachrichtMessage oMsg = in(0).receive();if(oMsg.getClass().equals(Token.class)) {

// Nachricht ist ein Token, das bedeutet eigene // Nachricht senden...out(0).send(new RingMessage(this, "Hallo an

alle."));// ... auf die eigene Nachricht warten...this.oMessage = (RingMessage) in(0).receive();// ... und Token weitersendenout(0).send(new Token());

} else {// Nachricht speichern ...this.oMessage = (RingMessage) oMsg;// ... und weiterleitenout(0).send(this.oMessage);

}}

Page 36: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

36

DAJ - Anwendung / Applikation definieren

Schritt 3 (Anwendung / Applikation definieren):

Vorraussetzung: Jede DAJ-Anwendung muss die abstrakte Klasse Application erweitern und die Methode construct() implementieren.

public class TokenApplication extends Application {

public TokenApplication() {// Titel und Größe des Fensters setzensuper("Token-Ring", 500, 400);

}

public static void main(String[] args) {(new TokenApplication()).run();

}

Page 37: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

37

DAJ - Anwendung / Applikation definieren

public void construct() {// Knoten erzeugenNode oMaster = this.node(new SingleNode("Master",true),

"Master",250,50);Node oNode1 = this.node(new SingleNode("Knoten 1", false),

"Knoten 1",400,150);Node oNode2 = this.node(new SingleNode("Knoten 2", false),

"Knoten 2",330,270);Node oNode3 = this.node(new SingleNode("Knoten 3", false),

"Knoten 3", 170, 270);Node oNode4 = this.node(new SingleNode("Knoten 4",false),

"Knoten 4", 100,150);

// Verknüpfungen zwischen den Knoten erstellenthis.link(oMaster,oNode1);this.link(oNode1, oNode2);this.link(oNode2, oNode3);this.link(oNode3, oNode4);this.link(oNode4,oMaster);

}

Page 38: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

38

DAJ - Anwendung / Applikation definieren

Die Anwendung ist in diesem Zustand nun ausführbar.

Demonstration

Das Einbinden der Anwendung als Applet würde folgendermassen aussehen:

<APPLET code="TokenRing.TokenApplication.class" width=200 height=25 archive="daj.jar, awt.jar"><param name=buttonLabel value="Klick mich für den Token-Ring"><param name=fontName value="Arial"><param name=fontStyle value="Bold"><param name=fontSize value=12>Leider kannst Du nicht mit dem Token-Ring spielen !

</APPLET>

Page 39: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

39

DAJ - Zusicherungen integrieren

Schritt 4 (Zusicherungen integrieren):Folgende Aussagen können (oder sollen) über den Token-Ring getroffen werden:

• es befindet sich zu jeder Zeit immer genau ein Token im Ring• es sendet immer nur der Knoten der den Token besitzt• es befindet sich stets nur eine Nachricht im Ring

In Java können solche Zusicherungen durch Einsatz des Schlüsselwortes assert realisiert werden.

The assertion statement has two forms. The first, simpler form is:

assert Expression1 ;

where Expression1 is a boolean expression. When the system runs the assertion, it evaluates Expression1 and if it is false throws an AssertionError with no detail message

(Java 1.4 API – Keyword: assert)

Page 40: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

40

DAJ - Zusicherungen integrieren

Problem:

Mithilfe von assert können nur die Programme auf den Knoten lokal, Zusicherungen geben, in einem verteilten, nebenläufigen System muss aber eine Aussage über den Gesamtzustand getroffen werden.

Lösung in DAJ:

Aussagen über den Gesamtzustand mithilfe der abstrakten Klasse GlobalAssertion.

Eine GlobalAssertion erhält den Überblick über den Gesamtzustand des verteilten Systems, in dem es die Knotenprogramme zur Betrachtung benutzt.

abstract class GlobalAssertion { abstract boolean assert(Program program[]) String getText() static Message[] getMessages(InChannel c) static Message[] getMessages(OutChannel c)

}

Page 41: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

41

DAJ - Zusicherungen integrieren

Beispiel:

Umsetzung der Zusicherung

- es befindet sich zu jeder Zeit immer genau ein Token im Ring

mithilfe von GlobalAssertions

public class SingleTokenAssertion extends GlobalAssertion {

// Anzahl der gezählten Tokensprivate int iTokenCount = 0;

/** * Text, der bei einem Fehlverhalten der Applikation ausgegeben * wird */public String getText() {

return "Ungültige Anzahl von Token im Ring enthalten: " + iTokenCount; }

Page 42: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

42

DAJ - Zusicherungen integrieren

public boolean assert(Program[] aPrograms) {this.iTokenCount = 0;

// Alle Programme durchlaufen und überprüfen, // und auf jedem Knoten hasToken aufrufenfor(int i = 0; i < aPrograms.length; i++) {

SingleNode oNode = (SingleNode) aPrograms[i];if(oNode.hasToken())

iTokenCount++;

// Überprüfen, ob in den Ausgangskanälen ein Token enthalten istMessage[] aMessages = GlobalAssertion.getMessages(oNode.out(0));for(int j = 0; j < aMessages.length; j++) {

if(aMessages[j].getClass().equals(Token.class)) this.iTokenCount++;

}}

return (iTokenCount == 1);}

Page 43: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

43

DAJ - Zusicherungen integrieren

Einbinden der GlobalAssertion in das Knotenprogramm:

// Zusicherungen erzeugenGlobalAssertion oTokenAssert = new SingleTokenAssertion();

// Überprüfen, ob dieser Knoten der Master istif(bMaster) {

// Invariante prüfenassert(oTokenAssert);// Knoten ist der Master, er darf seine Nachricht als// erster sendenout(0).send(new RingMessage(this, "Hallo an alle."));// nun auf die eigene Nachricht wartenthis.oMessage = (RingMessage) in(0).receive();// nun den Token weiterschickenthis.bToken = false;out(0).send(new Token());

}

Page 44: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

44

DAJ - Mögliche Erweiterungen

Visualisierung anpassen:

• Einstellen der Schriftarten• Festlegen der Radien der Knoten• Kanalbreite definieren• Browser einstellen

Ausführung anpassen:

• Scheduler zur Anpassung des Ablaufes von Knotenprogrammen (z.B. zur Implementierung von asynchronen Netzwerken etc.)

• Message Selector bietet die Möglichkeit die Reihenfolge von Nachrichten zu manipulieren (z.B. zum Simulieren von Duplizieren oder verlorenen Nachrichten)

Page 45: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

45

DAJ - Fazit

5.Fazit

Page 46: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

46

DAJ - Fazit

Vorteile:

+ Einfache Installation der erforderlichen Pakete+ Ebenfalls einfaches Einbinden der Bibliotheken in die IDE (hier mit Eclipse)+ Einfach gehaltene Schnittstellen ermöglichen schnelle Implementierung einfacher Systeme+ Kein zusätzliches Einarbeiten in eine eigene Definitionssprache+ Plattform unabhängig durch Java+ Implementierung von komplexen Algorithmen ist möglich

Nachteile:

- Darstellung wird bei mehr als 5 Knoten unübersichtlich- Darstellung von Abläufen über verschiedene Farbkombinationen unglücklich- kleinere Fehler beim Neuzeichnen nach Tooltips und Minimierung/Maximierung- Umständliches Programmieren zur Realisierung von Multicast/Broadcast- Trennen von Nachricht empfangen und Kanal leeren in zwei Schritten- umständliches Feststellen des Sender und Empfänger eines Kanals- aufwendiges Erstellen des Netzwerkes

Page 47: DAJ - 1 DAJ A Toolkit for the Simulation of Distributed Algorithms in Java.

47

DAJ - Quellen

• [Schreiner] DAJ – Documentation, http://www.risc.uni-linz.ac.at/software/daj/• [SUN] J2SE 1.4.2 API Specification, http://java.sun.com/j2se/1.4.2/docs/api/• [Schiller] Telematik Skript, Token Ring – Folie 5.208• [Löhr] Verteilte Systeme Skript, Abschnitt Einführung in Verteilte Systeme• RISC Linz, Österreich - http://www.risc.uni-linz.ac.at/