INF431 Élection sur les arbres Sujet proposé par Gilles Schaeffer Version: 493:570M Nous travaillons avec le même modèle de système distribué que pour la PC “Algorithmes d’élection sur les anneaux”. Nous allons traiter le problème de l’élection sur un réseau asynchrone dont le graphe est un arbre à N nœuds, c’est-à-dire un graphe symétrique, connexe et sans cycle, et dont les noeuds possèdent des identifiants distincts. Le nœud élu sera celui d’identifiant maximal. Avant de procéder à l’élection on étudie la notion de vague de calcul. On se donne pour cela une instruction fictive supplémentaire, qu’on nomme la décision et on dit qu’un algorithme provoque une vague de calcul si les propriétés suivantes sont vérifiées par toute exécution de l’algorithme : – Terminaison. Chaque noeud termine son calcul en temps fini. – Décision. Au moins un noeud effectue une décision. – Dépendance. Toute décision dépend causalement d’au moins un évènement sur chacun des noeuds. La dépendance causale est un préordre sur les instructions effectuées par l’ensemble des noeuds lors d’une exécution donnée : c’est la plus petite relation satisfaisant les 3 conditions suivantes : (i) si e et f sont exécutés sur la même machine, e avant f , alors e < f ; (ii) si s est un évènement SEND et r l’évenement RECEIVE correspondant alors s < r ; (iii) la relation < est transitive. Autrement dit un algorithme provoque une vague de calcul si, dans toute exécution, il amène au moins un noeud à prendre une décision en ayant eu (explicitement ou implicitement) une information de la part de chacun des autres noeuds du graphe. Question 1 Montrer qu’une vague de calcul est nécessaire pour procéder à une élection. (On pourra supposer que la décision est le passage dans l’état won du vainqueur de l’élection, et on ne demande que quelques lignes de justification.) On considère la procédure de la figure 1 dont on veut montrer qu’elle effectue une vague de calcul sur un arbre. On suppose que tous les noeuds sont initialement déclenchés par propagation et exécutent la procédure VAGUE, comme à la question 1 de la PC. Question 2 Montrer que l’exécution de cette procédure sur tous les nœuds d’un arbre conduit à l’exécution d’une vague. En particulier on précisera combien de noeuds ont pris une décision à l’issue de la vague, et quel point du programme atteignent les nœuds qui ne prennent pas de décision ? Question 3 Quelle est la complexité de la vague (en nombre de messages échangés) ? Question 4 Modifier l’algorithme précédent de façon à ce que les nœuds sur lesquels intervient la décision connaissent l’identifiant maximal dans l’arbre. Question 5 Donner un algorithme d’élection dans un arbre : tous les nœuds doivent s’arrêter en temps fini, le nœud d’identifiant maximal dans l’état won, les autres dans l’état lost. Quelle est la complexité en nombre de messages de cette élection ? 1 procédure VAGUE() pour chaque (B ∈ N EIGHBORHOOD()) reveived[B] ← faux — received[B] deviendra vrai si le nœud reçoit un message de B tant que (#{B | received[B] = faux} > 1) B ← WAIT() m ← R ECEIVE(B) received[B] ← vrai pour chaque B0 tel que received[B0 ] = faux — en fait il ne reste qu’un seul tel B0 S END(ok, B0 ) m ← R ECEIVE(B0 ) received[B0 ] ← vrai D ÉCISION() F IG . 1 – La procédure VAGUE 2