2LFIG
I)
2014-2015
Correction série N° 1
a- Le problème est que l’imprimante ne peut pas être utilisée par 2 Px en même temps.
Cela impliquera un entrelacement des lignes d’origines divers sur le papier ce qui le
rend inexploitable.
b- Le problème est causé par le partage du fichier qui est une ressource partageable
exclusivement. La ressource est donc le fichier qui est une ressource à un seul point
d’accès.
c- La ressource sera protégée par un sémaphore :
(s, fs,1).
TRT1 :
Produire des données
ALLOUER (s)
Imprimer les données
LIBERER (s)
Aller à TRT1
II)
a- Les ressources sont les N imprimantes. Ces imprimantes constituent une seule
ressource à N points d’accès (car elles sont banalisées).
Le sémaphore de partage des imprimantes : (s, fs, N).
Ce sémaphore permet uniquement de savoir si au moins une imprimante est libre.
Dans le cas ou il y a une imprimante de libre, le Px doit connaitre laquelle parmi les N.
Ce ci nécessite une structure de
tableau pour gérer
l’état des
imprimantes.
Advertisement
T[1..N] 0 (au démarrage toutes les imprimantes sont libres).
Ce tableau est utilisé par l’ensemble des Px, par conséquent il devient une ressource qui ne
peut être que critique. Il faut la protéger par un sémaphore à 1 point d’accès : (p,fp,1)
1
2014-2015
2LFIG
TRT1 :
Produire des données
ALLOUER (s)
ALLOUER (p)
For ip=1 to N do
{
}
If (T[ip] = 0) Then
{
}
T[ip] =1
break
LIBERER (p)
Imprimer les données sur ip
/ Remise de l’imprimante ip à l’état libre /
ALLOUER (p)
T[ip] =0
LIBERER (p)
LIBERER (s)
Aller à TRT1
III)
a- La ressource partagée est le fichier F.
Advertisement
Son partage n’est pas statique : Il est exclusif entre le Px R et les Px L et à une infinité de
points d’accès pour les Px L entre eux.
Un sémaphore (w, fw,1) est nécessaire pour protéger F entre le Px R et les Px L.
Les Px L ne doivent pas se bloquer lorsque le Px R n’est pas entrain d’écrire. L’idée est :
Le premier Px L doit tester si Px R est entrain d’écrire. Si c’est le cas il doit attendre et
bloquer les Px L derrière. Si le fichier est libre, il doit bloquer le Px R et ne pas bloquer les Px
L derrière.
Le dernier Px L doit libérer le fichier afin que le Px R soit débloqué.
2
2LFIG
2014-2015
Ce ci nécessite un compteur du nombre de Px L en cours d’utilisation du fichier. Ce compteur
(NB_L 0) devient une ressource commune à 1 seul point d’accès (p, fp,1) .
Cas 1 : les Px L prioritaires
Processus R
TRT_R :
Produire des données
ALLOUER (s)
Ecrire dans le fichier F
LIBERER (s)
Aller à TRT_R
Processus L
TRT_L :
ALLOUER (p)
NB_L++
If (NB_L = 1 ) then
{
}
Advertisement
ALLOUER (s)
LIBERER (p)
Lire les données
ALLOUER (p)
NB_L - -
If (NB_L = 0 ) then
{
}
LIBERER (s)
LIBERER (p)
Traiter les données
Aller à TRT_L
3
2LFIG
2014-2015
Cas 2 : partage équitable
Le partage équitable nécessite un sémaphore supplémentaire qui permet de bloquer les Px L
lorsque le Px R est entrain s’attendre le fichier :
(w, fw, 1).
Processus R
TRT_R :
Produire des données
ALLOUER (w)
ALLOUER (s)
Ecrire dans le fichier F
LIBERER (w)
LIBERER (s)
Aller à TRT_R
Advertisement
Processus L
TRT_L :
ALLOUER (w)
ALLOUER (p)
NB_L++
If (NB_L = 1 ) then
{
}
ALLOUER (s)
LIBERER (p)
LIBERER (w)
Lire les données
ALLOUER (p)
NB_L--
If (NB_L = 0 ) then
{
}
LIBERER (s)
4
2LFIG
2014-2015
LIBERER (p)
Traiter les données
Aller à TRT_L
5