Vous êtes sur la page 1sur 23

Les moniteurs

Extrait du cours CNAM-ACCOV


Samia Bouzefrane

Matre de Confrences

CEDRIC CNAM

samia.bouzefrane@cnam.fr
http://cedric.cnam.fr/~bouzefra

NFP137 C14 1
Bilan du contrle de concurrence par
smaphores
Le smaphore est un mcanisme qui permet le blocage
et le rveil explicites de processus
Le smaphore permet dassocier un nombre dautorisations
daccs disponibles un objet partag
Le schma des smaphores privs permet dexprimer une
condition daccs propre un processus
Tout paradigme de la concurrence peut tre trait par
lemploi de smaphores

NFP137 C14 2
Bilan du contrle de concurrence par
smaphores
Les contraintes de la programmation par smaphores
-respect des spcifications de programmation=>
pas daccs aux objets partags incontrl ( hors protocole)
attention :exceptions, erreurs, trappes
-respect des spcifications de comportement :
pas de boucle infinie, ni de blocage ou panne pendant
lutilisation des objets partags
-ventuellement spcifier les rgles dattente : priorit,
anciennet, quit
Le smaphore est un mcanisme simple et puissant, mais
dangereux dans un emploi non contrl
NFP137 C14 3
Bilan du contrle de concurrence par
smaphores
La modularit ncessaire
Encapsuler objets partags et mcanismes de contrle
Mcanismes de contrle associs exclusivement aux mthodes
daccs
Les mthodes daccs accessibles uniquement par linterface
du module, limplantation est cache

Remarque : difficult valuer le comportement des processus


vis--vis de proprits globales : interblocage, famine

NFP137 C14 4
Bilan du contrle de concurrence par
smaphores
Conclusion
Les smaphores sont utiliss comme un mcanisme de bas
niveau pour implanter des structures de contrle modulaires

Les moniteurs spcifis par Hoare et Brinch Hansen reposent


sur les principes suivants :
-Exclusion mutuelle implicite entre les mthodes daccs
=>file dattente au module
-Conditions daccs reposant sur des tests de variables dtat
=>file dattente par condition daccs
NFP137 C14 5
Les
Lesmoniteurs
moniteurs

NFP137 C14 6
Les
Les moniteurs
moniteurs
Lesmoniteurs proposent une solution de "haut-niveau"
pour la protection de donnes partages (Hoare 1974)

Ils simplifient la mise en place de sections critiques

Ils sont dfinis par


des donnes internes (appeles aussi variables d'tat)
des primitives d'accs aux moniteurs (points d'entre)
des primitives internes (uniquement accessibles depuis
l'intrieur du moniteur)
une ou plusieurs files d'attentes

NFP137 C14 7
Structure
Structure dun
dun moniteur
moniteur

Type m = moniteur
Dbut
Dclaration des variables locales (ressources partages);
Dclaration et corps des procdures du moniteur
(points dentre);
Initialisation des variables locales;
Fin

NFP137 C14 8
Les
Les moniteurs:
moniteurs: smantique/1
smantique/1

Seulun processus (ou tche ou thread) peut tre actif


un moment donn l'intrieur du moniteur

La demande d'entre dans un moniteur (ou


d'excution d'une primitivedu moniteur) sera bloquante
tant qu'il y aura un processus actif
l'intrieur du moniteur

L'accs un moniteur construit donc implicitement une


exclusion mutuelle
NFP137 C14 9
Les
Les moniteurs:
moniteurs: smantique/2
smantique/2
Lorsqu'unprocessus actif au sein d'un moniteur ne
peut progresser dans son travail (une certaine
condition est fausse), il libre l'accs au
moniteur avant de se bloquer.

Lorsque des variables internes du moniteur ont


chang, le moniteur doit pouvoir rveiller un
processus bloqu.

Pour cela, il existe deux types de primitives :


wait : qui libre l'accs au moniteur, puis bloque le
processus appelant sur une condition
signal : qui rveille sur une condition un des processus
en attente l'intrieur du moniteur
NFP137 C14 (un processus qui a 10
excut prcdemment un wait sur la mme condition)
Les
Les variables
variables condition/1
condition/1

Une variable condition: est une variable


- qui est dfinie laide du type condition;
- qui a un identificateur mais,
- qui n'a pas de valeur (contrairement un smaphore).

Une condition :
- ne doit pas tre initialise
- ne peut tre manipule que par les primitives Wait et Signal.
- est reprsente par une file d'attente de processus bloqus
sur la mme cause;
- est donc assimile sa file d'attente.

NFP137 C14 11
Les
Les variables
variables condition/2
condition/2

La primitive Wait bloque systmatiquement le processus qui


l'excute

La primitive Signal rveille un processus de la file d'attente de la


condition spcifie, si cette file d'attente n'est pas vide;
sinon elle ne fait absolument rien.

NFP137 C14 12
Les
Les variables
variables condition/3
condition/3

Syntaxe :
cond.Wait;
cond.Signal;
/* cond est la variable de type condition dclare comme
variable locale */

Autre syntaxe:
Wait(cond) ;
Signal(cond);

Un processus rveill par Signal continue son excution


