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