Algorithme auto-stabilisant efficace en m´
emoire pour la construction d’un arbre couvrant de diam`
etre minimum∗
3 Description de l’algorithme
Nous devons calculer l’excentricit´
e de chacun des nœuds du r´
eseau afin de d´
eterminer le ou les centres
du r´
eseau. Le centre du r´
eseau (s’il y en a plusieurs, c’est celui d’identifiant minimum qui sera s´
electionn´
e)
deviendra la racine du MDST. Si chaque nœud calcule simultan´
ement la distance qui le s´
epare de tout
autre nœud, il pourra facilement en d´
eduire son excentricit´
e mais, dans ce cas, l’espace m´
emoire n´
ecessaire
en O(nlogn)bits. L’id´
ee principale de notre algorithme est bas´
e sur la remarque suivante : le calcul de
l’excentricit´
e d’un nœud peut ˆ
etre fait par l’interm´
ediaire d’un BFS enracin´
e`
a ce nœud (l’excentricit´
e du
nœud ´
etant alors la profondeur de ce BFS), calcul d’un BFS pouvant ˆ
etre effectu´
e en utilisant O(logn)bits
de m´
emoire. Il suffit donc de s´
equentialiser les calculs des excentricit´
es afin de maintenir une occupation
m´
emoire de O(logn)bits.
Notre algorithme utilise plusieurs couches, chacune d’elles ex´
ecutant une tˆ
ache sp´
ecifique. Avant de
pr´
esenter plus en d´
etail notre algorithme, en voici un rapide survol. La premi`
ere couche est consacr´
ee `
a la
construction d’un arbre couvrant enracin´
e, appel´
eBackbone. La deuxi`
eme couche maintient la circula-
tion d’un jeton sur le Backbone. La troisi`
eme couche est d´
edi´
ee au calcul des excentricit´
es : un nœud
qui poss`
ede le jeton calcule son excentricit´
e avant de passer le jeton `
a son voisin sur le Backbone, qui
en fait de mˆ
eme et ainsi de suite. La derni`
ere couche est consacr´
ee au calcul du centre : le Backbone
collecte les excentricit´
es des feuilles vers la racine. La racine du Backbone calcule le centre du graphe,
et diffuse l’identifiant de ce centre par l’interm´
ediaire du Backbone. Pour converger vers un MDST, nos
couches doivent avoir diff´
erentes priorit´
es. En effet, la construction du Backbone doit avoir la plus haute
priorit´
e, le reste de notre algorithme ne pouvant pas s’ex´
ecuter correctement si notre Backbone n’est pas
correct. De mˆ
eme, pour la circulation de jeton, notre algorithme doit assurer l’unicit´
e du jeton pour effec-
tuer un calcul correct des excentricit´
es. Enfin, le calcul des excentricit´
es et le calcul du centre du graphe
peuvent ˆ
etre fait de mani`
ere concurrente. Les principales difficult´
es rencontr´
ees pour impl´
ementer cette
approche sont l’utilisation des mˆ
emes variables pour le calcul de l’excentricit´
e de nœuds diff´
erents et l’or-
ganisation des diff´
erentes couches afin qu’elles fonctionnent avec un d´
emon totalement asynchrone. Nous
allons maintenant d´
etailler les diff´
erentes couches, pour la premi`
ere et la deuxi`
eme couche nous utilisons
des r´
esultats existants, le cœur de notre travail est donc l’organisation entre ces couches et l’algorithme des
deux derni`
eres couches.
La premi`
ere couche est consacr´
ee `
a la construction d’un arbre couvrant enracin´
e.`
A notre connaissance,
seul l’algorithme de construction d’arbre couvrant enracin´
e propos´
e par [DLV11] correspond `
a nos crit`
eres,
`
a savoir, un d´
emon distribu´
e non ´
equitable, O(logn)bits de m´
emoire par nœud et une convergence en O(n)
rondes. Cet algorithme construit un arbre BFS appel´
eBackboneenracin´
e au nœud d’identit´
e minimum.
La deuxi`
eme couche est la circulation de jeton sur le Backbone. Nous avons adapt´
e l’algorithme de
Petit et Villain [PV99]. Le but de la circulation de jeton est de synchroniser le multiplexage temporel des
variables de la troisi`
eme couche de notre algorithme qui calcule l’excentricit´
e de chaque nœud. En effet,
afin de r´
eduire l’espace m´
emoire de notre algorithme `
aO(logn)bits par nœud, tous les nœuds calculent
leurs excentricit´
es en utilisant les mˆ
emes variables, mais de fac¸on s´
equentielle. Pour ´
eviter les conflits, nous
g´
erons l’acc`
es en exclusion mutuelle `
a ces varaibles par la circulation de jeton.
La composition entre la couche de construction du Backbone et la couche de circulation du jeton de
notre algorithme doit r´
esister `
a la non ´
equit´
e du d´
emon. En effet, nous devons nous assurer que le d´
emon
ne peut pas choisir exclusivement les nœuds qui souhaitent ex´
ecuter la circulation de jeton (rappelons que
nous supposons que la construction du Backbone a la priorit´
e sur la circulation de jeton) car cela pourrait
empˆ
echer le Backbone d’ˆ
etre construit. Pour faire face `
a cette question, nous avons choisi de bloquer la
circulation du jeton au nœud vsi va d´
etect´
e une incoh´
erence dans le Backbone (cycle ou non connexit´
e
de l’arbre).
La troisi`
eme couche de notre algorithme est d´
edi´
ee au calcul des excentricit´
es. Nous diff´
erencions la
circulation du jeton en descente et en mont´
ee. Quand un nœud vrec¸oit le jeton en descente, il commence
une construction auto-stabilisante d’un arbre BFS enracin´
e sur lui-mˆ
eme. Quand la construction du BFS
de vest accomplie, la profondeur maximale du BFS est calcul´
ee des feuilles vers v. Cette profondeur
maximal donne l’excentricit´
e de v. Une fois que le nœud va recueilli son excentricit´
e, il lib`
ere le jeton pour
le nœud suivant dans le Backbone. L’algorithme de cette troisi`
eme couche est une contribution en soi