Vous êtes sur la page 1sur 19

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

Vous aimerez peut-être aussi