Université de Tizi Ouzou
Faculté de Génie Electrique et Informatique
Département d’Informatique
2021-2022
TD2 Systèmes d’exploitation L3
Mme ACHEMOUKH
1
Synchronisation par Moniteur
Un moniteur est une approche qui permet de
synchroniser entre plusieurs tâches utilisant des
ressources partagées.
C’est un module contenant: ²
Variables locales
Une ou plusieurs procédures
Une séquence d’initialisation
L’initialisation est executée une seule fois lors de la
création du Moniteur
2
Moniteur
File d’attente
Variables locales
Initialisation
Représentation d’un Moniteur 3
Synchronisation par Moniteur
Caractéristiques d’un Moniteur
-- Les variables locales sont accessibles seulement à
l’aide d’une procédure du moniteur
²
-- Un processus entre dans le moniteur en invoquant une
de ses procédures attrendre ou signaler
--Un seul processus peut exécuter dans le moniteur à
tous instant , mais plusieurs processus peuvent être en
attente dans le moniteur
4
Synchronisation par Moniteur
Caractéristiques d’un Moniteur
Le blocage et le réveil d’un processus s’expriment sur les
procédures du moniteur au moyen de condition c sur une
file de tâches (processus) .
-- La procédure attrendre /* c.attendre*/
²
Bloque le processus appelant et la place dans la file d’attente
corespondante à la condition c
-- La procédure signaler /* c.signaler*/
Débloque (réveille ) un processus en attente dans la file liée
à la condition c selon la stratégie FIFO
5
Exercice n° 1: (Le problème du rond-point)
On considère un rond-point comportant N voies (N = 3) numérotées de 0 à
N-1.
Tous les véhicules empruntant le rond-point tournent dans le même sens et
dans le sens croissant des indices des voies.
6
Exercice n° 1: (Le problème du rond-point)
En assimilant les véhicules à des processus , et le rond-
point à une ressource partagée.
processus véhicule
début Procédure Moniteur
... ²
Section critique
rond-point.Entrer(i);
<tourner dans le rond-point de i à j (dans le bon sens )>
rond-point.Sortir(j);
...
fin Procédure Moniteur
7
Exercice n° 1: (Le problème du rond-point)
1- Programme du moniteur en supposant qu’un
véhicule peut entrer dans le rond-point ssi aucun autre
véhicule n’est déjà présent dans le rond-point :
-- Condition d’accès au rond-point : rond- point libre
occuper= faux 8
Exercice n° 1: (Le problème du rond-point)
1- Programme du moniteur en supposant qu’un
véhicule peut entrer dans le rond-point ssi aucun autre
véhicule n’est déjà présent dans le rond-point :
occuper= vrai
9
Exercice n° 1: (Le problème du rond-point)
1- Programme du moniteur en supposant qu’un véhicule peut entrer dans le rond-
point ssi aucun autre véhicule n’est déjà présent dans le rond-point :
Rond_Point: Moniteur ;
var occuper : boolean ; Si Rond-Point occupé
accès : condition ; Alors mettre le
² processus vehicule en file
Procedure Entrer() ; d’attente
Debut
si occuper alors
accés.attendre;
Finsi Rond-Point occupé
occuper:=vrai;
Fin_Entrer;
10
Exercice n° 1: (Le problème du rond-point)
1- Programme du moniteur en supposant qu’un véhicule peut entrer dans le rond-
point ssi aucun autre véhicule n’est déjà présent dans le rond-point :
Rond_Point: Moniteur ;
var occuper : boolean ;
accès : condition ; Rond-point libre
Procedure Sortir();
Debut ²
occuper:=faux; Réveil du processus bloqué
accés.signaler;
Fin_Sortir.
INIT() /* initialisation*/
occuper:=faux; Etat initial
Rond-point libre
Fin _Rond_point.
11
Exercice n° 1: (Le problème du rond-point)
1- Programme du moniteur en supposant qu’un
véhicule peut entrer dans le rond-point ssi aucun autre
véhicule n’est déjà présent dans le rond-point :
-- Condition d’accès au rond-point : rond- point libre
12
Exercice n° 1: (Le problème du rond-point)
2. Programme du moniteur en supposant qu’il y a
partage de l’accès par les véhicules issus d’une même
voie :
-- Condition d’accès au rond-point :
n=0 (rond- point libre)
ou voie (voiture)= voie courante
13
Exercice n° 1: (Le problème du rond-point)
2- Programme du moniteur en supposant qu’il y a partage de l’accès par les
véhicules issus d’une même voie :
Donc c’est le réveil en chaîne pour les voitures de la voie
dont est issue le véhicule qui² est dans le Rond-Point.
-- Définir une file d’attente pour chaque voie
-- Chaque file d’attente est dotée d’une condition
14
Exercice n° 1: (Le problème du rond-point)
2- Programme du moniteur en supposant qu’il y a partage de l’accès par les
véhicules issus d’une même voie :
Rond_Point: Moniteur ;
Crée un type voie
Const N=3 ; Un tableau de conditions
Type voie = 0.. N-1 ; ²
Var accés = tableau [voie] de condition ;
vc: voie ;
voie courante
n :entier ;
Nombre de véhicules dans le
Rond-point
15
Exercice n° 1: (Le problème du rond-point)
2- Programme du moniteur en supposant qu’il y a partage de l’accès par les
véhicules issus d’une même voie :
Rond_Point: Moniteur ; voie courante correspond à la
Procedure Entrer(v :voie) ; voie passée en paramètre
Debut Demande d’accès par une
si n=0 alors voie ≠ voie courante
vc :=v ; ²
Finsi
bloquer les processus de
si (v ≠ vc) alors
la voie v
accés[v].attendre ;
Finsi
n :=n+1 ; Conditions vérifiées :
-Nbr de voitures est incrémenté
accés[v].signaler ; - Réveil en chaîne des voitures de la
Fin_Entrer. file liée à la voie v 16
Exercice n° 1: (Le problème du rond-point)
2- Programme du moniteur en supposant qu’il y a partage de l’accès par les
véhicules issus d’une même voie :
Rond_Point: Moniteur ;
Procedure Sortir(); Nbr de voitures est
décrémenté
var i : entier ;
Debut
n :=n-1 ; ² Changement de la voie
courante
i :=0 ;
Tantque (n=0) et (i<N-1) faire
vc :=(vc+1) MOD N ;
accés[vc].signaler ; Signaler à la file liée à la
voie vc que l’accès est
i :=i+1 ;
libre
Fin_Tantque ;
Fin_Sortir .
17
Exercice n° 1: (Le problème du rond-point)
2- Programme du moniteur en supposant qu’il y a partage de l’accès par les
véhicules issus d’une même voie :
Rond_Point: Moniteur ;
Const N=3 ;
Type voie = 0.. N-1 ;
Var accés = tableau [voie] de condition ;
²
vc: voie ;
n :entier ;
Procedure Entrer(v :voie) ;
Procedure Sortir();
INIT() /*
initialisation*/
n:=0
Fin _Rond_point. 18
Exercice n° 1: (Le problème du rond-point)
2. Programme du moniteur en supposant qu’il y a
partage de l’accès par les véhicules issus d’une même
voie :
attente
²
Réveil en chaîne
attente
-- Conditions d’accès au rond-point :
n=0 (rond- point libre)
ou voie (voiture)= voie courante