Académique Documents
Professionnel Documents
Culture Documents
P4 P4
Processus P1 Processus P2
Début Début
Att(e1) <T2>
<T1> Sign(P1,e1)
Sign(P2,e2) Att(e2)
1) Att(e3) <T3>
<T4> Sign(P1,e3)
fin fin
2) Processus P1 Processus P2
Début Début
<T1> <T2>
<T4> Att(e)
Sign(P2,e) <T3>
fin fin
3) T2 T3 T2 T3 T1 T4 ou T2 T2 T3 T3 T1 T4
Exercice 03 :(8pts)
N processus partagent l’accès à une mémoire de K blocs (N>K) selon le schéma suivant :
Processus Pi=1..N
Début
Mem.Demader(nb :entier)
<utiliser >
Mem.Liberer(nb :entier)
Fin
1) Ecrire le moniteur correspondant en supposant que tous les processus demandent B blocs.
2) Nous supposant maintenant qu’il y a deux classes de processus. La classe C1 correspond
aux processus qui demandent un seul bloc et la classe C3 correspond à ceux qui demandent
trois (03) blocs. La priorité est donnée à la classe C3. Redéfinir le schéma d’exécution puis
écrire le moniteur correspondant.
Remarque : il sera tenu compte de la simplicité et de la clarté de la solution proposée.
1)
Mem :Moniteur
Const K=.. //nombre de blocs
B=..// nombre de blocs demandés
Var nbl :entier // nombre de blocs libres
C :condition
Procedure demander ()
Debut
Si (nbl<B)
c.attendre()
fin si
nbl :=nbl – B
Fin
Procedure Liberer ()
Debut
nbl :=nbl + B
c.signaler()
Fin
Init()
Nbl :=K
2)
Classe C1 Classe C3
Début Début
Mem.Demader1() Mem.Demader3()
<utiliser > <utiliser >
Mem.Liberer1() Mem.Liberer3()
Fin Fin
3)
Mem :Moniteur
Const K=.. //nombre de blocs
Var nbl :entier // nombre de blocs libres
C1,C3 :condition
Procedure demander1 ()
Debut
Si (nbl<1)
c.attendre()
fin si
nbl :=nbl – 1
Fin
Procedure Liberer1 ()
Debut
nbl :=nbl + 1
si (nbl>=3)
C3.signaler()
Sinon
C1.signaler
finsi
Fin
Procedure Liberer3 ()
Debut
nbl :=nbl + 1
si (C3.vide()=faux)
C3.signaler()
Sinon
C1.signaler
C1.signaler
C1.signaler
finsi
Fin
Init()
Nbl :=K