Vous êtes sur la page 1sur 22

Algorithme de Ricart et Agrawala

Objectif
• Algorithme proposé dans le but de diminuer le
nombre de messages par rapport à l'algorithme de
Lamport
Changements
• Regrouper information de sortie de SC et accord
• Pas de retour systématique de ACK
• N'informer que les processus en attente à la sortie
de SC
Algorithme de Ricart et Agrawala
Principe de l'algorithme
• Lorsqu'un processus Pi demande la Section Critique, il
diffuse une requête datée à tous les autres processus.
• Lorsqu'un processus Pi reçoit une requête de demande
d'entrée en Section Critique de Pj, deux cas sont
possibles :
• Cas 1 : si le processus Pi n'est pas demandeur de la Section
Critique, il envoie un accord à Pj.
• Cas 2 : si le processus Pi est demandeur de la Section Critique
et si la date de demande de P j est plus récente que la sienne,
alors la requête de Pj est différée, sinon un message d'accord
est envoyé à Pj.
• Lorsqu'un processus Pi sort de la Section Critique, il
diffuse à tous les processus dont les requêtes sont
différées, un message de libération.
Algorithme de Ricart et Agrawala
Variables utilisées par chaque processus Pi :
• Hi : entier, estampille locale. Initialement Hi = 0
• H_di : entier, estampille de demande de SC.
Initialement H_di = 0
• Di : booléen, le processus est demandeur de SC. Init à
Di = FAUX
• differei[j] : processus dont l'accord est différé.
• rep_attenduesi : entier, nombre d'accords attendus. Init
à rep_attenduesi = 0.
• Vi : voisinage de i
Messages utilisés :
• Accès : demande d'entrée en SC
• OK: message de permission
Algorithme de Ricart et Agrawala
• Procédure d’acquisition
hi ← hi + 1 ;
Di ← vrai ;h_di ← hi;
rep_attenduesi ← n − 1 ;
pour tout (j ∈ V \{i}) faire
envoyer <Accès,h_di> à j
Algorithme de Ricart et Agrawala
Réception de <Accès,h> venant de j→
1. hi = max(hi, h) + 1 ;
2. si (non Di) ou (h_di, i) > (h, j) alors envoyer <ok> à j
3. sinon differei[j] ← vrai ;
Algorithme de Ricart et Agrawala
• Réception de <ok> venant de j→
1. hi = max(hi, h) + 1 ;
2. rep_attenduesi ← rep_attenduesi − 1 ;
3. si (rep_attenduesi = 0) alors ACCEDER A LA
RESSOURCE
Algorithme de Ricart et Agrawala
• Procédure Libération
Di ← faux ; hi ← hi + 1 ;
pour tout j ∈ V \{i} faire
Si differei[j] = vrai
envoyer <ok> à j ;
differei[j] ← faux ;
Algorithme de Ricart et Agrawala
Déroulement avec 3 processus : P0, P1, P2
1. Le processus P1 demandent l'accès à la Section
Critique, jusqu'à sa sortie de SC
2. Le processus P2 demande l'accès à la Section
Critique, une fois qu'il est entré, P1 demande,
jusqu'à la sortie des deux.
3. P0 demande la SC en même temps que P2,
lorsque l'un des deux processus est en SC, P1
demande, jusqu'à la sortie des trois.
Algorithme de Ricart et Agrawala
Preuve
• Par contradiction
• On suppose que Pi et Pj sont les deux en section critique.
• On peut supposer sans perte de généralité que la requête de Pi a
une horloge plus petite que celle de Pj
• Puisque l'horloge de Pi est plus petite que celle de Pj cela signifie
qu'il a reçu la requête de Pj après avoir fait sa demande
• D'après l'algorithme Pj ne peut entrer en section critique que si Pi
lui a envoyé un message OK
• Puisque Pi est en section critique alors il a envoyé ce message OK
avant d'entrer en section critique
• Ce qui est impossible puisque l'horloge de Pj est supérieure à
celle de Pi, or d'après l'algorithme Pi n'envoie OK que si l'horloge
reçue est plus petite
Algorithme de Ricart et Agrawala
• Complexité
Une utilisation de la Section Critique nécessite 2 ∗
(N − 1) messages :
• N − 1 Requêtes
• N − 1 Permissions
Algorithme de Carvalho et Roucairol
Principe de l'algorithme
• Soit le cas où Pi demande l'accès à la Section Critique
plusieurs fois de suite (état demandeur plusieurs fois de
suite) alors que Pj n'est pas intéressé par celle-ci (état
dehors)
• Avec l'algorithme de Ricart et Agrawala, Pi demande la
permission de Pj à chaque nouvelle demande d'accès à
la Section Critique
• Avec l'algorithme de Carvalho et Roucairol, puisque Pj a
donné sa permission à Pi, ce dernier la considère
comme acquise jusqu'à ce que Pj demande sa
permission à Pi : Pi ne demande qu'une fois la
permission à Pj
Synchronisation distribuée
utilisant un jeton
Synchronisation distribuée utilisant
un jeton
Principe général
• Un jeton unique circule entre tous les processus
• Le processus qui a le jeton est le seul qui peut accéder à
la section critique
• Respect des propriétés
• Sûreté : grâce au jeton unique
• Vivacité : l'algorithme doit assurer que le jeton circule bien
entre tous les processus voulant accéder à la ressource
• Différentes structures de communication :
• Anneau : Le Lann
• Diffusion : Suzuki-Kazami
• Arbre : Naimi-Trehel
Algorithme de [Le Lann, 77]
• Un jeton unique circule en permanence entre les
processus via une topologie en anneau
• Quand un processus reçoit le jeton
• S'il est dans l'état demandeur : il passe dans l'état dedans et
accède à la ressource
• S'il est dans l'état dehors, il passe le jeton à son voisin
• Quand le processus quitte l'état dedans, il passe le
jeton à son voisin
• Respect des propriétés
• Sûreté : via le jeton unique qui autorise l'accès à la ressource
• Vivacité : si un processus lâche le jeton (la ressource) en un
temps fini et que tous les processus appartiennent à l'anneau
Algorithme de Le Lann
Exercice
• Quelles sont les données nécessaires ?
• Quels sont les messages échangés ?
• Quelles règles doivent être mises en place ?
• Écrire les règles
Algorithme de Le Lann
Avantages
• Très simple à mettre en œuvre
• Intéressant si nombreux processus demandeurs de la ressource
• Jeton arrivera rapidement à un processus demandeur
• Équitable en terme de nombre d'accès et de temps d'attente
• Aucun processus n'est privilégié
Inconvénients
• Nécessite des échanges de messages (pour faire circuler le jeton)
même si aucun site ne veut accéder à la ressource
• Temps d'accès à la ressource peut être potentiellement
relativement long
• Si le processus i+1 a le jeton et que le processus i veut accéder à la
ressource et est le seul à vouloir y accéder, il faut quand même
attendre que le jeton fasse tout le tour de l'anneau
Modification de l'algorithme avec anneau
• Jeton symbolise le droit d'entrée en section critique
• Un seul processus détient le jeton à un moment
donné
• Pas forcément besoin de la structure d'anneau
Exercice
• Ecrire un algorithme où les participants échangent
un jeton pour accéder à la section critique.
• Définir les données, les messages et les règles.
• Quelles propriétés possède cet algorithme : sûreté,
vivacité, équité ?
Algorithme de Suzuki-Kasami
Principe de l'algorithme
• Chaque processus connaît l'ensemble des participants
• Quand Pi veut accéder à la Section critique, il envoie un
message Demande à tous les participants
• Le jeton contient l'estampille de la dernière visite qu'il a
effectué à chacun des processus
• Quand Pi sort de Section Critique, il cherche le premier
processus Pj tel que l'estampille de la dernière requête
de Pj soit supérieure à celle mémorisée dans le jeton
(correspondant à la dernière visite du jeton à Pj)
Procédure d’acquisition
etati ← demande ;
Si (jeton_presenti = faux ) alors
req[i] ← req[i] + 1 ; diffuser <Demande,i,req[i]>
Sinon
etati ← dedans ; ACCEDER A LA RESSOURCE
• Lors de la réception du message <Demande,j,num>
de j
req[j] ← max(req[j],num])
Si (jeton_presenti = vrai et etati != demande )
alors
Si req[j] = last[j] + 1, alors envoyer < Jeton,last,Q\j >
àj;
jeton_presenti = faux
Réception de <Jeton, last,Q> venant de j →
jeton_presenti = vrai ;
etati ← dedans ; ACCEDER A LA RESSOURCE
Procédure Libération
etati ← sor ; last[i] ← reqi[i] ;
∀k != i :!= (k ∉ Q) ∧ req[k] = last[k] + 1 → ajouter k à
Q;
Si Q != ∅ alors envoyer < Jeton,last,Q\j > au 1er site j
de Q

Vous aimerez peut-être aussi