Exclusion mutuelle dans les systèmes distribués (suite) Complexité en messages de l'algorithme de Lamport : • 3 types de messages sont échangés : - Soit n le nombre de processus dans le réseau. Chaque accès à la ressource R nécessite (n-1) REQ + (n-1) ACK + (n-1) REL = 3(n-1) messages Mesurer le temps d'attente pour obtenir un accès à R Combien de processus entrant avant lui Il peut y avoir n-1 demandes concurrentes à Pi Propriété : Le nombre de demandes satisfaites avant une demande donnée est n-1 Amélioration de l'algorithme de Lamport L'amélioration consiste à diminuer le nombre de messages. L'algorithme de RICART et AGRAWALA présenté en 1981 diminue le nombre de messages Comments ? En éliminant les acquittements et le caractère FIFO des canaux. On utilise deux types de messages REQ et REL Req(P, H) -> Req(P', H') ssi H<H' ou H=H' et P<P' Messages utilisés : REQ(P,H) : P est le demandeur à la date H REL(P,H) : P a libéré la ressource R Variables locales de Pi Vi : Ensemble de tous le voisinage de Pi VDi : ensemble de processus dont la requête est différé par Pi HDi : date de la dernière demande de SC par Pi initialement HDi = 0 Hi : date courante qui représente la date du dernier évenement percu par Pi. Initialement, Hi=0 Di : booleen qui indique si Pi est demandeur de R ou non DSi : booleen qui indique si Pi est en section critique ou non Nreli : nombre d'autorisation attendu Demande de la ressource R par Pi Di <- vrai HDi <- Hi + 1 Hi <- HDi ∀ P j ∈V i Pj!REQ(Pi, Hi) Nreli <- #(Vi) wait(Nreli == 0) DSi <- vrai < SC > (libération de R) Pi est prioritaire si DSi = oui ou (Di et ((HDi < H) ou (HDi = H et Pi < P))) Réception de REQ(P,H) Hi <- max(Hi, H) + 1 Si (DSi ou (Di et ((HDi < H) ou (HDi = H et Pi < P)))) alors VDi <- VDi U {P} sinon fsi P!REL(Pi, Hi) Réception de REL(P,H) Hi <- max(Hi , H) + 1 Nreli <- Nrel – 1 Libération de la ressource R Di <- fax DSi <- faux si (VDi != 0) alors forall P_j in VD_i VDi <- 0 fsi Pj!REL(Pi, Hi) Algorithme de Suzuki et Kasami Algorithme de Lamport : 3(n-1) messages Algorithme de Ricard et Agawala : 2(n-1) messages Algorithme utilisant un jeton H1 : graphe complet H2 : identités toutes distincts H3 : Canaux FIFO ou non H4 : Tout message émis sera recu correctement au bout d'un temps Principe de l'algorithme Soit un système distribué composé de n processus P1, ..., Pn On affecte un jeton à un processus (Election) Un processus qui posssède le jeton peut entrer en SC sans envoyer de messages Un processus qui ne possède pas le jeton il envoie une requête à tous les autres processus, puis attend le jeton. Un processus qui possède le jeton et qui recoit une requête d'un autre processus. Deux cas se présentent : Cas 1 : Il n'est pas demandeur, donc il relache le jeton à ce demandeur. Cas 2 : Il est en SC, la requête sera différé Un processus qui libère la SC il envoie le jeton au prochain demandeur s'il existe, sinon, il le garde Algorithme de Suzuki et Kazami Messages utilisés REQ(P,K) ; Kème demande de la R par P JETON (P,ESC) : Libération du jeton par P où ESC représente un vecteur de compteur où ESC[i] est le nombre de fois que Pi est entré en SC. Variables locales à Pi Vi : ensemble de processus du réseau JPi : booléen possède le jeton Di : vecteur de compteur où Di[j] représente le nombre de fois que Pj demande ESCi : vecteur de compteur où ESC[j] représente le nombre de fois que Pj a utilisé la ressource DSi : Booléen en SC Demande de SC par Pi Di[i] <- Di[i] + 1 si !JPi alors ∀ P j ∈V i Pj!REQ(Pi, Di[i]) fsi attendre(JPi == vrai) Réception de REQ(P,K) Si (Di[P]<K) alors Di[P] <- K Si JPi alors Si (!DSi) alors JPi <- faux P!JETON(Pi, ESCi) fsi fsi fsi Réception du JETON(P, ESC) // ESC[j] représente le nombre de fois que Pj a accédé à R ∀ P j ∈V Di[j] <- max(Di[j], ESC[j]) ∀ P j ∈V ESCi[j] <- max(ESCi[j], ESC[j]) JPi <- vrai Libération de la SC par Pi DSi <- faux ESCi[i] <- ESCi[i] + 1 ¿ ∃ P j∈V i tq Di [ j]ESCi [i] JPi <- faux Pj!JETON(Pi, ESCi) Nb messages échangés : n dans le cas pire