Simulation d'algorithmes distribués Guide Utilisateur

chuckleelephantbutteΛογισμικό & κατασκευή λογ/κού

9 Ιουν 2012 (πριν από 5 χρόνια και 4 μήνες)

535 εμφανίσεις


Simulation d'algorithmes distribués
Guide Utilisateur
Sommaire
Section 1
3
Introduction
3 Configuration minimale
3 Utilisation
Section 2
Construction de graphes
4 La grammaire de graphe
6 Création du fichier XML
7 Exemples
Section 3
Ecrire des algorithmes
8 Les classes java à implémenter
9 Exemples
Section 4
Organiser des simulations
12 SAD en un coup d'oeil
13 Chargement d'un graphe et la trace
13 Manipulation du graphe
14 Autorun & gestion manuelle d'une simulation
15 Affichage des données d'un noeud ou d'un lien
16
Activation/désactivation d'un noeud ou d'un lien
17 A propos du scheduler
Section 5
A propos
2
Section 1
SAD
Introduction
SAD ou Simulation d'Algorithmes distribués est un logiciel opensource

graphique utilisé pour exécuter des simulations d'algorithmes distribués.

En offrant la puissance de la bibliothèque Java Jung

(http://jung.sourceforge.net) dans une interface graphique efficace, le

comportement des algorithmes est visualisé à l'utilisateur.
Nécessitant des algorithmes écrits en Java, SAD est dirigé vers un public

de développeurs et d'enseignants.
Configuration Minimale
La configuration minimale requise pour exécuter SAD est un ordinateur

capable d'exécuter Java Runtime Environment et un IDE Java (Netbeans

est fortement recommandé). Tout système d'exploitation pris en charge

par Java peut faire tourner SAD.
Utilisation
La simulation se décompose en trois parties :
-création des algorithmes répartis en implémentant les classes java

fournies
-création du fichier de configuration du graphe et sa transformation au

format XML
-chargement du fichier XML dans le logiciel et simulation
3
Section 2
Construction de graphes
La grammaire de graphe
La construction de graphe est réalisé avec une grammaire de nœud et de

lien.
Il ya deux étapes menant à la construction d'un graphe, chacunes

utilisant un vocabulaire spécifique.
IMPORTANT :l
es noms de classe et de

noeud ne peuvent pas commencer

par un chiffre
Etape 1: Ouvrer votre éditeur favori et créer un nouveau fichier
Etape 2 :
Création de chaque programme associé à son
algorithme

Syntaxe :
id_prog = prog(Class)

id_prog : id de l'algorithme (
DOIT ETRE UNIQUE
)

prog() : déclaration de l'algorithme

Class : nom de la classe java
Etape 3 :
Création de chaque noeud associé à son programme

Syntaxe :
node_name =

node(
id_prog
(param)
)

node_name : le nom du noeud (
DOIT ETRE UNIQUE
)

node
()
: déclaration du noeud

id_prog() : id du programme associé au noeud
param : les paramètres utilisés pour instantier la classe

java
4
Tous les paramètres possibles et leur type:
Etape 4 : Liaison des noeuds
IMPORTANT : un lien entre deux noeuds requiert l'existence des deux

noeuds
Syntaxe : edge(node1,node2)
créer un lien orienté de node1 vers node2
edge(node2,node1) est nécessaire pour que node2 envoi des
messages vers node1
5
"toto" : string
42 : int
(int)42 : int
(long)42 : long
(short)42 : short
(byte)42 : byte
42.0 : float
(float)42.0 : float
(double)42.0 : double
true : boolean
false : boolean
'r' : char
'\u0066' : char
Class1("params") : Class1 object
(string)null : null (type String)
(Class1)null : null (type Class1)
Etape 5 : Ajout des classes java utilisées comme algorithmes
Deux choix possibles :
Créer un arbre jar DANS le fichier du graphe
Syntaxe :
jar
("../path/to/jar/fileJar.jar",



jar



("path",







jar







(











"path",











id_prog=prog(Class1)







)



),



jar



(...



)
)
Ou/Et ajouter l'option -classpath au lancement de l'application
exemple :
java MyApps.jar -classpath "../path/to/jar/fileJar.jar"
IMPORTANT :
- les jar() doivent contenir 1 et 1 seule chaine pour le path
- les jar() peuvent contenir d'autres jar()
- Les identifiants de programme peuvent avoir le même nom que la

