2
ressources `a acc`es exclusif. L’exclusion mutuelle est g´er´ee par un algorithme de contrˆole r´eparti Ctl, constitu´e
d’une instance Ctlisur chaque site Si.
L’algorithme Ctlidoit r´epondre aux requˆetes de demande de section critique (DemSC) et de fin de section
critique (FinSC) ´emises par l’algorithme Appi. S’il poss`ede le privil`ege, alors l’algorithme Ctlir´epond au
message DemSC ´emis par Appipar un message d’accord (AccSC). Dans le cas contraire, il envoie une demande
DemPriv vers chacune des autres instances Ctlj(j6=i) de l’algorithme de contrˆole.
L’algorithme Ctlig`ere deux bool´eens : Privi(d´etention du privil`ege) et SCi(section critique en cours). Le
bool´een Priviest initialis´e via un processus d’´election, qui ne donne le privil`ege qu’`a un seul site : Priv ←
´election().
Question 2-1 : (1,5 point)
´
Ecrire l’algorithme de contrˆole Ctli. Lorsqu’il rec¸oit un message DemPriv ´emis par Ctlj, Ctlilui
transmet le privil`ege (avec un message de type DonPriv) s’il le poss`ede et s’il n’y a pas de section
critique en cours. Dans le cas contraire, il laisse sans suite la demande de Ctlj.
L’algorithme comporte les gardes suivantes : initialisation, r´eception demande de section critique,
r´eception fin de section critique, r´eception demande privil`ege, r´eception du privil`ege.
Question 2-2 : (1 point)
Quel est l’inconv´enient d’ignorer les demandes de privil`ege lorsqu’une section critique est en
cours ? Comment y rem´edier ? Pourquoi utilise-t-on alors les estampilles ?
Question 2-3 : (1,5 point)
Modifier l’algorithme de la question 2-1 de telle sorte qu’`a la fin de la section critique, le privil`ege
soit transmis au demandeur ayant adress´e la plus ancienne demande. On notera hil’horloge enti`ere
locale, et demandesila liste des estampilles des demandes rec¸ues pendant la section critique (et
uniquement celles-ci).
Question 2-4 : (1,5 point)
(a) Avec l’algorithme pr´ec´edent, pourquoi un site pourrait transmettre le privil`ege `a un site qui l’a
demand´e et qui a ´et´e servi depuis ?
(b) Expliquer comment ce probl`eme peut ˆetre r´esolu en utilisant un tableau TabPriv[1..N]de N
estampilles en guise de privil`ege (au lieu du bool´een Priv), et en notant dans TabPriv[j]l’estampille
du site Sjau moment o`u celui-ci donne le privil`ege (i.e., il envoie TabPriv `a l’´emetteur de la plus
ancienne demande).
Question 2-5 : (1,5 point)
Lorsque le privil`ege est sur le site Si, le tableau d’estampilles TabPriv est stock´e dans la variable
TabPrivi.
(a) Pourquoi peut-on utiliser un tableau TabDemi[1..N]d’entiers pour stocker les estampilles des
demandes rec¸ues pendant la section critique au lieu de la liste d’estampilles demandei?
(b) En utilisant TabDemiet TabPrivi, comment le site qui d´etient le jeton peut ´equitablement
d´eterminer le demandeur `a satisfaire ?
(c) Dans quel cas le privil`ege ne doit pas ˆetre transmis ?
Question 2-6 : (1,5 point)
Donner le code d’une proc´edure ChoixDem qui prend en argument les tableaux TabDemiet
TabPrivi, qui les compare, et qui retourne l’indice du site `a qui le privil`ege doit ˆetre transmis
(0si le privil`ege ne doit pas ˆetre transmis) : k←ChoixDem(TabDemi, TabPrevi).
Question 2-7 : (2 points)
Modifier l’algorithme de la question 2-3 en utilisant les tableaux TabDemiet TabPrivi, et la
proc´edure ChoixDem(), afin d’obtenir un algorithme d’exclusion mutuelle. Cet algorithme fonc-
tionne par transmission d’un privil`ege, mais ne n´ecessite pas l’´etablissement d’un anneau de contrˆole.
Universit´e de Technologie de Compi`egne. Final SR05 automne 2003. resp. : B. Ducourthial