Académique Documents
Professionnel Documents
Culture Documents
ch5 Synchronisation PDF
ch5 Synchronisation PDF
Processus
Chapitre 5
1
Synchronisation de Processus
1. Conditions de Concurrence
2. Sections Critiques
3. Exclusion Mutuelle
4. Sommeil & Activation
5. Smaphores
6. Mutex
2
Concurrence
3
Un exemple
Deux processus M. X demande une
excutent cette mme rservation
procdure et partagent la davion
mme base de donnes
Ils peuvent tre Base de donnes
interrompus nimporte o dit que fauteuil
Le rsultat de lexcution A est disponible
concurrente de P1 et P2
dpend de lordre de leur Fauteuil A est
entrelacement assign X et
marqu occup
4
Exemple dexcution possible
P1
Interruption P2
M. Leblanc demande une ou retard
rservation davion
M. Guy demande une
rservation davion
5
Un autre exemple
P1 interruption P2
Deux
b=a oprations
b=a en parallle
sur une
b++ variable a
a=b partage
(b est priv
b++ chaque
processus)
a=b
Supposons que a soit 0 au dbut
P1 travaille sur le vieux a donc le rsultat final sera a=1.
Il serait a=2 si les deux tches sont excutes lune aprs lautre
Si a tait sauvegard quand P1 est interrompu, il ne pourrait pas tre partag avec P2
(il y aurait deux a tandis que nous en voulons une seule)
6
Section Critique
7
Le problme de la section critique
Section dentre
Section de sortie
10
Critres ncessaires pour solutions valides
Exclusion Mutuelle
tout instant, au plus un processus peut
tre dans une section critique (SC) pour une
variable donne
Non interfrence:
Si un processus sarrte dans sa section
restante, ceci ne devrait pas affecter les
autres processus
Mais on fait lhypothse quun
processus qui entre dans une section
critique, en sortira.
11
Critres ncessaires pour solutions valides
Progrs:
absence dinterblocage
si un processus demande d`entrer dans une
section critique un moment o aucun autre
processus en fait requte, il devrait tre en
mesure dy entrer
Absence de famine: aucun processus ne
sera ternellement empch datteindre sa
Section Critique
12
Conditions de Concurrence
Conditions de concurrence (race conditions): situation o 2
processus ou plus effectuent des lectures et des critures
conflictuelles.
Exemple du Spouler dimpression
Un processus qui veut imprimer un fichier, entre son
nom dans un rpertoire de spoule
Le processus dmon dimpression regarde
priodiquement sil y a des fichiers imprimer. Il a 2
variables:
in: pointe vers la prochaine entre libre.
out: pointe vers le prochain fichier imprimer
in = 7, out = 4
A et B deux processus qui veulent imprimer un fichier
A >> lire in, next_free_slot = 7
Interruption: la CPU bascule vers le processus B
B >> lire in, next_free_slot = 7, entre7 = fichierB, in
=8
A >> entre7 = fichierA, in = 8
Problme: le fichierB ne sera pas imprim
13
Conditions de Concurrence
14
Les Sections Critiques
les Sections Critiques, mthode dexclusion mutuelle
A entre dans sa A quitte sa
section critique section critique
A
B quitte sa
section critique
t1 t2 t3 t4
B tente dentrer dans sa B entre dans sa
section critique section critique
15
LExclusion Mutuelle avec Attente Active
(busy waiting)
Dsactivation des interruptions
Aprs son entre dans une SC, un processus dsactive les
interruptions, puis les ractive
Il empche ainsi lhorloge denvoyer des interruptions et le
processeur de basculer
Il est imprudent de permettre des processus user de
dsactiver les interruptions
Variables de verrou (lock)
Avant dentrer en SC, tester la valeur de verrou, si verrou
= 0, verrou 1, entrer en SC
Dfaillance: 2 processus peuvent entrer simultanment
dans leurs sections critiques comme le spouler
dimpression
Alternance Stricte
la variable turn porte le numro du processus dont cest le
tour dentrer en SC. Chaque processus inspecte la valeur
de la variable, avant dentrer en SC.
Inconvnient: consomme bcp de temps CPU
16
Exclusion Mutuelle avec Attente Active
(busy waiting)
Alternance Stricte
while (TRUE) { while (TRUE) {
while (turn != 0); while (turn != 1);
critical_region(); critical_region();
turn = 1; turn = 0;
non_critical_region(); non_critical_region();
} }
Les attentes actives sont performantes dans le cas o elles
sont brves. En effet, il y a risque dattente
P0 quitte la CS, turn = 1
P1 termine sa CS, turn = 0
Les 2 processus sont en section non critique
P0 excute sa boucle, quitte la SC et turn = 1
Les 2 processus sont en section non critique
P0 quoiquil a termin, il ne peut pas entrer en SC, il est
bloqu
17
Une leon retenir
fin que des processus avec des variables
partages puissent russir, il est ncessaire
que tous les processus impliqus utilisent le
mme algorithme de coordination
Un protocole commun
18
Critique des solutions par logiciel
Sur un uniprocesseur:
exclusion mutuelle est
prserve mais
lefficacit se dtriore: Process Pi:
lorsque dans SC il est repeat
impossible dentrelacer
lexcution avec dautres
inhiber interrupt
processus dans une SR section critique
Perte dinterruptions rtablir interrupt
Sur un multiprocesseur: section restante
exclusion mutuelle nest forever
pas prserve
Une solution qui nest
gnralement pas
acceptable
20
Solutions bases sur des instructions
fournies par le SE (appels du systme)
21
Smaphores
Un smaphore S est un entier qui, sauf pour
l'Initialisation, est accessible seulement par ces 2
oprations atomiques et mutuellement exclusives:
wait(S)
signal(S)
Il est partag entre tous les procs qui s`intressent
la mme section critique
Les smaphores seront prsents en deux tapes:
smaphores qui sont occups attendre (busy
waiting)
smaphores qui utilisent des files d attente
On fait distinction aussi entre smaphores compteurs et
smaphores binaires, mais ce derniers sont moins
puissants.
22
Smaphores occups attendre
(busy waiting)
La faon la plus simple
dimplanter les smaphores. wait(S):
Utiles pour des situations o while S<=0 {};
lattente est brve, ou il y a S--;
beaucoup dUCTs
S est un entier initialis une
Attend si no. de processus qui
valeur positive, de faon que
un premier processus puisse peuvent entrer = 0 ou ngatif
entrer dans la SC
Quand S>0, jusqu n
processus peuvent entrer
Quand S<=0, il faut attendre signal(S):
S+1 signals (dautres S++;
processus) pour entrer
24
Atomicit et interruptibilit
SC
interruptible S++ autre Pro.
V
S <= 0
F
atomique S--
SC
La boucle nest pas atomique pour permettre un autre processus
dinterrompre lattente sortant de la SC
25
Utilisation des smaphores pour sections critiques
Pour n processus
processus Ti:
Initialiser S 1
repeat
Alors 1 seul processus wait(S);
peut tre dans sa SC SC
Pour permettre k signal(S);
processus dexcuter SR
SC, initialiser S k forever
26
Initialise S >=1
On a 2 processus : Synchronisation
T1 et T2 correcte lorsque T1
nonc S1 dans T1 contient:
doit tre excut S1;
avant nonc S2 signal(S);
dans T2
Dfinissons un et que T2 contient:
smaphore S wait(S);
Initialiser S 0 S2;
28
Interblocage et famine avec
les smaphores
Famine: un processus peut ne jamais arriver
sexcuter car il ne teste jamais le
smaphore au bon moment
Interblocage: Supposons S et Q initialiss 1
T0 T1
wait(S)
wait(Q)
wait(Q) wait(S)
29
Smaphores: observations
wait(S):
Quand S >= 0: while S<=0 {};
S--;
Le nombre de processus qui peuvent
excuter wait(S) sans devenir bloqus= S
S processus peuvent entrer dans la SC
noter puissance par rapport mcanismes dj vus
dans les solutions o S peut tre >1il faudra avoir un
2me sm. pour les faire entrer un la fois (excl.
mutuelle)
Quand S devient > 1, le processus qui entre
le premier dans la SC est le premier tester
S (choix alatoire)
ceci ne sera plus vrai dans la solution
suivante
Quand S < 0: le nombre de processus qui
attendent sur S est = |S| 30
Comment viter lattente occupe et le
choix alatoire dans les smaphores
Quand un processus doit attendre quun
smaphore devienne plus grand que 0, il est
mis dans une file dattente de processus qui
attendent sur le mme smaphore.
Les files peuvent tre PAPS (FIFO), avec
priorits, etc. Le SE contrle l`ordre dans
lequel les processus entrent dans leur SC.
wait et signal sont des appels au SE comme
les appels des oprations dE/S.
Il y a une file dattente pour chaque
smaphore comme il y a une file dattente
pour chaque unit dE/S.
31
Smaphores sans attente
occupe
Un smaphore S devient une structure de donnes:
Une valeur
Une liste dattente L
Un processus devant attendre un smaphore S, est
bloqu et ajout la file dattente S.L du smaphore (v. tat
bloqu = attente chap 4).
32
Implementation
(les botes rprsentent des squences non-
non-interruptibles)
34
Problmes classiques de
synchronisation
35
Le pb du producteur - consommateur
36
Tampons de communication
Prod Prod
Cons Cons
in: 1re
b[0] b[1] pos. libre b[0] b[1] b[2] b[3] b[4] b[5] b[6] b[7]
b[7] b[2]
b[6] b[3] ou
in: 1re out: 1re
b[5] b[4] pos. libre pos.
pleine
out: 1re bleu: plein, blanc: libre
pos. pleine
38
Problme de synchronisation entre
processus pour le tampon born
39
Smaphores: rappel.
Soit S un smaphore sur une SC
il est associ une file d attente
S positif: S processus peuvent entrer dans SC
S zro: aucun processus ne peut entrer, aucun processus en
attente
S ngatif: |S| processus dans file d attente
Wait(S): S - -
si aprs S >= 0, processus peut entrer dans SC
si S < 0, processus est mis dans file d attente
Signal(S): S++
si aprs S<= 0, il y avait des processus en attente, et un
processus est rveill
Indivisibilit = atomicit de ces ops
40
Solution avec smaphores
Un smaphore S pour exclusion mutuelle
sur laccs au tampon
Les smaphores suivants ne font pas lEM
Un smaphore N pour synchroniser
producteur et consommateur sur le
nombre dlments consommables dans le
tampon
Un smaphore E pour synchroniser
producteur et consommateur sur le
nombre despaces libres
41
Solution de P/C: tampon circulaire fini de dimension k
Sections critiques 42
Points importants tudier
43
Problme des lecteurs - rdacteurs
44
Une solution (nexclut pas la famine)
Variable readcount: nombre de processus lisant la base
de donnes
Smaphore mutex: protge la SC o readcount est mis
jour
Smaphore wrt: exclusion mutuelle entre rdacteurs et
lecteurs
Les rdacteurs doivent attendre sur wrt
les uns pour les autres
et aussi la fin de toutes les lectures
Les lecteurs doivent
attendre sur wrt quand il y a des rdacteurs qui
crivent
bloquer les rdacteurs sur wrt quand il y a des
lecteurs qui lisent
redmarrer les rdacteurs quand personne ne lit45
Les donnes et les rdacteurs
Rdacteur
wait(wrt);
. . .
// criture
. . .
signal(wrt);
46
Les lecteurs
wait(mutex);
readcount ++ ;
if readcount == 1 then wait(wrt);
signal(mutex);
Le premier lecteur d un groupe pourrait
devoir attendre sur wrt, il doit aussi
bloquer les rdacteurs. Quand il sera
//SC: lecture entr, les suivants pourront entrer
librement
wait(mutex);
readcount -- ;
if readcount == 0 then signal(wrt);
signal(mutex):
48
Le problme des philosophes mangeant
5 philosophes qui
mangent et pensent
Pour manger il faut 2
fourchettes, droite et
gauche
On en a seulement 5!
Un problme classique
de synchronisation
Illustre la difficult
dallouer ressources aux
processus tout en vitant
interblocage et famine
49
Le problme des philosophes mangeant
Un processus par
philosophe
Un smaphore par processus Pi:
fourchette: repeat
fork: array[0..4] of think;
semaphores wait(fork[i]);
wait(fork[i+1 mod 5]);
Initialisation: fork[i ] =1
eat;
for i:=0..4
signal(fork[i+1 mod 5]);
Premire tentative: signal(fork[i]);
interblocage si chacun forever
dbute en prenant sa
fourchette gauche!
Wait(fork[i])
50
Le problme des philosophes mangeant
51
Avantage des smaphores
(par rapport aux solutions prcdentes)
52
Problme avec smaphores:
difficult de programmation
54