Syst`emes et Algorithmes Répartis - UTC

publicité
Systèmes et Algorithmes Répartis
Final de l’UV SR05 — Automne 2013 — jeudi 16 janvier 2014
Durée : 2h. Aucun document autorisé. Le barème est donné à titre indicatif. Toutes les réponses doivent être
argumentées. Le soin apporté à la copie, la clarté et l’orthographe des explications seront appréciés. Les algorithmes fournis doivent impérativement être précédés d’une explication sur leur fonctionnement. Leur simplicité
sera appréciée.
Problème 1 : (15,5 points)
On considère un système réparti non anonyme composé de N sites S1 , . . . , SN reliés par un réseau full-duplex
selon une topologie quelconque mais fixe composée de M arêtes. Le système est asynchrone. Les numéros 1, ..., N
ne sont pas connus des sites eux-mêmes et cette numérotation n’est utilisée que pour l’étude. Les sites ne connaissent
pas non-plus le nombre total de sites N dans le réseau. Par contre, ils connaissent tous leur propre adresse adi .
Deux primitives sont disponibles pour les communications :
– envoyer(adresse destinataire ou ensemble d’adresses ou *, type du message, autres champs)
L’utilisation de * revient à réaliser une diffusion à tous les voisins.
– recevoir(adresse émetteur, type du message, autres champs)
Question 1-1 : (1,5 point)
On suppose qu’une communication (et son traitement applicatif) entre deux voisins nécessite au plus
δ unités de temps. On note ti la date de démarrage du site Si sur l’horloge d’un observateur externe
inconnue des sites. L’algorithme ci-dessous s’exécute dès le démarrage d’un site.
Quelle est la fonction de cet algorithme ? Que peut-on dire de la variable Vi à la date ti + 2δ ? Et à la date
max(t1 , . . . , tN ) + 2δ ?
Algorithme de la question 1-1 pour le site Si
Initialisation :
Vi ← ∅
adi ← adresse du site
Début :
envoyer( *, request )
Réception d’un message :
recevoir( ad, type )
si type == request alors
Vi ← Vi ∪ {ad}
envoyer( adi , ack )
sinon si type == ack
Vi ← Vi ∪ {ad}
fin si
Question 1-2 : (4 points)
On se situe maintenant après la date max(t1 , . . . , tN ) + 2δ. Chaque site Si dispose d’une variable tmpi ,
régulièrement mise à jour via un capteur local de température.
Écrire un algorithme qui permette à S1 de calculer la moyenne des variables tmp du réseau. On utilisera une vague, lancée via une garde Expiration timer calcul. Outre adi , Vi et tmpi , les variables suivantes seront utilisées : adpi (pour adresse du parent), nvai (pour nombre de voisins attendus), somi (pour
somme), nbsi (pour nombre de sites) et moyi (moyenne).
Question 1-3 : (0,5 point)
L’algorithme précédent est-il non uniforme, semi-uniforme ou uniforme ?
Question 1-4 : (2 points)
Pour faciliter le déploiement de l’application, on souhaite maintenant que chaque site puisse déclencher
l’algorithme précédent et obtenir le résultat, évitant ainsi toute initialisation particulière pour le site S1 .
Quelles sont les précautions à prendre quant aux structures de données locales et aux messages ? Modifier
l’algorithme en conséquence.
Question 1-5 : (2 points)
Afin de réduire la complexité en mémoire et en messages de la solution précédente sans avoir à initialiser
un site particulier, on souhaite maintenant que seul le site d’adresse la plus petite termine la vague, les
autres étant abandonnées (extinction de vague). Ce site est appelé élu par la suite.
Expliquer le principe et donner l’algorithme. On utilisera une variable supplémentaire élui .
Question 1-6 : (3 points)
Le site d’adresse la plus petite doit maintenant régulièrement calculer la moyenne des variables tmpi , en
réalisant des vagues successives.
a) Expliquer pourquoi le nombre de messages serait réduit si la vague progressait non pas sur toute la
topologie du réseau mais sur un arbre couvrant uniquement.
b) Exprimer le nombre d’arêtes dans l’arbre couvrant en fonction de N .
c) Exprimer le nombre de messages de la vague par arête de l’arbre et par arête n’appartenant pas à
l’arbre.
d) En déduire le nombre de messages d’une vague classique et le nombre de messages économisés en cas
d’utilisation d’un arbre couvrant.
Question 1-7 : (1 point)
Expliquer pourquoi une vague détermine une arborescence couvrante. Modifier l’algorithme précédent
de manière à ce que chaque site connaisse ses fils dans cette arborescence. On utilisera la variable Fi , qui
contient l’ensemble des adresses des fils de Si dans l’arborescence.
Question 1-8 : (1,5 point)
Compléter l’algorithme précédent de manière à ce que l’algorithme calcule régulièrement la moyenne
des températures (en réarmant le timer). Les vagues successives du site élu utiliseront l’arborescence
couvrante déterminée lors de la première exécution.
Problème 2 : (4,5 points)
On considère l’exécution répartie représentée sur la figure ci-dessous.
Question 2-1 :
Donner deux observations valides du point de vue de la causalité.
Question 2-2 :
Donner les estampilles de chacune des actions. En déduire une unique observation.
Question 2-3 :
Parmi les coupures C1 , C2 , C3 et C4 , dater celles qui sont cohérentes
S1
a1
1
S2
S3
a1
2
a1
3
a2
1
a3
1
a2
2
a4
1
a3
2
a2
3
a3
3
C1
C2
a4
2
a5
2
a4
3
C3
a5
3
C4
Téléchargement