classe
- L'arbre de jars doit avoir des id_prog pour feuilles
6
Exemple
Création du fichier XML
Une fois le fichier créé, il doit être traité par l'analyseur OCAML
./parser input_file output_file.xml
7
jar("path/to/jar/fichierJar1.jar", jar("path/to/jar/fichierJar2.jar",

Prog_id1=prog(Prog1)))
Prog_id2=prog(Prog2)
node1=node(Prog_id1("foo", "bar"))
node2=node(Prog_id2(Class1((double)2.0, 42, (short)42)))
edge(node1, node2)
Section 3
Ecrire des algorithmes
Les classes java à implémenter
Écrire un algorithme nécessite d'implémenter la classe abstraite

NodeGUI pour l'algorithme etMessageGUI pour les messages entre les

nœuds.


implémentation de
das.engine.gui.NodeGUI
NodeGUI contient deux méthodes abstraites qui doivent être

implémenter afin d'obtenir des informations sur les nœuds.
java.lang.String[]

variableName
()

retourne un tableau contenant le titre

de toutes les variables faisant parties du protocole qui doivent être

affichées.
java.lang.Object[]

variableValue
()

retourne un tableau contenant les

nom des variables internes devant être affichées
void

loopit
()
contient l'algorithme lui-même
java.awt.Color

getColor()
retourne la couleur du noeud
String
toString()

doit être redéfini

implémentation de
das.engine.gui.MessageGUI
String
toString()

doit être redéfini
java.awt.Color

getColor()
retourne la couleur du message
8
Exemple : Election de leader dans un anneau
Algorithme :

Les nœuds sont liés dans une topologie en anneau et sont

chacun affecté un numéro unique.
Chaque nœud envoie son numéro vers

le nœud suivant. Si le nombre est plus grand que ceux déjà reçus par le

nœud ainsi que son numéro, le nœud envoie ce nombre au prochain

noeud dans le graphe.
Sinon, le noeud ne fait rien.
Quand un nœud reçoit

son propre numéro, il est le leader.

La classe MyNodeGUI.java implémentant NodeGUI
9
package test;
import das.engine.gui.MessageGUI;
import das.engine.gui.NodeGUI;
public class MyNodeGUI extends NodeGUI {
//the inner variables that can be displayed
private boolean firsttime = true;
private int localid;
private int curentmax;
private static String varname[] = {"never started", "id", "curent max"};
public TestNodeGui(int localid) {
this.localid = localid;
curentmax = localid;
}
//array with the variable names
@Override
public String[] variableName() {
return varname;
}
//array with the inner variables
@Override
public Object[] variableValue() {
Object tab[] = new Object[3];
tab[0] = firsttime;
tab[1] = localid;
tab[2] = curentmax;
return tab;
}
10
//the algorithm
@Override
public void loopit() {
if (firsttime) {//if first awakening
firsttime = false;
setAntiScrutening(true);//polling mode
sendAll(new TestMessageGui(localid));//id sent on the exit
writeTrace("init");//write a trace to confirm start
} else {
MessageGUI message = receive();//look for awaiting message
if (message != null) {//safe test, should never be false
if (message instanceof TestMessageGui) {//safe test, should never be false
TestMessageGui testmessage = (TestMessageGui) message;
writeTrace("receive " + testmessage.getId());//message written
if (curentmax < testmessage.getId()) {
curentmax = testmessage.getId();
sendAll(message);
writeTrace("I pass");
} else {
if (localid == testmessage.getId()) {
writeTrace("I'm the leader");
} else {//sinon
writeTrace("I don't pass");
}
}
} else {
writeTrace("Message pas la bonne instance!");
}
} else {
writeTrace("Message null!");
}
}
}
//describe the node state
@Override
public String toString(){
return "id local: "+localid + " curent max: " +curentmax;
}
}
La classe MyMessageGUI.java implémentant MessageGUI
11
package test;
import das.engine.gui.MessageGUI;
public class MyMessageGUI extends MessageGUI {
private int id;
public TestMessageGui(int id) {
this.id = id;
}
public int getId() {
return id;
}
@Override
public String toString(){
return "id: "+id;
}
}
Section 4
Organiser des
Simulations
SAD en un coup d'oeil
12
Chargement d'un graphe et la trace
Load ouvre une boîte de dialogue pour choisir le fichier XML produit par

