Vous êtes sur la page 1sur 5

UNIVERSITE A.

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.

II- EXCLUSION MUTUELLE:


1. Rappel
Section critique : Une séquence d’instructions manipulant des données partagées par plusieurs
processus est appelée section critique car l’entrelacement des exécutions de ces instructions par
différent processus peut conduire à des incohérences. La solution est que l’utilisation de cette
section critique par un processus doit exclure toues les autres processus: exclusion mutuelle.
L’exclusion mutuelle est garantie si les 4 conditions suivantes sont vérifiées simultanément :
i) Exclusion : un seul processus en SC à la fois
ii) Pas de blocage : si la SC est libre un processus en attente doit pouvoir y accéder (déroulement)
iii) Attente limitée : un processus en attente d’une SC doit pouvoir y accéder au bout d’un
temps fini
iv) Equité : la solution est la même pour tous (pas de privilège).
Pour un environnement centralisé les solutions du problème d’EM sont de deux types: par
attente active, ou par attente passive et dans ce cas elles utilisent les verrous, les sémaphores, les
moniteurs etc.
Pour un evironnement distribué, on suppose n processus sur n sites (processeurs) reliés par
un réseau d’interconnexion, ayant une même section critique (exemple lire ou écrire des variables
partagés) donc un seul site privilgié peut entrer en section critique. Le problème est résolu en
matérialisant le privilège. Ce privilège doit passer de site en site pour garantir: l’accès, l’équité et
l’absence de famine. Les solutions sont de deux types: solutions centralisées ou décentralisées. Il
existe aussi des semaphores distribués. La syntaxe de la solution pour le processus demandeur sera
comme suit:

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.

• pas d’interblocage (ordre total strict)

• pas de famine (FIFO)

• 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.

• L’algorithme est utilisé pour un ensemble (petit) stable de processus


3. Circulation du privilège: Les algorithmes sont basés sur la topologie de l’anneau et le
privilège est matérialisé soit par des variables d’états, soit par un seul message, soit par plusieurs
messages.
• Variables d’états: chaque site possède un état qui est une variable (entière) locale et sur
l’ensemble des sites il existe deux valeurs d’état distinctes seulement.

• 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

• une panne d’un processus ⇒ reconfigurer l’anneau

• un processus réparé ⇒ reconstituer l’anneau

Inconvénients:

• s’il y’a perte du jeton (message perdu) alors il faut le regénérer

• 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.

III. TRAITEMENT DES DEFAILLANCES


Dans un systeme distribué un algorithme distribué doit etre robuste (tolerant aux fautes) et
répondre aux differentes pannes qu’il peut detecter.
Il existe 3 failles qu’un algorithme doit considerer:
- perte de messages
- panne d’un site
- liaison rompue.

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]):

Si (j>i et état[j]=etat[i]) (i=0, j=n-1) ou (j<i et état[j]6=état[i] (i6=0, j=i-1)

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

Vous aimerez peut-être aussi