Vous êtes sur la page 1sur 6

Université constantine2, Faculté NTIC 2020/2021

Master 1 GL – module SD

Travaux Dirigés N° 2 : Introduction à l’exclusion mutuelle distribuée

Exercice 1 (gestion centralisée de la ressource critique)


Dans cet exercice, nous étudions un algorithme centralisé de gestion de la ressource critique
partagée entre les sites d’un système distribué. Un processus (site) coordinateur est chargé de
gérer les requêtes d’accès à la ressource critique venant des autres sites.
Lorsqu’ un site a besoin d’utiliser la ressource critique, il envoie un message de type demande
au coordinateur. Si la ressource est encours d’utilisation, le site demandeur (son identifiant) est
placé dans une file FIFO locale au coordinateur. Par contre, si la ressource est libre, le
coordinateur envoie au site demandeur un message de type autorisation.
Quand un site termine l’utilisation de la ressource critique, il envoie un message de libération
au coordinateur. En recevant un message de type libération, le coordinateur retire le premier
site de sa file FIFO, et lui envoie un message d’autorisation.
1. Décrire sous forme d’un algorithme, les actions exécutées par le coordinateur et les
sites demandeurs.
2. Tracer un schéma qui décrit l’exécution de cet algorithme. On suppose que le système
est composé des sites S1, S2 et du coordinateur, et que la demande de S2 soit reçue
lorsque S1 est en section critique.
3. Quelle la complexité en nombre de messages de l’algorithme étudié (le nombre de
messages nécessaires pour une utilisation de la ressource par un site).
4. citez les avantages et les inconvénients de l’algorithme étudié.

Exercice 2 (algorithme de Lamport) :


Lamport a proposé un algorithme d’exclusion mutuelle distribuée équitable, les requêtes
d’accès à la ressource critique sont exécutées selon un ordre total établi entre les messages de
requêtes (les horloges logiques sont utilisées pour ordonner les requêtes).
Lorsqu’un site i demande la ressource critique : il incrémente son horloge locale Hi, il envoie le
message requête(hi, i) de demande de la ressource critique à tous les autres sites et ajoute ce
message à sa file requete_filei.

1
Quand un site i reçoit un message requête(hj, j) venant du site j : il incrémente son horloge
(hi := max(hi, hj)+1), il ajoute le message reçu dans sa file requete_filei et envoie un message
d’acquittement (ACK) daté.
Un site demandeur i accède à la section critique si et seulement si : sa requête est entête de de
sa file requete_file i et il a reçu des messages d’acquittement de tous les autres sites.
Lorsqu’un un site i quitte la section critique, il enlève son message de requête de sa file et
envoie un message daté de libération de la section critique.
Quand un site j reçoit un message de libération de la section critique venant du site i, il enlève
le message requête(hi, i) de sa file requete_filej.
Remarque : l’algorithme de Lamport est correct si et seulement si les lignes de communication
sont fiables et FIFO.
Questions :
1. Donnez les variables locales d’un site i.
2. Ecrire les actions réalisées lors de : envoi des requêtes d’accès à la SC, libération de la
SC, réception des messages de requête, réception d’acquittement et réception des
messages de libération.

2
Corrigé type TD n° 02
Exercice 01

1.

Variables locales :

L : liste FIFO de processus (de noms de processus) initialisée à liste_vide ;

ScLib : booléen initialisée à faux (initialement la ressource critique est libre) ;

Actions exécutées par le coordinateur :

Répéter

recevoir( message , Si ) ; ( le coordinateur reçoit un message envoyé par le site Si)

si (message == demande) alors

si ( ScLib == faux ) alors

envoyer(autorisation, Si) ; (le coordinateur envoie une autorisation au site Si)

ScLib := vrai ;

sinon

ajouter(Si, L) ; ( ajouter l’identifiant du site demandeur en fin de la liste L)

fin si ;

fin si ;

si (message == libération) alors

si (L =/= liste_vide) alors

envoyer(autorisation, premier(L)) ;

retirer premier(L) de la liste L ;

sinon

ScLib := faux ;

finsi

fin si ;

Jusqu’à (arrêt du système)

3
Actions exécutées par un site demandeur SI :

Répéter

…..

envoyer(demande, coordinateur) ;

recevoir(autorisation, coordinateur) ;

section-critique ; (utilisation de la ressource critique)

envoyer(libération, coordinateur) ;

…..

Jusqu’à (arrêt du système)

2.

S1

L :liste_vide L :liste_vide
L :{S2}
ScLib : vrai ScLib : faux
ScLib : vrai
C
L :liste_vide
L:liste_vide ScLib : vrai
ScLib: faux

S2

message de demande
message d’autorisation
message de libération
le site est en section critique

4
3. Le nombre de messages nécessaires pour une utilisation de la ressource par un site est 3
(1message requête, 1 message d’autorisation et 1 message de libération).
4.
Avantages de l’algorithme étudié :
Faible complexité en messages, fonctionnement simple.
Inconvénients de l’algorithme étudié :
Surcharge du site coordinateur, la panne du coordinateur conduit à l’échec du système.

Exercice 2

1. variables locales d’un site i :

hi : horloge du site i ; (initialisé à 0)

étati : {dehors, demandeur, dedans} ; (initialisée à dehors)

requête-filei : file d’attente de requêtes (triée selon l’horloge logique) ; (initialisée à file_vide)

Ri : ensemble de sites ; (Ri = {1…n}-{i})

attendusi : ensemble de sites, de qui i attend des acquittements ; (initialisé Ri)

2. Actions réalisées par le site i :


Actions réalisées lors d’un appel à acquérir (lors de l’envoi des requêtes d’accès à la SC) :
hi :=hi+1 ;
étati := demandeur ;
ajouter requête(hi, i) à file-requêtei ;
attendusi := Ri ;
∀ j ∈ Ri envoyer requête(hi, i) à j ;
Attendre (attendusi = {} et requête(hi, i) est en tête de requête-filei );
étati := dedans.

Actions réalisées lors d’un appel à libérer (libération de la SC):


hi :=hi+1 ;
étati := dehors ;
∀ j ∈ Ri envoyer libérer(hi, i) à j ;
Enlever la requête de i de requête-filei ;

Actions réalisées lors de la réception d’un message requête(hj,j) venant de j :


hi := max(hi, hj)+1 ;
insérer requete(hj,j) dans requête-filei ;
envoyer ack(hi, i) à j ;

5
Actions réalisées lors de la réception d’un message ack(hj, j) venant de j :
hi := max(hi, hj)+1 ;
attendusi := attendusi –{j} ;

Actions réalisées lors de la réception d’un message libérer(hj, j) venant de j :


hi := max(hi, hj)+1 ;
retirer requête de j de requête-filei

Vous aimerez peut-être aussi