l'analyseur OCAML qui a traité le fichier constitué dans la section 2.
“Save trace” doit être cochée pour enregistrer la trace dans un fichier qui

est sélectionné dans “Trace option”.
Un fichier de trace existant peut être

utilisé car la nouvelle trace sera ajouté à la fin du fichier.
La trace contient des informations sur le graphe courant et est accessible

au développeur des algorithmes.
Manipulation du graphe
Deux modes permettent de réorganiser le graphe.
TransformingMode:

MouseButtonOne+drag pour translater le graphe

MouseButtonOne+Shift+drag pour pivoter le graphe

MouseButtonOne+ctrl(or Command)+drag pour cisailler le graphe
13

Picking Mode:

MouseButtonOne
sur un noeud ou un lien pour le sélectionner

MouseButtonOne+Shift sélection multiple


MouseButtonOne+drag sur un noeud pour déplacer tout les noeud

sélectionnés

MouseButtonOne+drag pour sélectionner des noeuds dans un

rectangle

MouseButtonOne+Shift+drag pour ajouter des noeuds à la

sélection dans un rectangle

Picking Mode + run on selection:

MouseButtonOne sur un noeud pour effectuer un pas
Autorun & gestion manuelle d'une simulation
Step:
E
xécuter une étape sur un nœud en fonction de l'ordonnanceur

aléatoire.
Multiple steps:
Ouvre une boîte de dialogue pour indiquer un nombre

d'étapes à effectuer (selon l'ordonnanceur)
Autorun:
Execute la simulation en fonction de l'ordonnanceur
Autorun option:
Défini le nombre de noeuds lancer par étape et le

lapse de temps entre chque étape.
14
Affichage des données d'un noeud et d'un lien
Les données d'un noeud et d'un lien sont affichées dans des fenêtres

popup accessible par un clic droit sur la zone du graphique. Les nœuds

ou des liens affichées sont ceux choisis dans le
Picking mode
. Les

fenêtres sont rafraîchies en temps réel.
De plus les messages entre noeuds apparaissent sur le lien les reliant.

Celui-ci héritant alors de la couleur du neud messager.
Les couleurs des noeuds sont modifiables par le développeur des

algorithmes.
Exemple d'affichage des données d'un noeud
15
Exemple d'affichage des données d'un lien
Activation/désactivation d'un noeud ou d'un lien
Activation et arrêter les nœuds et les liens se fait via un clic droit sur le

graphique ou la zone de table noeud.
16
A propos du scheduler
Deux champs sont important: alive et antiscrutening.
Si le noeud est mort il ne sera pas choisi par le scheduler.
Le noeud ne doit pas contrôler ce champ.
Si un noeud est en mode antiscrutening, il n'est réveillé que s'il a des

messages en attente.
Seul le noeud doit contrôler ce champ.
Dans chacun des modes, le noeud peut toujours être lancé

manuellement. Ces champs influences seulement le scheduler aléatoire.
17
Section 5
Assistance
Project manager & kernel:
Nicolas Hoffman (
hofmann.moi@gmail.com
)
Graphic designer :
Benjamin Malkas (
benjamin.malkas@gmail.com
)
Ocaml team :
Sébastien Mouchet (
stormtrooper42@hotmail.fr
)
Sébastien Coavoux (
s.coavoux@free.fr
   
)
   
XML team :
Yacine Fall (
yacine2708@hotmail.com
)
Emilien Riot (
emilien.riot@gmail.com
)
18