Systèmes et Algorithmes Répartis Final de l’UV SR05 — Automne 2014 — vendredi 16 janvier 2015 Durée : 2h00. Aucun document autorisé. Le barème est donné à titre indicatif. Toutes les réponses doivent être argumentées. Les algorithmes fournis doivent impérativement être précédés d’une explication sur leur fonctionnement. Leur simplicité sera appréciée. Le soin apporté à la copie, la clarté et l’orthographe des explications seront pris en compte. Problème 1 : (15 points) On considère un système réparti S composé de N sites S1 , . . . , SN reliés par un réseau de topologie quelconque mais fixe. Une fonction de routage (non détaillée ici) permet d’adresser un message depuis tout site Si vers tout autre site Sj dans le réseau. Ce système S est le support d’une application répartie A composée d’une instance Ai par site Si . Certaines instances sont actives dès le départ. Lorsqu’une instance locale Ai est active, elle peut envoyer des messages à d’autres instances Aj , ce qui les rend actives (si elles ne l’étaient pas déjà). Une instance passive ne peut devenir active spontanément (sans réception de message). Par contre une instance active peut devenir spontanément passive (fin des traitements locaux). Pour détecter la terminaison de l’application répartie A, un protocole de contrôle P est inséré entre l’application et le réseau. Sur chaque site Si , l’instance locale Pi de P est en mesure de déterminer si Ai est active et d’intercepter les messages émis ou reçus par Ai . Question 1-1 : (1 point) Expliquer pourquoi le système S induit un anneau logique permettant de parcourir tous les sites successivement. Question 1-2 : (2 points) Proposer un algorithme utilisant cet anneau et des messages ne contenant qu’un entier pour élire un site parmi ceux qui sont actifs. On complétera l’algorithme suivant. La fonction is active() retourne vrai si l’instance locale de l’application Ai est active, faux sinon. Algorithme 1 : Pi Initialisation : Élui ← +∞ Actifi ← is active() Ai devient passif : Actifi ← faux Élui == +∞ et Actifi == vrai : .. . Réception d’un message de type “élection” : .. . Question 1-3 : (2 points) Compléter l’algorithme précédent afin que chaque instance Pi du protocole de contrôle gère un tableau Vi tel que Vi [k] représente le nombre de messages émis par Ai vers Ak et Vi [i] représente l’opposé du nombre de messages reçus par Ai . Attention, le protocole P doit maintenant réaliser une tâche dynamique. On ajoutera les gardes suivantes à l’algorithme de Pi : Réception d’un message de Ai pour Aj : .. . Réception d’un message de Pj pour Pi de type “appli” : .. . Question 1-4 : (2 points) Compléter l’algorithme précédent en ajoutant un message de type “jeton”, qui part du site élu lorsqu’il est passif et progresse sur l’anneau en étant retransmis par les sites passifs. Ce jeton contient un tableau de N cases ; à chaque fois que le jeton quitte un site Si , il collecte dans son tableau le contenu du tableau Vi , qui est ensuite réinitialisé. Question 1-5 : (2 points) Compléter l’algorithme précédent avec une détection de terminaison. Attention, le protocole P doit maintenant réaliser une tâche statique. Question 1-6 : (2 points) Montrer que lorsque l’application répartie est terminée, le jeton revient avec un tableau nul sur un site qui l’avait déjà retransmis. Question 1-7 : (2 points) Montrer que lorsque le jeton avec un tableau nul sur un site qu’il avait déjà visité, alors l’application répartie est terminée. Question 1-8 : (2 points) Compléter le schéma de la figure ci-dessous afin de rendre compte de l’exécution de l’algorithme de détection de terminaison. On donnera en particulier les valeurs successives des tableaux dans le jeton et sur les sites. Consignes : Le jeton est émis au plus tôt, à date entière. Le site élu est S1 , qui émet le jeton la première fois à la date 3. Le jeton met toujours une unité de temps pour atteindre le site suivant sur l’anneau. Répondre directement sur le sujet. Par précaution, écrire votre nom ici : S1 S2 S3 S4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 activité de l’app. de base message de l’app. de base Problème 2 : Sauvegarde (5 points) On désire ajouter une fonctionnalité de sauvegarde au sein d’une application répartie s’exécutant sur un réseau fixe connexe FIFO. Répondre directement sur le sujet. Par précaution, écrire votre nom ici : Question 2-1 : (0,5 point) Expliquer pourquoi la sauvegarde répartie nécessite un algorithme d’instantané. Question 2-2 : (1,5 point) Compléter l’algorithme suivant pour réaliser un instantané réparti (snapshot). Algorithme 2 : snapshot, site Si Initialisation : sauvegardei ← ∅ Début de l’instantané (sur un seul site) : Réception d’un message de type marqueur : Question 2-3 : (0,5 point) Pourquoi l’algorithme précédent nécessite un réseau FIFO ? Question 2-4 : (0,5 point) On désire dater les sauvegardes. Pour cela, une horloge logique est utilisée pour dater les actions du système. Quel type d’horloge utiliser ? Question 2-5 : (1 point) Préciser la relation d’ordre induite par l’horloge sur l’ensemble des actions du système. Est-ce une relation d’ordre partielle ou totale ? Question 2-6 : (1 point) Comment dater une sauvegarde répartie à partir des dates des sauvegardes locales ?