Exclusion mutuelle dans les systèmes distribués (suite) Complexité

publicité
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
Téléchargement