Académique Documents
Professionnel Documents
Culture Documents
emaphores et leur
impl
ementation
1
Rappel :Le concept de s
emaphore
Un semaphore est une variable enti` ere partagee. Sa valeur est positive ou
nulle et elle est uniquement manipulable ` a laide de deux op erations
wait(s) et signal(s), o`u s est un identificateur designant le s
emaphore.
wait(s) decr
emente s si s > 0 ; si non, le processus ex
ecutant
lop
eration wait(s) est mis en attente.
signal(s) incr
emente s. Lex
ecution de signal(s) peut avoir pour effet
(pas n
ecessairement immediat) quun processus en attente sur le
s
emaphore s reprend son execution.
2
Lexclusion mutuelle `
a laide de s
emaphores
Les s
emaphores permettent une impl
ementation tr`
es simple de lexclusion
mutuelle.
semaphore s = 1;
Processus 1 : Processus 2 :
while (True) while (True)
{ nc1: /* section { nc2: /* section
non critique */ ; non critique */
wait(s); wait(s);
crit1: /* section critique */ ; crit2: /* section critique */
signal(s); signal(s)
} }
3
Limpl
ementation des s
emaphores
Les s
emaphores sont impl
ement
es dans le noyau du syst`
eme.
Dans ULg03, pour ex ecuter par exemple une op eration wait, on place
sur la pile les arguments de lappel syst`
eme, ` a savoir le numero du
s
emaphore et un code WAIT identifiant lop eration. Supposant que le
num ero du semaphore a et
e plac
ee en r0, cela se r
ealise comme suit.
PUSH(r0) | 2i`
eme argument
CMOVE(WAIT,r1) | 1er argument
PUSH(r1)
SVC() | appel syst`
eme
4
Le handler de SVC
Une difficult
e est que les arguments de SVC se trouvent sur la pile du
processus ayant fait lappel, dans son espace virtuel.
6
Le handler de SVC :
les structures de donn ees
Les structures de donn
ees utilis
ees par le noyau sont les suivantes.
8
Le handler de SVC :
structure g
en
erale
Svc_handler()
{ int code;
code = *Vmap(User.R29-4)
switch (code)
{ ....
Les adresses des arguments de lappel syst` eme ne sont pas calcules
exactement comme dans le cas dun appel de proc edure car, dans le cas
de lappel syst`
eme rien nest ajout
e`a la pile du processus appelant apr`
es
lappel.
9
Les handlers Wait_h et Signal_h : premi`
ere version
Wait_h(int semno)
{ if (sem[semno] <= 0) {
User.R30 = User.R30 - 4; /* SVC sera reex
ecut
e */
Proctbl[Cur].status = WAIT; Proctbl[Cur].semwait = semno;
scheduler();
} else
sem[semno] = sem[semno] - 1;
}
Lorsque le s
emaphore nest pas positif, le processus est mis en attente ; il
r
eex
ecutera linstruction SVC lorsquil sera r
eactiv
e.
10
Signal_h(int semno)
{ for (i = 0; i<N; i++) {
if (Proctbl[i].status == WAIT && Proctbl[i].semwait == semno)
Proctbl[i].status = RUN;
}
sem[semno] = sem[semno] + 1;
}
11
Les handlers Wait_h et Signal_h : deuxi`
eme version
Wait_h(int semno)
{ if (sem[semno] <= 0) {
Proctbl[Cur].status = WAIT; Proctbl[Cur].semwait = semno;
scheduler();
} else
sem[semno] = sem[semno] - 1;
}
Lappel syst`
eme nest pas r eex
ecut
e lorsquun processus sort de son etat
dattente. En effet, le handler de signal va se charger de reactiver un
processus en attente sil y en a un, sans passer par lincr
ementation et la
d
ecr
ementation du s emaphore.
12
Signal_h(int semno)
{ int i,wokeup = 0;
for (i = 0; i<N; i++) {
if (Proctbl[i].status == WAIT && Proctbl[i].semwait == semno) {
Proctbl[i].status = RUN;
wokeup = 1; break;
}
}
if (wokeup == 0) sem[semno] = sem[semno] + 1;
}
Cette impl
ementation garantit que, si seuls deux processus utilisent le
s
emaphore, aucun ne restera ind
efiniment en attente.
Une impl ementation equitable pour plus de deux processus utilisera une
file dattente par s
emaphore pour gerer les processus en attente.
13
Limpl
ementation des s
emaphores sur une machine `
a
plusieurs processeurs
Lacc`es atomique `
a la m emoire en lecture ou en
ecriture nest pas
suffisant pour une r
ealisation pratique.
14
Linstruction Test and Clear
15
Le microcode de TCLR
16
Lexclusion mutuelle `
a laide de TCLR
Lexclusion mutuelle se r
ealise tr`
es simplement `
a laide de TCLR.
wait: TCLR(r31,lock,r0)
BEQ(r0,wait)
CMOVE(1,r0)
ST(r0,lock,r31)
17
Le Probl`
eme de la zone tampon (buffer)
ou probl`
eme du producteur et consommateur
/* m
emoire partag
ee */
int in = 0, out = 0;
int buf[N];
/* m
emoire partag
ee */
int in, out = 0;
int buf[N];
semaphore n = 0;
Un deuxi`
eme s
emaphore, initialis
e au nombre de places vides dans le
tampon permet de synchroniser le producteur.
/* m
emoire partag
ee */
int in, out = 0;
int buf[N];
semaphore n = 0, e = N;
20
Le probl`
eme de la zone tampon :
Exclusion mutuelle des op
erations
/* m
emoire partag
ee */
int in, out = 0; int buf[N];
semaphore n = 0, e = N, s = 1;
Ce type de s
emaphore permet de g
erer la mise en attente de
processus, mais pas de compter.
Un semaphore gen
eral peut toutefois
etre simul
e par un s
emaphore
binaire et un compteur.
22
La zone tampon avec s
emaphores binaires
/* m
emoire partag
ee */
int in = 0, out = 0, count = 0;
int buf[N];
semaphore n = 0, e = 0, s = 1;
/* m
emoire partag
ee */
int in = 0, out = 0, count = 0;
int buf[N]; int ewait = 0 ,nwait = 0;
semaphore n = 0, e = 0, s = 1;
24
Pour
eviter la double signalisation, on nex
ecute signal(n) ou
signal(e) que sil y a un processus en attente.
On peut imaginer d
etendre cette solution `
a plusieurs producteurs et
consommateurs en comptant le nombre de processus en attente.
Toutefois, il faut
eviter que, par exemple, un deuxi`eme consommateur
ne d epasse un consommateur qui vient d etre lib
er
e et ne consomme
l
el
ement destine`a ce dernier.
25
La zone tampon avec s emaphores binaires :
Solution pour plusieurs producteurs et consommateurs
/* m
emoire partag
ee */
int in = 0, out = 0, count = 0;
int buf[N]; int ewait = 0 ,nwait = 0;
semaphore n = 0, e = 0, s = 1;
Les s
emaphores sont un excellent m
ecanisme pour g
erer la mise en
attente de processus.
Lorsquil faut g
erer la mise en attente en combinaison avec la
manipulation dun compteur, les s emaphores sont tr`
es bien adapt
es.
Lutilisation des s
emaphores binaires indique quelles difficult
es
apparaissent lorsque lon combine lattente impl
ement ee par un
s
emaphore avec la manipulation dune autre structure de donn ee.
Il serait int
eressant davoir une solution syst
ematique pour g
erer ce
type de probl` eme.
27