NOM : 1 PRÉNOM : Université de Technologie de Compiègne ✭✭Systèmes et Algorithmes Répartis✮✮ Final de l’UV SR05 — mardi 20 janvier 2004 Durée : 2h Seul le polycopié de cours est autorisé (pas de notes manuscrites, de livres, de TD, etc.). Toutes les réponses doivent être argumentées. La simplicité des algorithmes sera appréciée. Si l’énoncé était imprécis (et seulement dans ce cas-là), faire une hypothèse, l’écrire sur la copie et continuer en l’admettant. - Le barème est donné à titre indicatif. - Répondre directement sur la copie. - Écrire votre nom et prénom sur chacune des feuilles. - Problème 1 : (9,5 points) On considère un système réparti composé de N sites S1 . . . SN , et reliés par des liens de communication full-duplex formant un réseau quelconque. Chaque site connaı̂t le nombre de ses voisins dans le réseau. L’ensemble est modélisé par un graphe orienté symétrique. Question 1-1 : (1,5 point) Écrire un algorithme qui construit une arborescence de diffusion enracinée sur le site S1 en maintenant, sur chaque site, une variable parent qui indique le voisin parent dans l’arborescence. Question 1-2 : (1,5 point) Modifier l’algorithme précédent pour que chaque site connaisse sa hauteur dans l’arborescence. Question 1-3 : (1,5 point) Modifier l’algorithme précédent afin que l’initiateur soit averti après que chaque site ait obtenu sa hauteur. Question 1-4 : (0,5 point) À quelle condition sur les communications dans le réseau la hauteur d’un site Si dans l’arbre est égale à la distance de S1 à Si dans le réseau ? Question 1-5 : (1,5 point) Modifier l’algorithme de la question 1-3 pour que la demi-vague arrête son exploration et remonte vers l’initiateur si l’arbre atteint une hauteur de k, qui est une constante fixée par l’initiateur. Question 1-6 : (1,5 point) Modifier l’algorithme précédent pour que chaque site connaisse le maximum des hauteurs de ses fils (lui compris) dans l’arborescence. Question 1-7 : (1,5 point) Utiliser l’algorithme précédent pour construire un algorithme silencieux qui calcule la distance de chaque site à l’initiateur dans le réseau, et qui prévient l’initiateur quand il est terminé (terminaison explicite). Problème 2 : (10,5 points) On considère un système réparti composé de N sites S1 . . . SN , dans lequel chaque site Si exécute une instance locale Appi de l’application répartie App. Dans le cadre de cette application, les sites se partagent des Université de Technologie de Compiègne. Final SR05 automne 2003. resp. : B. Ducourthial 2 ressources à accès exclusif. L’exclusion mutuelle est gérée par un algorithme de contrôle réparti Ctl, constitué d’une instance Ctli sur chaque site Si . L’algorithme Ctli doit répondre aux requêtes de demande de section critique (DemSC) et de fin de section critique (FinSC) émises par l’algorithme Appi . S’il possède le privilège, alors l’algorithme Ctli répond au message DemSC émis par Appi par un message d’accord (AccSC). Dans le cas contraire, il envoie une demande DemPriv vers chacune des autres instances Ctlj (j 6= i) de l’algorithme de contrôle. L’algorithme Ctli gère deux booléens : Privi (détention du privilège) et SCi (section critique en cours). Le booléen Privi est initialisé via un processus d’élection, qui ne donne le privilège qu’à un seul site : Priv ← élection(). Question 2-1 : (1,5 point) Écrire l’algorithme de contrôle Ctli . Lorsqu’il reçoit un message DemPriv émis par Ctlj , Ctli lui transmet le privilège (avec un message de type DonPriv) s’il le possède et s’il n’y a pas de section critique en cours. Dans le cas contraire, il laisse sans suite la demande de Ctlj . L’algorithme comporte les gardes suivantes : initialisation, réception demande de section critique, réception fin de section critique, réception demande privilège, réception du privilège. Question 2-2 : (1 point) Quel est l’inconvénient d’ignorer les demandes de privilège lorsqu’une section critique est en cours ? Comment y remédier ? Pourquoi utilise-t-on alors les estampilles ? Question 2-3 : (1,5 point) Modifier l’algorithme de la question 2-1 de telle sorte qu’à la fin de la section critique, le privilège soit transmis au demandeur ayant adressé la plus ancienne demande. On notera hi l’horloge entière locale, et demandesi la liste des estampilles des demandes reçues pendant la section critique (et uniquement celles-ci). Question 2-4 : (1,5 point) (a) Avec l’algorithme précédent, pourquoi un site pourrait transmettre le privilège à un site qui l’a demandé et qui a été servi depuis ? (b) Expliquer comment ce problème peut être résolu en utilisant un tableau TabPriv[1..N ] de N estampilles en guise de privilège (au lieu du booléen Priv), et en notant dans TabPriv[j] l’estampille du site Sj au moment où celui-ci donne le privilège (i.e., il envoie TabPriv à l’émetteur de la plus ancienne demande). Question 2-5 : (1,5 point) Lorsque le privilège est sur le site Si , le tableau d’estampilles TabPriv est stocké dans la variable TabPrivi . (a) Pourquoi peut-on utiliser un tableau TabDemi [1..N ] d’entiers pour stocker les estampilles des demandes reçues pendant la section critique au lieu de la liste d’estampilles demandei ? (b) En utilisant TabDemi et TabPrivi , comment le site qui détient le jeton peut équitablement déterminer le demandeur à satisfaire ? (c) Dans quel cas le privilège ne doit pas être transmis ? Question 2-6 : (1,5 point) Donner le code d’une procédure ChoixDem qui prend en argument les tableaux TabDemi et TabPrivi , qui les compare, et qui retourne l’indice du site à qui le privilège doit être transmis (0 si le privilège ne doit pas être transmis) : k ← ChoixDem(TabDemi , TabPrevi ). Question 2-7 : (2 points) Modifier l’algorithme de la question 2-3 en utilisant les tableaux TabDemi et TabPrivi , et la procédure ChoixDem(), afin d’obtenir un algorithme d’exclusion mutuelle. Cet algorithme fonctionne par transmission d’un privilège, mais ne nécessite pas l’établissement d’un anneau de contrôle. Université de Technologie de Compiègne. Final SR05 automne 2003. resp. : B. Ducourthial