Anneau bidirectionnel
L’algorithme de Hirschberg-Sinclair (HS)
L’algorithme de Hirschberg-Sinclair (HS) est un algorithme d’élection de leader dans un anneau
bidirectionnel. Comme pour l’algorithme LCR, chaque processus possède un identifiant unique et le
processus avec le plus grand UIN se proclame leader. Contrairement à LCR, les communications
sont bidirectionnelles. C’est à dire qu’un processus Pi de l’anneau peut communiquer avec ses
voisins Pi+1 et Pi−1 . De plus, un processus n’envoie pas son identifiant à travers tous les processus de
l’anneau. Il l’envoie de telle sorte que l’UIN parcourt seulement quelques processus voisins dans
une direction, fait demi-tour, et retourne à son point de départ. Il recommence en augmentant la
distance parcourue à chaque fois.
On donne maintenant une description informelle de l’algorithme :
Chaque processus fonctionne en phases identifiées par une variable l = 0, 1, 2.... Lors de la phase 1,
chaque Pi envoie son UIN ui dans les deux directions. Les ui doivent parcourir une distance 2l et
revenir à leur origine. Si les deux identifiants ui reviennent à Pi , le processus Pi passe à la phase
suivante. Toutefois, les deux identifiants ne reviennent pas forcément jusqu’à Pi :
•Lorsqu’un identifiant ui se déplace en s’éloignant de Pi, chaque processus Pj parcouru
compare ui à son propre identifiant uj . Si ui < uj , alors Pj supprime le message. Si ui > uj ,
alors Pj retransmet le message. Si ui = uj , cela signifie que ui a parcouru tout l’anneau sans
faire demi-tour et qu’il est le plus grand identifiant, donc Pi se proclame leader.
•Lorsqu’un identifiant ui se déplace en retournant vers Pi , les processus parcourus se
contentent de le retransmettre.
1. Téléchargez le fichier hs.tar qui contient un squelette du projet à compléter. En particulier :
•Il définit le modele de connectivité projects.ast.models.connectivityModels.BiRing qui
permet de générer les liens de communication correspondant à une topologie en anneau
directionnel.
•Il définit le type HSMessage et le modèle de connectivité BiRing.
On rappelle la commande pour exécuter le projet :
./sinalgo –project hs -gen 10 hs:Node Circle hs :BiRing
2. Donnez le pseudo-code de cet algorithme dans le langage utilisé en cours.
3. Implantez l’algorithme. Indication : les messages transmis contiendront les valeurs UIN, dir,
hopcount, et sender, l’adresse du processus émetteur. UIN est un identifiant, dir ∈ {out, in}
indique la direction du message (éloignement ou retour par rapport à l’émetteur), et
hopcount compte le nombre de processus restant à parcourir.
4. Montrez que le nombre total de message envoyé lors d’une execution de l’algorithme est
O(n.log(n)).
[Facultatif] Modèle de connectivité ConnectedGraph
Plutôt que de tracer des graphes à la main, il est possible de les générer automatiquement en
programmant un nouveau modele de connectivité. En vous inspirant des modèles BiRing et
UniRing, définissez une classe ConnectedGraph qui génère un graphe aléatoire bidirectionnel et
connecté.