





Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
un système distribué est une collection de processus qui échanges des messages
Typology: Exercises
1 / 9
This page cannot be seen from the preview
Don't miss anything!






Concevoir, implémenter et analyser différents protocoles ou algorithmes distribués basés sur le principe de passage de messages entre processus.
Les algorithmes distribués se différentient par :
Le problème à résoudre :
Un système distribué est caractérisé par :
Un système distribué est une collection de processus qui échangent des messages via un système de communication.
Le système de communication (S.C.) est constitué de connexions de logiciels. Le comportement des connexions peut être celui de la discipline FIFO (First In First Out).
Le S.C. et le S.D. sont modélisés par un graphe :
La meilleure : un graphe complet G(V, E). Il en existe d’autres :
Soit un système distribué ; l’objectif est d’élire un site particulier pour s’occuper d’une fonction donnée. Ceci permet d’utiliser par exemple le paradigme client/serveur.
L’élection permet de désigner un serveur. Les messages clients vers le serveur représentent alors des requêtes de service ; des réponses peuvent le cas échéant être envoyées au client.
Message utilisé
ELECTION : Message envoyé de i vers j conenant un identifiant coordinateur
ELU : Message de fin, indiquant le résultat de l’élection
Code des algorithmes
Lors de la réception de INIT par un initiateur Faire participe <- Vrai envoyer à son voisin de gauche ELECTION(id_i) Fin
Lors de la réception du message ELECTION(id) par si depuis sj Faire Si (id > id_i) Alors participe <- Vrai envoyer au suivant ELECTION(id) Sinon Si (id < id_i) Et (participant = Faux) Alors participant <- Vrai envoyer à son voisin ELECTION(id_i) Sinon Si (id = id_i) Alors id_c <- id_i envoyer à son voisin ELU(id_c) Finsi Fin
Lors de la réception de ELU(id) Faire id_c <- id participe <- Faux Si (id != id_i) Alors envoyer à son voisin ELU(id) Finsi Fin
Hypothèses
L’anneau est maintenant bidirectionnel ; chaque site ignore le nombre total de sites présents, et les sites sont désignés d’une manière quelconque sur l’anneau.
Nous définirons des primitives adaptées à la communication sur un anneau bidirectionnel :
Principe
L’algorithme procède par élections primaires de proche en proche sur des distances croissantes suivant des puissances de 2.
Un site battu se contente de faire suivre les messages d’un coté vers l’autre.
Variables propres à chaque site
Messages utilisés
Code de l’algorithme
Lors de la réception de INIT par s_i Faire etat <- CANDIDAT lgmax <- 1 Tant que (etat = CANDIDAT) Faire nbrep <- 0
Lors de la réception de Termine(id) Faire Si (vainqueur != id) Alors faireSuivre TERMINE(id) vainqueur <- id etat <- NONCONCERNE Finsi Fin
Nous allons dorénavant nous intéresser à un algorithme d’exclusion mutuelle sur un anneau avec regénération de jeton (MISTRA ?).
La mise en oeuvre de l’exclusion mutuelle consiste à définir un mécanisme d’arbitrage.
Quelques exemples d’application : Sur le protocole Token-Ring, avoir le jeton est synonyme d’avoir le privilège d’utiliser le média de communication. On utilise aussi des jetons lors d’accès à des ressources critiques, comme un disque dur ou une base de données.
Le jeton est matérialisé par un message spécial qui donne le privilège d’accès à celui qui le détient.
Toutefois, des problèmes importants peuvent se poser :
La solution consiste à regénérer un jeton. Bien entendu, il faut éviter de regénérer plusieurs jetons (c’est le cas avec des algorithmes distribués qui utilisent le principe de la loi de garde).
Hypothèses
Le système de communication est en anneau. Il y a des possibilités de pannes et d’alteration de messages, mais pas de reprise sur panne.
Principes
Le principe de la solution consiste à utiliser 2 jetons, ping et pong. A chacun des deux jetons est associé une valeur, nbPing et nbPong. Ces deux valeurs sont liées par l’invariant nbP ing + nbP ong = 0, avec initialement nbP ing = 1 et nbP ong = − 1. Ces deux valeurs comptent le nombre de rencontres des deux jetons.
Variables locales
Message utilisé
JETON(J, nbJ), J étant ping ou pong.
Code des algorithmes
Lors de la réception du message JETON(PING, nbPing) Faire Si (m_i = nbPing) Alors nbPing <- nbPing + 1 nbPong <- - nbPing Sinon m_i <- nbPing Finsi faireSuivre le message au voisin Fin
Lors de la réception du message JETON(PONG, nbPong) Faire Si (m_i = nbPong) Alors nbPong <- nbPong - 1 nbPing <- - nbPong Sinon m_i <- nbPong Finsi Fin
Lors de la rencontre des 2 jetons Faire nbPing <- nbPing + 1 nbPong <- nbPong - 1 Fin