l'instruction qui suit le Wait qui l'a bloqu.
NFP137 C14 13
Les
Les moniteurs
moniteurs dans
dans les
les langages
langages de
de programmation
programmation

Selon les langages (ou les normes), ces mcanismes peuvent tre
Implments de diffrentes faons
mthodes wait / notify / notifyAll en Java et mthodes synchronized
primitives pthread_cond_wait / pthread_cond_signal en Posix et
Variables conditionnelles
objets protgs en Ada

La smantique des rveils peut varier :


Qui rveille t-on ?
le plus ancien, le plus prioritaire, un choisi au hasard,
Quand rveille t-on ?
ds la sortie du moniteur, au prochain ordonnancement,

NFP137 C14 14
Un
Un RDV
RDV entre
entre N
N processus
processus laide
laide des
des moniteurs
moniteurs
Type Rendez_vous = moniteur
{variables locales }
Var Nb_arrivs : entier ; Tous_Arrivs : condition ;
{procdure accessible aux programmes utilisateurs }
Procedure Entry Arriver ;
Dbut
Nb_arrivs = Nb_arrivs + 1 ;
Si Nb_arrivs < N Alors Tous_Arrivs.Wait ;
Tous_Arrivs.Signal ;
Fin
Dbut {Initialisations }
Nb_arrivs = 0;
Fin.

NFP137 C14 15
Un
Un RDV
RDV entre
entre N
N processus
processus laide
laide des
des moniteurs
moniteurs

Les programmes des processus s'crivent alors :


Processus Pi
...............
Rendez_vous.Arriver ; {Point de rendez-vous: sera bloquant si au moins
un processus n'est pas arriv au point de rendez-vous }
...............

NFP137 C14 16
Producteur-Consommateur
Producteur-Consommateur laide
laide des
des moniteurs
moniteurs
Type ProducteurConsommateur = moniteur
{variables locales }
Var Compte : entier ; Plein, Vide : condition ;
{procdures accessibles aux programmes utilisateurs }

Procedure Entry Dposer(message M) ;


Dbut
si Compte=N alors Plein.Wait ;
dpt(M);
Compte=Compte+1;
si Compte==1 alors Vide.Signal;
Fin

NFP137 C14 17
Producteur-Consommateur
Producteur-Consommateur laide
laide des
des moniteurs
moniteurs
Procedure Entry Retirer(message M) ;
Dbut
si Compte=0 alors Vide.Wait ;
retrait(M);
Compte=Compte-1;
si Compte==N-1 alors Plein.Signal;
Fin

Dbut {Initialisations }Compte= 0; Fin.

NFP137 C14 18
Producteur-Consommateur
Producteur-Consommateur laide
laide des
des moniteurs
moniteurs
Processus Producteur
message M;
Dbut
tant que vrai faire
Produire(M);
ProducteurConsommateur.dposer(M)
Fin
Processus Consommateur
message M;
Dbut
tant que vrai faire
ProducteurConsommateur.retirer(M);
Consommer(M);
Fin
Remarques
-Adapt au cas de plusieurs producteurs, plusieurs consommateurs

NFP137 C14 19
Le
Le repas
repas des
des philosophes
philosophes laide
laide des
des moniteurs
moniteurs
Type RepasPhilosophes = moniteur
type Statut =(pense, demande, mange);
Var Statut tat[5];
Condition AMoi[5];
{procdures accessibles aux programmes utilisateurs }
Procedure Entry Prendre(entier i);
Dbut
tat[i]=demande;
si (tat[(i+1)%5]mange et tat[(i-1)%5]mange)
alors tat[i]=mange;
sinon AMoi[i].Wait; finsi;
Fin

NFP137 C14 20
Le
Le repas
repas des
des philosophes
philosophes laide
laide des
des moniteurs
moniteurs
Procedure Entry Rendre(entier i);
Dbut
tat [i]=pense;
{rveil ventuel dun voisin}
si (tat[(i+1)%5]=demande et tat[(i+2)%5]mange)
alors tat[(i +1)%5]=mange; AMoi[(i+1)%5].Signal;
sinon
si (tat[(i-1)%5]=demande et tat[(i-2)%5]mange)
alors tat[(i-1)%5]=mange; AMoi[(i-1)%5].Signal ;finsi;
finsi;
Fin

Dbut {Initialisations }
Pour i de 0 4 faire tat[i]=pense; fait;
Fin

NFP137 C14 21
Le
Le repas
repas des
des philosophes
philosophes laide
laide des
des moniteurs
moniteurs
Processus Philosophe i
entier i= numero du processus ;
Dbut
tant que vrai faire
penser;
RepasPhilosophes.prendre(i);
manger;
RepasPhilosophes.rendre(i);
fait;

Fin

Remarque Solution sans interblocage, mais risque de famine

NFP137 C14 22
Rfrences
Rfrences

Samia Bouzefrane, Les Systmes dexploitation: Cours et Exercices corriges Unix, Linux et Windows XP
avec C et JAVA (566 pages), Dunod Editeur, Octobre 2003, ISBN : 2 10 007 189 0.

Jean-Franois Peyre, supports de cours sur linformatique industrielle-systmes temps rel, CNAM(Paris).

NFP137 C14 23