0% ont trouvé ce document utile (0 vote)
87 vues5 pages

Chapitre 04 (Moniteur)

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1/ 5

UMM/Département Informatique/ LI (S5)/ Module SEII/

SABBA-CHEHBOUR.F

chapitre 4: Les Moniteurs et les


régions critiques
1 Introduction
Pour faciliter l'écriture de programmes correctes, Hoare (1974) et Brinch hansen
(1975) ont proposé une primitive de synchronisation de plus haut niveau, le
moniteur.
Un moniteur est un ensenble de procédures, de variables, et de structures de
données regroupées dans un module spécial. Les moniteurs ont une proprièté
importante qui les rend très utiles pour assurer l'exclusion mutuelle. Un seul

processus peut être actif à l'interieur du moniteur à un instant donné.

Les moniteurs sont une structure particulière de programmation. Le com-


pilateur sait donc qu'il sont spéciaux, il traite les appels des procédures du
moniteur diérement des appels classiques de procédures. Lorqu'un processus
appel une procédure du moniteur, les premières instructions de cette procédure
vérient qu'aucun notre processus n'est actif dans le moniteur. S'il y en a un, le
processus appelant est suspendu jusqu'à ce que le processus actif dans le moni-
teur l'ait quitté. Si aucun processus n'utilise le moniteur, le processus appelant
peut y entrer. C'est au compilateur de réaliser l'exclusion mutuelle au niveau
des entrées dans le moniteur. Pour ce faire, il utilise en géneral un sémaphore
binaire.
L'exclusion mutuelle étant assurée par le compilateur est non pas par le
programmeur. Il sut juste de reporter toutes les sections critiques dans des
procédures du moniteur, pour être sûre que jamais deux processus n'entrerons
en section critique en même temps.

1
UMM/Département Informatique/ LI (S5)/ Module SEII/
SABBA-CHEHBOUR.F

2 Dénition
Les moniteurs sont dénis par :
• Un ensemble de variables dites de synchronisation
• Des primitives qui manipulent ces variables.

1. Primitives externes: appellées aussi points d'entrée au moniteur. Les


ressources sur lesquelles se synchronisent les processus sont manip-
ulées par ces procedures.
2. Primitives internes: uniquement accibles depuis l'interieur du moni-
teur.
• Une ou plusieurs les d'attente.

structure d'un moniteur

Nom_Moniteur : Moniteur;
début
déclaration des variables locales (ressources partagées)
déclaration des coprs des procédures du moniteur
initialisation des variables locales.
n

Exemple1:

Incrémentation d'une variable partagée N par plusieurs processus.


Increment : moniteur;
var
N : entier;
Procedure incrementer
debut
N:=N+1;
n;
% initialisation%
N:=0;
Les processus voulant incrémenter la valeur de N, n'executent plus directe-
ment l'instruction N:=N+1; mais font appel à la procedure incrementer du
moniteur increment comme suit.
Pi
répéter
Incrément.incrementer;
jusqu'à faux.
le format d'appel est donc: Nom du moniteur.Nom de la procedure

2
UMM/Département Informatique/ LI (S5)/ Module SEII/
SABBA-CHEHBOUR.F

Avantages:

1. Au lieu d'être dipersées dans les diérents processus, les sections critiques
sont transformés en fonctions ou procédures d'un moniteur.

2. La gestion des S.C n'est plus à la charge de l'utilisateur. Elle est réalisée
par l'implantation du moniteur qui garanti qu'au plus un processus à la
fois peut accéder à cette structure. En fait c'est le moniteur tout entier qui
est implanté comme une S.C. ainsi, lorsqu'un processus souhaite éxecuter
une opération concérnant une variable partagée, il appelle simplement une
procedure particulière d'un moniteur qui est exécutée si le moniteur est
diponible. Si au contraire, le moniteur est occupé, le processus est bloqué
dans une le associée au moniteur. Dès que celui-ci est libéré, un choisi
dans la le et la procédure invoquée est exécutée.

3 variable de type condition


Une variable de type condition est une variable qui n'a pas de valeur. qui ne peut
être initialisée. Elle est déclarré à l'interieur du moniteur de la façon suivante:

3
UMM/Département Informatique/ LI (S5)/ Module SEII/
SABBA-CHEHBOUR.F

X: condition

La variable X désigne alors une le de processus en attente qui peut être
manipulée uniquement à l'interieur du moniteur par les primitives wait , signal

et empty.

On notera respectivement X.wait et X.signal l'application des opérations


wait et signal à la variable X.
Lorsqu'un processus exécute l'instruction X.wait ou wait(X) il est mis en
attente dans la le X. L'exécution X.signal ou signal(X) par un processus dé-
clenche le réveil d'un autre processus en attente dans la le X. Si cette le est
vide, l'instruction na aucun eet.
La primitive empty est une fonction booleénne , elle s'écrit X.empty. Elle
retourne la valeur faux s'il ya au moins un processus bloqué derière la condition
X.

Remarques

1. Si P1 est le processus eyant exécuté X.signal et P2 est le processus réveillé


par cette instruction. L'un des deux doit reprendre son exécution tandis
que l'autre doit être mis en attente pour qu'un seul processus soit actif à
l'interieur du moniteur.

2. Un processus réveillé par signal continu son exécution à partir de l'instruction


qui suit le wait qu'il a bloqué.

Exemple 2

Allocation d'une ressource comportant un seul point d'accès à plusieurs proces-


sus.
allocateur : moniteur;
var
occupe: booleén;

4
UMM/Département Informatique/ LI (S5)/ Module SEII/
SABBA-CHEHBOUR.F

libre: condition;
procédure acquisition
dédut
si occupe alors libre.wait fsi;
occupé := vrai;
n;
procédure libération
début
occupe := faux;
libre.signal;
n;
%initialisation%
debut
occupe := faux;
n;

Exemple 3

Gestion d'une classe de ressource à N Points d'accès. Chaque processus demande


une seule ressource à la fois.
Allocation_ress : moniteur;
var
N: entier;
C: condition;
procédure demander
debut
si (N=0) alors C.wait fsi;
N:=N-1;
n;
procédure liberer
debut
N:=N+1;
C.signal;
n;
% initialisation%
debut
N:=K;
n;

Vous aimerez peut-être aussi