Documente Academic
Documente Profesional
Documente Cultură
Chapitre 02
2010
[www.wassimyoussef.info]
Synchronisation des
processus
1.
2.
3.
Introduction
Sections critiques et exclusion mutuelle
Exclusion mutuelle par attente active
Le masquage des interruptions
Les variables de verrouillage
Lalternance stricte
La solution de Peterson
1.
2.
3.
4.
4.
a.
b.
a.
c.
Exercices
Les moniteurs
Introduction
3
f2
f1
Processus B
f0
Rpertoire de spoule
Schma dexcution:
A : lire in,
next_free_slot = 3
Interruption: la CPU bascule vers le
processus B
B : lire in,
next_free_slot = 3,
entre3 = fichierB,
in = 4
A : entre3 = fichierA,
in = 4
Solution: Lexclusion mutuelle est une mthode qui assure quun seul
processus est autoris daccder une ressource partage; les autres
processus seront exclus de la mme activit.
A quitte sa section
critique
B quitte sa section
critique
B
t1
B tente dentrer dans sa
section critique
t2
t3
t4
B entre dans sa section
critique
M1- ISI 2010
Synchronisation des
processus
1.
2.
3.
Introduction
Sections critiques et exclusion mutuelle
Exclusion mutuelle par attente active
Le masquage des interruptions
Les variables de verrouillage
Lalternance stricte
La solution de Peterson
1.
2.
3.
4.
4.
a.
b.
a.
c.
Exercices
Les moniteurs
interruptions.
10
Void quitter_Section_Critique ()
{
verrou=0 ;
}
Cette solution ne garantie pas lexclusion mutuelle car le verrou est une
variable partage qui peut constituer aussi une section critique.
11
Void quitter_Section_Critique ()
{
Tour = (Tour+1) %N ;
}
12
Void quitter_Section_Critique ()
{
(4) interesse[process]=FAUX ;
}
Synchronisation des
processus
13
13
1.
2.
3.
Introduction
Sections critiques et exclusion mutuelle
Exclusion mutuelle par attente active
Le masquage des interruptions
Les variables de verrouillage
Lalternance stricte
La solution de Peterson
1.
2.
3.
4.
4.
a.
b.
a.
c.
Exercices
Les moniteurs
Lide est quun processus qui ne peut pas entrer en section critique
passe ltat bloqu au lieu de consommer le temps processeur
inutilement. Il sera rveill lorsquil pourra y entrer.
f2
f1
Variable partage
compteur=3
f0
Tampon
Consommateur
void consommateur () {
while (TRUE)
{
if (compteur == 0) sleep() ;
retirer_objet()
compteur = compteur 1 ;
if (compteur == N-1)
wakeup (producteur) ;
consommer_objet() ;
}
}
Les smaphores
18
Les smaphores
19
Les smaphores
20
Rappel
Producteur/Consommateur avec smaphores
#define N 100
semaphore mutex 1 ;
semaphore vide N;
Semaphore plein 0;
//
//
//
//
21
taille du tampon
contrle daccs section critique
contrle les emplacements vide
contrle les emplacements plein
void producteur () {
while (TRUE){
produire_objet() ;
down(vide);
down(mutex);
mettre_objet() ; //SC
up(mutex);
up(plein)
void consommateur () {
while (TRUE){
down(plein);
down(mutex);
retirer_objet() //SC
up(mutex);
up(vide);
consommer_objet() ;
}
}
}
Synchronisation des
processus - Exercices
22
1.
2.
3.
4.
Exercice 1
23
Dure
dexcution
P0
0 ms
23 ms
P1
1 ms
17 ms
P2
2 ms
15 ms
Date dentre en
section critique t=
Prt linstant
t=
Dure dexcution en
section critique
P0
0 ms
12 ms
P0
23 ms
3 ms
P1
1 ms
10 ms
P1
17 ms
7 ms
P2
2 ms
P2
15 ms
Q1
P0
Prt linstant
t=
Dure
dexcution
P1
P0
0 ms
23 ms
P2
P1
1 ms
17 ms
P2
2 ms
15 ms
10
40
45
50
15
52
20
25
30
35
40
55
Q2
Round robin ( tourniquet) avec q=5ms
Peterson Attente active
SC AA
P0
Prt linstant
t=
Dure
dexcution
Date dentre en
section critique t=
Dure dexcution en
section critique
P1
P0
0 ms
23 ms
3 ms
12 ms
P2
P1
1 ms
17 ms
7 ms
10 ms
P2
2 ms
15 ms
10
15
40
45
50
55
20
25
30
35
40
58
Q3
P0
Prt linstant
t=
Dure
dexcution
Date dentre en
section critique t=
Dure dexcution en
section critique
P1
P0
0 ms
23 ms
3 ms
12 ms
P2
P1
1 ms
17 ms
7 ms
10 ms
P2
2 ms
15 ms
40
42
10
47
15
52
20
22
27
32
37
40
55
Peterson NN-processus
#define FALSE 0
#define N 10 /* First process is indicated with 1, not 0 */
int turn[N+1];
int stage[N + 1];
void enterRegion(int process)
void leaveRegion(int process)
{
{
int i, j;
stage[process] = FALSE;
for (i = 1; i <= N - 1; i++) {
stage[process] = i;
}
turn[i] = process;
for (j = 1; j <= N; j++) {
if (j == process)
continue;
while (stage[j] >= i && turn[i] == process) ;
}
}
}
FAIRE TOURNER POUR PROCESS=1 et PROCESS=2 !!!!!!
Dr. Mohamed Wassim Youssef Systmes dexploitation volus
Lecteurs/Rdacteur
28
rdacteur
Base de donnes
Lecteurs/Rdacteur
29
Semaphore mutex 1
Semaphore db 1
int nb_lect = 0 ;
//lecteur
void lecture(){
while (true) {
//
//
//
//
//
//redacteur
void ecriture(){
while (true) {
crer_donnes ();
lire_la_BD();
//accs la BD
ecrire_dans_la_BD
utiliser_donnes ();
}
//Section restante
}
}
Dr. Mohamed Wassim Youssef Systmes dexploitation volus
Lecteurs/Rdacteur
30
Semaphore mutex 1
Semaphore db 1
int nb_lect = 0 ;
//lecteur
void lecture(){
while (true) {
//
//
//
//
//
down (mutex);
// la modif de la var. partage nb_lect est une
nb_lect ++;
// section critique entre lecteurs
if (nb_lect == 1) down (db);
//si le premier lecteur
up(mutex);
// libre laccs exclusif nb_lect
lire_la_BD();
//accs la BD
down(mutex);
nb_lect --;
if (nb_lect == 0) up (db);
//si le dernier lecteur
up (mutex)
utiliser_donnes (); //Section restante
}
}
Dr. Mohamed Wassim Youssef Systmes dexploitation volus
Lecteurs/Rdacteur
31
Semaphore mutex 1
Semaphore db 1
int nb_lect = 0 ;
//redacteur
void ecriture(){
while (true) {
crer_donnes ();
//
//
//
//
//
down (db);
ecrire_dans_la_BD();
up (db);
//accs la BD
}
}
Coiffeur endormi
32
Coiffeur endormi
33
Semaphore Mutex 1;
//accs exclusif la zone critique
Semaphore Coiffeurs 0;
//bloque le client si
//autre client
Int Attente = 0 ;
//Le nombre de clients en attente
Coiffeur endormi
34
Semaphore Clients 0;
Semaphore Mutex 1;
Semaphore Coiffeurs 0;
Int Attente = 0 ;
//Coiffeur
void coiffeur() {
while(1){
//Client
void client() {
if (
) {
Attente = attente + 1
Attente = attente 1;
Obtenir_coupe
}
Couper_cheveux();
else {
}
}
}
}
Coiffeur endormi
35
Semaphore Clients 0;
Semaphore Mutex 1;
Semaphore Coiffeurs 0;
Int Attente = 0 ;
//Client
void client() {
down(Mutex)
//Coiffeur
void coiffeur() {
while(1){
down(Clients);
down(Mutex);
Attente = attente 1;
//rveiller un client
//dans la salle
up(Coiffeurs);
up(Mutex);
Couper_cheveux();
}
}
else {
up(Mutex) //le client part si
pas de chaise
}
}
Rflchissons !
36
Semaphore S1 0
Semaphore S2 0
P1 {
procedure A1 ;
Up(S2) ;
Down(S1) ;
procedure B1 ;
}
P2 {
procedure A2 ;
Up(S1) ;
Down(S2) ;
procedure B2 ;
}
Barrire de synchronisation
37
Semaphore S1 0
Semaphore S2 0
P1 {
procedure A1 ;
Up(S2) ;
Down(S1) ;
procedure B1 ;
}
P2 {
procedure A2 ;
Up(S1) ;
Down(S2) ;
procedure B2 ;
}
38
39
smaphore mutex = 1, B= 0;
int compteur = 0; /* nbre de processus arrivs au rendez-vous */
Procdure RDV
Dbut
Procedure A
down(mutex);
compteur ++;
if(compteur< N) /* non tous arrivs */
{ up(mutex); /* on libre mutex et */
down(B); /* on se bloque */
}else
{up(mutex); /* le dernier arriv libre mutex et */
for(i = 1 ;i< N-1 ;i++) up(B); /* rveille les N-1 bloqus, dans l'ordre
d'arrive */
}
Procedure B;
Fin
Dr. Mohamed Wassim Youssef Systmes dexploitation volus