Académique Documents
Professionnel Documents
Culture Documents
MIRA-BEJAIA
FACULTE DES SCIENCES EXACTES
DEPARTEMENT INFORMATIQUE
SUPPORT DE COURS
SYSTEMES DISTRIBUES
GESTION DES ACTIVITES PARALLELES
I- INTRODUCTION:
Dans les systèmes distribués, en plus des applications distribuées à développer et à gérer, des
problèmes liés à ces applications sont à prendre en compte dans leur gestion. Pour des activités
qui se déroulent en parallèle ou en distribué deux types de relations existent :
- des relations d’ordre conflictuels (compétition) : lorsquelles partagent des ressources,
- des relations de coopération : lorsquelles participent à un même traitement global.
Les problèmes génériques de conflit ou de coopération existent et leurs solutions relèvent du
domaine de la synchronisation.
Exemples de problèmes génériques: Exclusion mutuelle (EM), Terminaison, Election, Consen-
sus, Calcul d’état global, Parcours de réseau, Interblocage etc.
Demander SC;
Section critique;
Liberer SC;
1
2. Approche centralisé:
Un processus coordonnateur (sur un site fixe) reçoit les requêtes dans une file d’attente de requêtes
en attendant un message de libération, puis il alloue la section critique à la requête en tête de file.
Si le coordonateur tombe en panne un autre coordonateur doit être élue et celui-ci doit reconstruire
la file d’attente des requêtes du précédant. Un algorithme d’élection permet de choisir un site
coordonateur. Si un processus (site) tombe en panne alors les autres ne vont pas être influencés
ni le système. Si un message est perdu (même si on suppose un réseau très fiable) alors on peut
utiliser les mécanismes de détection de défaillance.
3. Approche répartie:
1. Algorithme de distribution de file d’attente:
• les messages sont estampillés pour avoir un ordre total strict
• la file d’attente est présente sur tous les sites.
• un processus Pi veut entrer en section critique il génère une estampille E=hi et envoie une
requête <req, Ei, i> à tous les autres processus y compris lui-même (diffusion)
• Soit Pj un processus qui reçoit la requête de Pi: à la réception d’un message de requête le
processus Pj répond à l’émetteur (Pi) par un accusé de réception <acq, Ej, j> si celui-ci n’est
pas déjà en section critique dans ce cas le processus diffère la réponse donc:
i) soit Pj est déjà en section critique alors il diffère sa réponse à Pi
ii) soit Pj n’est pas en section critique et n’en veut pas alors il répond immédiatement par
un accusé de réception
iii) soit Pj veut entrer en section critique (il a déjà diffusé sa requête ou il va le faire) alors
il compare les estampilles des deux requêtes: si Ei>Ej alors il répond par un accusé de
réception à Pi sinon il diffère sa réponse.
• si Pi reçoit une réponse de tous les autres processus alors il peut entrer en section critique.
Pendant qu’il est en section critique il va enfiler tous les messages reçus et différera sa réponse.
A la sortie de la section critique il répondra à toutes les requêtes qu’il a enfilées.
• donc chaque site gère une file d’attente des messages par site.
L’algorithme suivant est une implémentation possible de l’algorithme de distribution d’une file
d’attente.
2. Algorithme de Lamport: Chaque site i (processus Pi) possède une horloge locale hi et
un tableau de messages (de files d’attente) f donc fi [j] contient les messages émis par le site j (Pj).
Les messages sont de trois types: <req, hi, i>, <acq, hi, i> ou <rel, hi, i>.
Initialement ∀ i∈ {0, 1,... ,n-1}fi [∗]=<rel, 0, i>.
L’algorithme utilise deux fonctions:
miseajour(h, k: entier) Boolean etat(i, j: entier)
debut debut
si h<k alors h=k; si f[i].h<f[j].h ou (f[i].h=f[j].h et i<j)
h=h+1; alors etat=TRUE;
fin sinon etat=FALSE;
fsi;
fin
2
Processus Pi:
A la demande: A la réception:(suivant le message reçu)
debut (req, k, j): debut
diffuser(req, hi, i); miseajour(hi, k);
fi [i]=(req, hi, i); fi [j]=(req, k,j);
hi=hi+1; envoyer(acq, hi, i)à Pj;
tant que(∃j6=i etat(j,i)) attendre; hi=hi+1;
fin ; fin
Section critique; (rel, k,j): debut
debut miseajour(hi,k);
diffuser(rel, hi, i); fi [j]=(rel, k, j);
fi [i]=(rel, hi, i); fin
hi=hi+1; (acq, k, j): debut
fin miseajour(hi,k);
si fi [j]6=req alors fi [j]=(acq, k, j);
fin
Avantages
• l’exclusion mutuelle est garantie.
• nombre de messages nécessaire pour chaque entrée en section critique est: ? et pour chaque
exclusion mutuelle est:?
Inconvénients
• l’identité de tous les processus doit être connu.
• Si un processus rejoint le groupe il doit connaı̂tre les autres et se faire connaı̂tre par les autres.
• Jeton circulant(token ring): soit un seul message appelé jeton ou autant de messages que de
sites et le privilège est appelé trou. Le processus (ou la machine) qui possède le jeton peut
entrer en section critique s’il en a besoin sinon redonner le jeton à son voisin.
4. Algorithme de Lelann: L’algorithme est basé sur le jeton circulant.
Processus Pi:
Attendre(jeton) de Pi-1;
Section critique;
Envoyer(jeton) à Pi+1;
Avantages:
• un jeton unique garantit l’exclusion mutuelle
3
• si l’anneau est unidirectionnel alors pas de famine
Inconvénients:
• le nombre de messages est 1 si tous les processus désirent entrer en section critique et ∞ si
aucun ne veut entrer en section critique.
1.Algorithme de Lamport
Perte du message: La perte de message peut mener à un interblocage. En general la perte de
message conduit à la detection d’une panne d’un site. Pour cela on utilise une horloge de garde.
Le site demandeur de la SC diffuse sa requete et arme son horloge de garde.
Si tous les sites repondent par un ack alors l’horloge est desarmé!
Sinon l’horloge se declenche ce qui indique que le processus n’ayant pas repondu est eventuelle-
ment en panne.
Panne d’un site:
• Si un processus tombe en panne les autres doivent être informés par la diffusion d’un message
<absent,k,i>
• Si un processus est réparé il doit informer les autres en diffusant un message <rentrée,k,i>
les autres répondent par leur requêtes non satisfaites ou un release, et le processus réparé
commence à travailler qu’après avoir reçu une réponse de tous les autres processus.
2.Algorithme de LeLann
• Panne d’un site: Le protocole de transport de l’anneau logique fournit à chaque machine Pi
deux variables d’état: voisin[(gauche, droite),i]∈ {0,1,...,n-1}. Le même protocole assure leur
initialisation: voisin[gauche, i]=i-1MODn et voisin[droite,i]=i+1MODn. Le même protocole
gère les détections de panne d’un site i et la mise à jour des variables:
voisin[droite,voisin[gauche,i]]=voisin[droite,i] et
voisin[gauche,voisin[droite,i]]=voisin[gauche,i]
Le même protocole met à jour les variables d’état lors de la réinsertion du processus réparé.
4
• Perte d’un jeton: On peut utiliser des jetons non valués et un protocole basé sur la définition
d’un processus coordonnateur chargé de regénérer le jeton et si le processus coordonnateur
tombe en panne un algorithme d’élection est utilisé pour designer un nouveau coordonateur.
En général le jeton porte une valeur n comprise entre 0 et k-1 (tel que k représente le nombre
de tours). Chaque site i possède une autre variable d’état état[i]∈{0,1,...,k-1} qu’on met à
jour avant la retransmission du jeton: si i=0 alors n=n+1MODk; état[i]=n; Donc la valeur
du jeton indique le nombre de tours qu’il a effectué. A chaque passage du jeton, Pi arme
une horloge de garde égale au temps estimé pour faire un tour complet de l’anneau. Si elle
se déclenche avant l’arrivée du jeton alors Pi consulte l’état de son voisin de gauche (état[j],
j=voisin[gauche,i]):
alors le jeton est considéré comme perdu. Le site i regénère le jeton en lui donnant la valeur
correcte état[j] et arme son horloge de garde. Le protocole de résistance aux pannes fonctionne
au moins après deux tours du jeton (k ≥ 2).
3.Horloge de garde
Une horloge de garde (clock) est un outil systeme (une strucrure de données) qui permet d’utiliser
l’horloge de la machine pour gerer le temps. Elle est associée à trois primitives:
Horloge H;
- armer(H, val)(arm clock): initialiser l’horloge qui va commencer à decompter à partir de
l’execution de cette primitive.
- declencher(H)(trigger clock): quand le compteur arrive à 0 (delai expiré)un signal d’interruption
est envoyé au processus qui l’a armée. Une routine de traitement d’interruption doit etre prevu par
le programmeur.
- Remise à Zero (Reset): Pour arreter l’horloge avant le declenchement.
Mme YAICI