INF431

publicité
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
Téléchargement