SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
Synchronisation des Processus
Sections critiques, Sémaphores
Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 1
Systèmes d’Exploitation
2ème Année (GL-RT-IIA-IMI)
Présentation
• Sur une plateforme multiprogrammée, les processus ont généralement
besoin de communiquer pour compléter leurs tâches.
• Un processus est dit indépendant, s’il n’affecte pas les autres processus ou
ne peut pas être affecté par eux.
§ Un processus qui ne partage pas de données avec d’autres processus est
indépendant.
• Un processus est dit coopératif s’il peut affecter les autres processus en
cours d’exécution ou être affecté par eux.
§ Un processus qui partage des données avec d’autres processus est un
processus coopératif.
• Les données partagées par les processus coopératifs se trouvent en
mémoire principale ou en mémoire secondaire dans un fichier
§ Il y a alors risque d’incohérence des données.
Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 2
Synchronisation des Processus
Présentation
• L’exécution d’un processus peut être affectée par l’exécution des
autres processus ou il peut affecter lui-même leurs exécutions
• La communication interprocessus est assurée généralement via des
données partagées qui peuvent se trouver dans la mémoire principale
ou dans un fichier.
§ Les accès concurrents (simultanés) à des données partagées peuvent
conduire à des incohérences dans les résultats obtenus.
Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 3
Synchronisation des Processus
Exemple Illustratif
Exemple : la spoule d’impression
Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 4
Synchronisation des Processus
Processus A
Processus B
… 3 2 1 0
f1f2… f0 Répertoire de spoule
Démon d’impression
Variable partagée in=3
Schéma d’exécution:
A : lire in,
next_free_slot = 3
Préemption: la CPU bascule vers le processus B
B : lire in,
next_free_slot = 3,
entrée3 = fichierB,
in = 4
Problème: le fichierB ne sera jamais imprimé
A : entrée3 = fichierA,
in = 4
lire in,
next_free_slot = in
Entrée[next_free_slot] = fichier
in = in +1
Sections Critiques et Exclusion Mutuelle
• Le problème précédent est dû aux conflits d’accès à la même
ressource.
• La partie du programme à partir de laquelle on accède à la ressource
partagée est appelée section (région) critique.
• Solution:
§ L’exclusion mutuelle est une méthode qui assure qu’un seul processus est
autorisé d’accéder à une ressource partagée; les autres processus seront
exclus de la même activité.
Slide 5
Synchronisation des Processus
A
B
t1 t2 t3 t4
A entre dans sa section critique
B tente d’entrer dans sa section
critique
A quitte sa section critique
B entre dans sa section critique
B quitte sa section critique
Dr. Ghada GASMI- Dr. Lilia SFAXI
Sections critiques et exclusion mutuelle
• Quatre conditions doivent être vérifiées pour assurer une bonne
synchronisation des processus :
1. Exclusion Mutuelle: Deux processus ne doivent pas se trouver
simultanément dans leurs sections critiques.
2. Progression : Aucun processus à l’extérieur de sa section critique ne
doit bloquer les autres processus.
3. Attente bornée : Aucun processus ne doit attendre indéfiniment
pour entrer dans sa section critique.
4. Aucune hypothèse : Il ne faut pas faire d’hypothèse quant à la
vitesse ou le nombre de processeurs
Synchronisation des Processus
Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 6
EXCLUSION MUTUELLE PAR ATTENTE ACTIVE
Synchronisation des Processus
Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 7
Approche de Synchronisation
• Un processus désirant entrer dans une section critique doit être mis en
attente jusqu’a ce que la section critique devienne libre.
• Un processus quittant la section critique doit le signaler aux autres
processus.
• L’attente peut être :
§ Active : la procédure Entrer_Section_Critique est une boucle dont la condition est
un test qui porte sur des variables indiquant la présence ou non d’un processus
en Section critique.
§ Non active : le processus passe dans l’état endormi et ne sera réveillé que
lorsqu’il sera autorisé à entrer en section critique.
Slide 8
Exclusion Mutuelle par Attente Active
Algorithme d’accès à une section critique :
Entrer_Section_Critique () /* attente si SC non libre */
Section_Critique() /* un seul processus en SC */
Quitter_Section_Critique()
Dr. Ghada GASMI- Dr. Lilia SFAXI
Solutions de l’Exclusion Mutuelle par Attente Active
• Solution 1: Masquage des interruptions
§ Lorsqu’un processus entre en section critique il doit masquer
les interruptions.
§ Pas de commutation de contexte
§ Lorsqu’ il quitte sa section critique il doit restaurer les
interruptions.
§ C’est une solution matérielle qui permet de résoudre
complètement le problème. Mais elle est dangereuse en mode
utilisateur s’il oublie de restaurer les interruptions.
Slide 9
Exclusion Mutuelle par Attente Active
Dr. Ghada GASMI- Dr. Lilia SFAXI
Solutions de l’Exclusion Mutuelle par Attente Active
• Solution 2: Variable de verrouillage
§ Un verrou est variable binaire partagée qui indique la présence d’un
processus en section critique.
o si verrou=0 alors section critique libre
o si verrou=1 alors section critique occupée
§ Cette solution ne garantit pas l’exclusion mutuelle car le verrou est une
variable partagée qui peut constituer aussi une section critique.
Slide 10
Exclusion Mutuelle par Attente Active
void entrer_Section_Critique ()
{
while (verrou == 1) ; /* attente active */
verrou=1 ;
}
void quitter_Section_Critique ()
{
verrou=0 ;
}
Dr. Ghada GASMI- Dr. Lilia SFAXI
Solutions de l’Exclusion Mutuelle par Attente Active
• Solution 2-bis : Variable de verrou en matériel: TSL (Test and Set Lock)
§ Aussi appelée TAS pour Test And Set.
§ Est une instruction indivisible: réalisée une seule fois par le matériel.
o (1) Lit le contenu de LOCK dans REGISTRE //(1) et (2) sont indivisibles
o (2) Ecrit 1 dans adresse mémoire LOCK // (TSL instruction atomique)
Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 11
Exclusion Mutuelle par Attente Active
|pseudo-assembleur
entrer_Section_Critique:
TSL REGISTER, LOCK | copie lock dans reg et la définit à 1
CMP REGISTER, #0 | lock etait-elle à 0
JNE entrer_SC | si elle était pas à 0, boucle
RET | retourne à appelant, entre dans SC
quitter_Section_Critique:
MOVE LOCK, #0 | stocke un 0 dans lock
RET | retourne à l’appelant
TSL REGISTER, LOCK
Solutions de l’Exclusion Mutuelle par Attente Active
• Solution 3: Alternance stricte
§ Tour est une variable partagée qui indique le numéro de processus autorisé
à entrer en section critique.
§ L’alternance stricte est une solution simple et facile a implémenter.
§ Mais, un processus qui possède Tour peut ne pas être intéressé
immédiatement par la section critique et en même temps il bloque un autre
processus qui la demande.
§ Problème de Progression
Slide 12
Exclusion Mutuelle par Attente Active
void entrer_Section_Critique (int process)
{
while (Tour!=process) ; /* attente active */
}
void quitter_Section_Critique ()
{
Tour = (Tour+1) %N ;
}
Dr. Ghada GASMI- Dr. Lilia SFAXI
Solutions de l’Exclusion Mutuelle par Attente Active
• Solution 4: Alternance stricte v2
§ Interested est un tableau de booléens partagé ayant une case pour chaque
processus qui veut entrer en SC
§ Initialement, toutes les valeurs du tableau sont à false
§ Quand un processus exécute entrer_SC:
o Il met sa variable interested à true
o Il attend si l’autre processus est intéressé
§ Problème d’interblocage
o Excès de courtoisie!
Slide 13
Exclusion Mutuelle par Attente Active
void entrer_Section_Critique (int process)
{
interested[process] = true;
while (interested[1-process]) ; /* attente active */
}
void quitter_Section_Critique (int process)
{
interested[process]= false;
}
Dr. Ghada GASMI- Dr. Lilia SFAXI
Solutions de l’Exclusion Mutuelle par Attente Active
• Solution 5: Alternance stricte v2
§ Cette solution combine les deux version de l’alternance stricte
§ Cette solution assure les quatre conditions de bonne synchronisation.
§ Mais, le processus qui attend sa section critique consomme du temps
processeur inutilement (attente active).
Slide 14
Exclusion Mutuelle par Attente Active
#define FAUX 0
#define VRAI 1
#define N 2
int tour ; /* à qui le tour */
int interesse[N] ; /* initialisé à FAUX */
void entrer_Section_Critique (int process)
{
int autre ;
(1) autre = 1-process ;
(2) interesse[process]=VRAI; /* process est intéressé */
(3) tour = process ; /* demander le tour */
while (tour == process && interesse[autre] == VRAI) ;
} (A) (B)
Void quitter_Section_Critique (int process)
{
(4) interesse[process]=FAUX ;
}
Dr. Ghada GASMI- Dr. Lilia SFAXI
Peterson N-processus
#define FALSE 0
#define N 10 /* First process is indicated with 1, not 0 */
int turn[N];
int stage[N + 1];
void enterRegion(int process)
{
int i, j;
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) ;
}
}
}
Exclusion Mutuelle par Attente Active
void leaveRegion(int
process)
{
stage[process] = FALSE;
}
Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 15
EXCLUSION MUTUELLE SANS ATTENTE ACTIVE
Synchronisation des Processus
Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 16
Exclusion mutuelle sans attente active
• L’idée est qu’un processus qui ne peut pas entrer en section critique
passe à l’état bloqué au lieu de consommer le temps processeur
inutilement. Il sera réveillé lorsqu’il pourra y entrer.
• Les primitives Sleep et Wakeup:
§ Le système d’exploitation offre deux appels système:
1. Sleep (dormir) qui bloque le processus appelant.
2. Wakeup (réveiller) qui réveille le processus donné en argument.
Slide 17
Exclusion Mutuelle Sans Attente Active
Dr. Ghada GASMI- Dr. Lilia SFAXI
Producteur-Consommateur
• Application des primitives Sleep et Wakeup au modèle Producteur
Consommateur:
• Deux processus (le producteur et le consommateur) coopèrent en
partageant un même tampon:
• Le producteur produit des objets qu’il dépose dans le tampon.
• Le consommateur retire des objets du tampon pour les consommer.
Slide 18
Exclusion Mutuelle Sans Attente Active
Producteur
f1f2… f0 Tampon
Variable partagée compteur=3 Consommateur
Dr. Ghada GASMI- Dr. Lilia SFAXI
Producteur-Consommateur
Slide 19
Exclusion Mutuelle Sans Attente Active
#define N 100 /* taille du tampon */
int compteur = 0 ; /* objets dans tampon */
void producteur () {
while (TRUE)
{
produire_objet() ;
if (compteur == N) sleep () ;
mettre_objet() ;
compteur = compteur + 1 ;
if (compteur == 1)
wakeup(consommateur) ;
}
}
void consommateur () {
while (TRUE)
{
if (compteur == 0)
sleep() ;
retirer_objet()
compteur = compteur – 1 ;
if (compteur == N-1)
wakeup (producteur) ;
consommer_objet(…) ;
}
}
Dr. Ghada GASMI- Dr. Lilia SFAXI
Producteur-Consommateur
• Analyse de cette solution :
§ L’accès à la variable compteur n’est pas protégé, ce qui peut
entraîner des incohérences dans les valeurs prises par cette
variable.
§ Réveils perdus :
o c’est le principal défaut de ce mécanisme
o Un signal wakeup envoyé à un processus qui ne dort pas (encore)
est perdu.
‣ Considérer le scénario où une préemption a lieu entre le if et le sleep
du producteur, par exemple.
Slide 20
Exclusion Mutuelle Sans Attente Active
Dr. Ghada GASMI- Dr. Lilia SFAXI
Sémaphores
• Pour remédier au problème es réveils en attente (les wakeup perdus),
l’idée est d’employé une variable entière appelée: Sémaphore à laquelle
est associée une file d’attente des processus bloqués.
§ sémaphore=0 à aucun réveil n’est mémorisé
§ sémaphore>0 à un ou plusieurs réveils sont en attente
• Un sémaphore s est manipulé par les opérations atomiques suivantes:
1. down(s) :
o if (val(s)==0) sleep();
o val(s)--;
2. up(s) :
o wakeup();
o s++;
Slide 21
Exclusion Mutuelle Sans Attente Active
Dr. Ghada GASMI- Dr. Lilia SFAXI
Sémaphores
• Pour assurer l’exclusion mutuelle un sémaphore peut être programmé
de la manière suivante :
Slide 22
Exclusion Mutuelle Sans Attente Active
initialisation mutex = 1 /* nombre de processus autorisés à entrer
simultanément dans la section critique */
down (mutex)
<section_critique>
up (mutex)
Nom du sémaphore
Dr. Ghada GASMI- Dr. Lilia SFAXI
Sémaphores
• Application au modèle Producteur / Consommateur :
• Trois sémaphores sont nécessaires:
§ plein: compte le nombre de places occupées
§ vide : compte le nombre de places libres
§ mutex : assure que le producteur et le consommateur n'accèdent jamais en
même moment à la mémoire tampon.
Slide 23
Exclusion Mutuelle Sans Attente Active
Dr. Ghada GASMI- Dr. Lilia SFAXI
Producteur/Consommateur avec Sémaphores
#define N 100 // taille du tampon
semaphore mutex 1 ; // contrôle d’accès section critique
semaphore vide N; // contrôle les emplacements vide
semaphore plein 0; // contrôle les emplacements plein
Slide 24
Exclusion Mutuelle Sans Attente Active
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(…) ;
}
}
Dr. Ghada GASMI- Dr. Lilia SFAXI
EXERCICES
Synchronisation des Processus
Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 25
Ex1: Synchronisation et Ordonnancement
• Q1 : Round robin ( tourniquet) avec q=5ms
• Q2 : Round robin ( tourniquet) avec q=5ms +
Synchronisation Peterson
Slide 26
Exercices
Prêt à
l’instant t=
Durée
d’exécution
P0 0 ms 23 ms
P1 1 ms 17 ms
P2 2 ms 15 ms
Durée
d’exécution
SR+SC
Date d’entrée en
section critique t=
P0 23 ms 3 ms
P1 17 ms 7 ms
P2 15 ms X
Prêt à
l’instant t=
Durée d’exécution en
section critique
P0 0 ms 13ms
P1 1 ms 10 ms
P2 2 ms X
Dr. Ghada GASMI- Dr. Lilia SFAXI
Prêt à
l’instant t=
Durée
d’exécution
P0 0 ms 23 ms
P1 1 ms 17 ms
P2 2 ms 15 ms
0 5
P0
P1
P2
10 15 20 25 30 35 40
40 45 50 52 55
Ex1: Synchronisation et Ordonnancement
• Round robin ( tourniquet) avec q=5ms
Exercices
Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 27
0
P0
P1
P2
10 15 30
40 45 50 58
Prêt à
l’instant t=
Durée
d’exécution
Date d’entrée en
section critique t=
Durée d’exécution en
section critique
P0 0 ms 23 ms 3 ms 12 ms
P1 1 ms 17 ms 7 ms 10 ms
P2 2 ms 15 ms X X
SC AA
5 20 25 35 40
55
Ex1: Synchronisation et Ordonnancement
• Round robin ( tourniquet) avec q=5ms
• Peterson è Attente active
Exercices
Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 28
Ex1: Synchronisation et Ordonnancement
• Round robin ( tourniquet) avec q=5ms
• Sommeil et activation
Exercices
0 5
P0
P1
P2
10 15 20 22 27 32 37
40 42 47 5552
Prêt à
l’instant t=
Durée
d’exécution
Date d’entrée en
section critique t=
Durée d’exécution en
section critique
P0 0 ms 23 ms 3 ms 12 ms
P1 1 ms 17 ms 7 ms 10 ms
P2 2 ms 15 ms X X
SC
40
Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 29
Ex2: Lecteurs/Rédacteur
• Une base de données peut être accessible par un seul rédacteur ou N
lecteurs en même temps
§ Exclusion mutuelle entre le rédacteur et les N lecteurs
§ Donner le pseudo code d’un processus lecteur et celui du processus
rédacteur
Slide 30
Exercices
Base	de	données
Dr. Ghada GASMI- Dr. Lilia SFAXI
Ex2: Lecteurs/Rédacteur
Semaphore mutex 1 // contrôle l’accés à nb_lect
Semaphore db 1 // contrôle l’accés à la base de données
int nb_lect = 0 ; // var partagées entre lecteurs pour compter le nombre de lecteurs
// accédant actuellement à la BD
//lecteur
void lecture(){
while (true) { //boucle sans fin
lire_la_BD(); //accés à la BD
utiliser_données (); //Section restante
}
}
//redacteur
void ecriture(){
while (true) {
créer_données ();
ecrire_dans_la_BD
}
}
Slide 31
Exercices
Dr. Ghada GASMI- Dr. Lilia SFAXI
Ex2: Lecteurs/Rédacteur
Semaphore mutex 1 // contrôle l’accés à nb_lect
Semaphore db 1 // contrôle l’accés à la base de données
int nb_lect = 0 ; // var partagées entre lecteurs pour
// compter le nombre de lecteurs accédant
// actuellement à la BD
//lecteur
void lecture(){
while (true) { //boucle sans fin
down (mutex); // la modif de la var. partagée nb_lect
nb_lect ++; // est une section critique entre lecteurs
if (nb_lect == 1) down (db); //si le premier lecteur
up(mutex); // libère l’accés exclusif à nb_lect
lire_la_BD(); //accés à la BD
down(mutex);
nb_lect --;
if (nb_lect == 0) up (db); //si le dernier lecteur
up (mutex)
utiliser_données (); //Section restante
}
}
Slide 32
Exercices
void ecriture(){
while (true) { //boucle sans fin
créer_données (); //Sec.Rest.
down (db);
ecrire_dans_la_BD(); //accés BD
up (db);
}
}
Dr. Ghada GASMI- Dr. Lilia SFAXI
Ex3: Coiffeur endormi
• Un coiffeur possède un salon avec un siège de coiffeur et une salle
d’attente comportant un nombre fixe F de fauteuils.
• S’il n’y a pas de client, le coiffeur se repose sur son siège de coiffeur.
• Si un client arrive et trouve le coiffeur endormi, il le réveille, s’assoit
sur le siège du coiffeur et attend la fin de sa coupe de cheveux.
• Si le coiffeur est occupé lorsqu’un client arrive, le client s’assoit et
s’endort sur une des chaises de la salle d’attente ; si la salle d’attente
est pleine, le client rentre chez lui.
• Lorsque le coiffeur a terminé une coupe de cheveux, il fait sortir son
client courant et va réveiller un des clients de la salle d’attente.
• Si la salle d’attente est vide, il se rendort sur son siège jusqu’à ce
qu’un nouveau client arrive.
Slide 33
Exercices
Dr. Ghada GASMI- Dr. Lilia SFAXI
Ex3: Coiffeur endormi
• Résoudre le pb en évitant les conditions de concurrence
• Utilisation de 3 sémaphores et un compteur
§ Semaphore Clients 0;
o //bloque le coiffeur s’il n’y a pas de clients
§ Semaphore Mutex 1;
o //accés exclusif à la zone critique
§ Semaphore Coiffeurs 0;
o //bloque le client si le coiffeur est occupé avec un //autre client
§ Int Attente = 0 ;
o //Le nombre de clients en attente
Slide 34
Exercices
Dr. Ghada GASMI- Dr. Lilia SFAXI
Ex3: Coiffeur endormi
Semaphore Clients 0;
Semaphore Mutex 1;
Semaphore Coiffeurs 0;
Int Attente = 0 ;
//Coiffeur
void coiffeur() {
while(1){
down(Clients);
down(Mutex);
Attente = attente – 1;
up(Coiffeurs);
up(Mutex);
Couper_cheveux();
}
}
Slide 35
Exercices
//Client
void client() {
down(Mutex)
if (Attente < Chaises) {
Attente = attente + 1
up(Clients)
up(Mutex)
down(Coiffeurs)
Obtenir_coupe
}
else{
up(Mutex)
}
}
Dr. Ghada GASMI- Dr. Lilia SFAXI
Réfléchissons !
• Soient les deux processus P1 et P2 suivants. Ils se partagent deux
sémaphores S1 et S2 initialisés à 0.
• Quelle synchronisation a-t-on imposée sur les exécutions des procédures
A1, A2, B1 et B2 (càd, quel ordre d’exécution) ?
Slide 36
Exercices
P2 {
procedure A2 ;
Up(S1) ;
Down(S2) ;
procedure B2 ;
}
Semaphore S1 0
Semaphore S2 0
P1 {
procedure A1 ;
Up(S2) ;
Down(S1) ;
procedure B1 ;
}
Dr. Ghada GASMI- Dr. Lilia SFAXI
Ex4: Barrière de synchronisation
• Les Ai s’exécutent toujours avant les Bi, quelque soit l’ordre de l’exécution des
processus P1 et P2
• Ex: Ecrire le code à fin d’imposer la même synchronisation pour N processus en
utilisant :
§ N sémaphores
§ 2 sémaphores et un compteur
Slide 37
Exercices
P2 {
procedure A2 ;
Up(S1) ;
Down(S2) ;
procedure B2 ;
}
Semaphore S1 0
Semaphore S2 0
P1 {
procedure A1 ;
Up(S2) ;
Down(S1) ;
procedure B1 ;
}
Dr. Ghada GASMI- Dr. Lilia SFAXI
Ex5: Dîner des Philosophes
• Cinq philosophes se trouvent autour d'une table ;
• Chacun des philosophes a devant lui un plat de spaghetti ;
• A gauche de chaque assiette se trouve une fourchette
• Un philosophe n'a que trois états possibles :
§ penser pendant un temps indéterminé ;
§ être affamé (pendant un temps déterminé et fini sinon il y a famine) ;
§ manger pendant un temps déterminé et fini.
• Des contraintes extérieures s'imposent à cette situation :
§ quand un philosophe a faim, il va se mettre dans l'état « affamé » et attendre que les
fourchettes soient libres ;
§ pour manger, un philosophe a besoin de deux fourchettes : celle qui se trouve à sa
droite, et celle qui se trouve à sa gauche ;
§ si un philosophe n'arrive pas à s'emparer d'une fourchette, il reste affamé pendant un
temps déterminé, en attendant de renouveler sa tentative.
• Le problème consiste à trouver un ordonnancement des philosophes tel qu'ils
puissent tous manger, chacun à leur tour, sans provoquer d’interblocage!
Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 38
Exercices
Ex5: Dîner des Philosophes
Const int N = 5; //nbr de
philosophes
Semaphore s[N]={0,0,0,0,0};
Semaphore Mutex=1;
int etat[N]= {PENSE,PENSE,…} ;
//Philosophe
void philosophe(int i) {
while(1){
penser();
prendre_fourchettes(i);
manger();
poser_fourchettes(i);
}
}
Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 39
Exercices
vo i d p re n d re _fo u rch ette s ( i n t i ) {
d ow n (m u tex) ;
et at [ i ] = FA I M ;
i f (et at [ i + 1 % N] = = M A NGE | | et at [ i - 1 % N] = = M A NGE ) {
u p (m u tex) ;
d ow n ( s [ i ]) ;
} e l s e {
et at [ i ] = M A NGE ;
u p (m u tex) ;
}
}
vo i d p o s e r_fo u rch ette s ( i n t i ) {
d ow n (m u tex) ;
i f (et at [ i + 1 % N] = = FA I M & & et at [ i + 2 % N] ! = M A NGE ) {
et at [ i + 1 % N] = M A NGE ;
u p ( s [ i + 1 % N ]) ;
}
i f (et at [ i - 1 % N] = = FA I M & & et at [ i - 2 % N] ! = M A NGE ) {
et at [ i - 1 % N] = M A NGE ;
u p ( s [ i - 1 % N]) ;
}
u p (m u tex) ;
}
Références
Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 40
• Wassim Youssef, Les systèmes d’exploitation, Cours ISI, 2015

Más contenido relacionado

La actualidad más candente

T1 corrections-qcm
T1 corrections-qcmT1 corrections-qcm
T1 corrections-qcminfcom
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfacesAmir Souissi
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-CorrectionLilia Sfaxi
 
gestion de magasin vente matériels informatique
gestion de magasin vente matériels informatiquegestion de magasin vente matériels informatique
gestion de magasin vente matériels informatiqueOussama Yoshiki
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLwebreaker
 
Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Heithem Abbes
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...ENSET, Université Hassan II Casablanca
 
diagramme de classe
diagramme de classediagramme de classe
diagramme de classeAmir Souissi
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfslimyaich3
 
Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesLilia Sfaxi
 
UML Part1-Introduction Mansouri
UML Part1-Introduction MansouriUML Part1-Introduction Mansouri
UML Part1-Introduction MansouriMansouri Khalifa
 
Systèmes d'Exploitation - chp4-gestion disque
Systèmes d'Exploitation - chp4-gestion disqueSystèmes d'Exploitation - chp4-gestion disque
Systèmes d'Exploitation - chp4-gestion disqueLilia Sfaxi
 
Présentation PFE (Conception et développement d'une application web && mobile...
Présentation PFE (Conception et développement d'une application web && mobile...Présentation PFE (Conception et développement d'une application web && mobile...
Présentation PFE (Conception et développement d'une application web && mobile...Ramzi Noumairi
 
UML Part 4- diagrammres de classes et d'objets mansouri
UML Part 4- diagrammres de classes et d'objets mansouriUML Part 4- diagrammres de classes et d'objets mansouri
UML Part 4- diagrammres de classes et d'objets mansouriMansouri Khalifa
 
Synchronisation sous systeme linux
Synchronisation sous systeme linuxSynchronisation sous systeme linux
Synchronisation sous systeme linuxFadwa Gmiden
 

La actualidad más candente (20)

T1 corrections-qcm
T1 corrections-qcmT1 corrections-qcm
T1 corrections-qcm
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfaces
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
 
gestion de magasin vente matériels informatique
gestion de magasin vente matériels informatiquegestion de magasin vente matériels informatique
gestion de magasin vente matériels informatique
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQL
 
Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 
diagramme de classe
diagramme de classediagramme de classe
diagramme de classe
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de Classes
 
Uml & cas d'utilisation
Uml & cas d'utilisationUml & cas d'utilisation
Uml & cas d'utilisation
 
UML Part1-Introduction Mansouri
UML Part1-Introduction MansouriUML Part1-Introduction Mansouri
UML Part1-Introduction Mansouri
 
Systèmes d'Exploitation - chp4-gestion disque
Systèmes d'Exploitation - chp4-gestion disqueSystèmes d'Exploitation - chp4-gestion disque
Systèmes d'Exploitation - chp4-gestion disque
 
QCM Sécurité Informatique
QCM Sécurité InformatiqueQCM Sécurité Informatique
QCM Sécurité Informatique
 
Présentation PFE (Conception et développement d'une application web && mobile...
Présentation PFE (Conception et développement d'une application web && mobile...Présentation PFE (Conception et développement d'une application web && mobile...
Présentation PFE (Conception et développement d'une application web && mobile...
 
Diagramme d'activité en UML
Diagramme d'activité en UMLDiagramme d'activité en UML
Diagramme d'activité en UML
 
UML Part 4- diagrammres de classes et d'objets mansouri
UML Part 4- diagrammres de classes et d'objets mansouriUML Part 4- diagrammres de classes et d'objets mansouri
UML Part 4- diagrammres de classes et d'objets mansouri
 
Synchronisation sous systeme linux
Synchronisation sous systeme linuxSynchronisation sous systeme linux
Synchronisation sous systeme linux
 

Destacado

Software Engineering - chp8- deployment
Software Engineering - chp8- deploymentSoftware Engineering - chp8- deployment
Software Engineering - chp8- deploymentLilia Sfaxi
 
eServices-Chp6: WOA
eServices-Chp6: WOAeServices-Chp6: WOA
eServices-Chp6: WOALilia Sfaxi
 
Software Engineering - chp7- tests
Software Engineering - chp7- testsSoftware Engineering - chp7- tests
Software Engineering - chp7- testsLilia Sfaxi
 
Software Engineering - chp0- introduction
Software Engineering - chp0- introductionSoftware Engineering - chp0- introduction
Software Engineering - chp0- introductionLilia Sfaxi
 
Software Engineering - chp4- design patterns
Software Engineering - chp4- design patternsSoftware Engineering - chp4- design patterns
Software Engineering - chp4- design patternsLilia Sfaxi
 
Software Engineering - chp5- software architecture
Software Engineering - chp5- software architectureSoftware Engineering - chp5- software architecture
Software Engineering - chp5- software architectureLilia Sfaxi
 
Software Engineering - chp3- design
Software Engineering - chp3- designSoftware Engineering - chp3- design
Software Engineering - chp3- designLilia Sfaxi
 
Mobile-Chp4 côté serveur
Mobile-Chp4 côté serveurMobile-Chp4 côté serveur
Mobile-Chp4 côté serveurLilia Sfaxi
 
Software Engineering - chp6- development phase
Software Engineering - chp6- development phaseSoftware Engineering - chp6- development phase
Software Engineering - chp6- development phaseLilia Sfaxi
 
eServices-Chp3: Composition de Services
eServices-Chp3: Composition de ServiceseServices-Chp3: Composition de Services
eServices-Chp3: Composition de ServicesLilia Sfaxi
 
Software Engineering - chp2- requirements specification
Software Engineering - chp2- requirements specificationSoftware Engineering - chp2- requirements specification
Software Engineering - chp2- requirements specificationLilia Sfaxi
 
Software Engineering - chp1- software dev methodologies
Software Engineering - chp1- software dev methodologiesSoftware Engineering - chp1- software dev methodologies
Software Engineering - chp1- software dev methodologiesLilia Sfaxi
 
eServices-Chp4: ESB
eServices-Chp4: ESBeServices-Chp4: ESB
eServices-Chp4: ESBLilia Sfaxi
 
eServices-Chp5: Microservices et API Management
eServices-Chp5: Microservices et API ManagementeServices-Chp5: Microservices et API Management
eServices-Chp5: Microservices et API ManagementLilia Sfaxi
 
BigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingBigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingLilia Sfaxi
 
Systèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionSystèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionLilia Sfaxi
 
Chp3 - Fonctionnement des ERP
Chp3 - Fonctionnement des ERPChp3 - Fonctionnement des ERP
Chp3 - Fonctionnement des ERPLilia Sfaxi
 
BigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherBigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherLilia Sfaxi
 
Chp1 - Introduction aux ERP
Chp1 - Introduction aux ERPChp1 - Introduction aux ERP
Chp1 - Introduction aux ERPLilia Sfaxi
 
Chp2 - Solutions ERP
Chp2 - Solutions ERPChp2 - Solutions ERP
Chp2 - Solutions ERPLilia Sfaxi
 

Destacado (20)

Software Engineering - chp8- deployment
Software Engineering - chp8- deploymentSoftware Engineering - chp8- deployment
Software Engineering - chp8- deployment
 
eServices-Chp6: WOA
eServices-Chp6: WOAeServices-Chp6: WOA
eServices-Chp6: WOA
 
Software Engineering - chp7- tests
Software Engineering - chp7- testsSoftware Engineering - chp7- tests
Software Engineering - chp7- tests
 
Software Engineering - chp0- introduction
Software Engineering - chp0- introductionSoftware Engineering - chp0- introduction
Software Engineering - chp0- introduction
 
Software Engineering - chp4- design patterns
Software Engineering - chp4- design patternsSoftware Engineering - chp4- design patterns
Software Engineering - chp4- design patterns
 
Software Engineering - chp5- software architecture
Software Engineering - chp5- software architectureSoftware Engineering - chp5- software architecture
Software Engineering - chp5- software architecture
 
Software Engineering - chp3- design
Software Engineering - chp3- designSoftware Engineering - chp3- design
Software Engineering - chp3- design
 
Mobile-Chp4 côté serveur
Mobile-Chp4 côté serveurMobile-Chp4 côté serveur
Mobile-Chp4 côté serveur
 
Software Engineering - chp6- development phase
Software Engineering - chp6- development phaseSoftware Engineering - chp6- development phase
Software Engineering - chp6- development phase
 
eServices-Chp3: Composition de Services
eServices-Chp3: Composition de ServiceseServices-Chp3: Composition de Services
eServices-Chp3: Composition de Services
 
Software Engineering - chp2- requirements specification
Software Engineering - chp2- requirements specificationSoftware Engineering - chp2- requirements specification
Software Engineering - chp2- requirements specification
 
Software Engineering - chp1- software dev methodologies
Software Engineering - chp1- software dev methodologiesSoftware Engineering - chp1- software dev methodologies
Software Engineering - chp1- software dev methodologies
 
eServices-Chp4: ESB
eServices-Chp4: ESBeServices-Chp4: ESB
eServices-Chp4: ESB
 
eServices-Chp5: Microservices et API Management
eServices-Chp5: Microservices et API ManagementeServices-Chp5: Microservices et API Management
eServices-Chp5: Microservices et API Management
 
BigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingBigData_Chp3: Data Processing
BigData_Chp3: Data Processing
 
Systèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionSystèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introduction
 
Chp3 - Fonctionnement des ERP
Chp3 - Fonctionnement des ERPChp3 - Fonctionnement des ERP
Chp3 - Fonctionnement des ERP
 
BigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherBigData_Chp5: Putting it all together
BigData_Chp5: Putting it all together
 
Chp1 - Introduction aux ERP
Chp1 - Introduction aux ERPChp1 - Introduction aux ERP
Chp1 - Introduction aux ERP
 
Chp2 - Solutions ERP
Chp2 - Solutions ERPChp2 - Solutions ERP
Chp2 - Solutions ERP
 

Más de Lilia Sfaxi

chp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfchp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfLilia Sfaxi
 
Plan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfPlan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfLilia Sfaxi
 
Lab1-DB-Cassandra
Lab1-DB-CassandraLab1-DB-Cassandra
Lab1-DB-CassandraLilia Sfaxi
 
TP1-UML-Correction
TP1-UML-CorrectionTP1-UML-Correction
TP1-UML-CorrectionLilia Sfaxi
 
TP0-UML-Correction
TP0-UML-CorrectionTP0-UML-Correction
TP0-UML-CorrectionLilia Sfaxi
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-CorrectionLilia Sfaxi
 
TD3-UML-Séquences
TD3-UML-SéquencesTD3-UML-Séquences
TD3-UML-SéquencesLilia Sfaxi
 
TD3-UML-Correction
TD3-UML-CorrectionTD3-UML-Correction
TD3-UML-CorrectionLilia Sfaxi
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrageLilia Sfaxi
 
Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Lilia Sfaxi
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intentsLilia Sfaxi
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web servicesLilia Sfaxi
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésLilia Sfaxi
 
Android - Tp 5 - stockage de données
Android - Tp 5 -  stockage de donnéesAndroid - Tp 5 -  stockage de données
Android - Tp 5 - stockage de donnéesLilia Sfaxi
 

Más de Lilia Sfaxi (20)

chp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfchp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdf
 
Plan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfPlan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdf
 
Lab3-DB_Neo4j
Lab3-DB_Neo4jLab3-DB_Neo4j
Lab3-DB_Neo4j
 
Lab2-DB-Mongodb
Lab2-DB-MongodbLab2-DB-Mongodb
Lab2-DB-Mongodb
 
Lab1-DB-Cassandra
Lab1-DB-CassandraLab1-DB-Cassandra
Lab1-DB-Cassandra
 
TP1-UML-Correction
TP1-UML-CorrectionTP1-UML-Correction
TP1-UML-Correction
 
TP0-UML-Correction
TP0-UML-CorrectionTP0-UML-Correction
TP0-UML-Correction
 
TD4-UML
TD4-UMLTD4-UML
TD4-UML
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-Correction
 
TD3-UML-Séquences
TD3-UML-SéquencesTD3-UML-Séquences
TD3-UML-Séquences
 
TD3-UML-Correction
TD3-UML-CorrectionTD3-UML-Correction
TD3-UML-Correction
 
TD1 - UML - DCU
TD1 - UML - DCUTD1 - UML - DCU
TD1 - UML - DCU
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrage
 
Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intents
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web services
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancés
 
Android - Tp 5 - stockage de données
Android - Tp 5 -  stockage de donnéesAndroid - Tp 5 -  stockage de données
Android - Tp 5 - stockage de données
 
Lab3-Android
Lab3-AndroidLab3-Android
Lab3-Android
 
Lab 5-Android
Lab 5-AndroidLab 5-Android
Lab 5-Android
 

Systèmes d'Exploitation - chp6-synchronisation

  • 1. Synchronisation des Processus Sections critiques, Sémaphores Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 1 Systèmes d’Exploitation 2ème Année (GL-RT-IIA-IMI)
  • 2. Présentation • Sur une plateforme multiprogrammée, les processus ont généralement besoin de communiquer pour compléter leurs tâches. • Un processus est dit indépendant, s’il n’affecte pas les autres processus ou ne peut pas être affecté par eux. § Un processus qui ne partage pas de données avec d’autres processus est indépendant. • Un processus est dit coopératif s’il peut affecter les autres processus en cours d’exécution ou être affecté par eux. § Un processus qui partage des données avec d’autres processus est un processus coopératif. • Les données partagées par les processus coopératifs se trouvent en mémoire principale ou en mémoire secondaire dans un fichier § Il y a alors risque d’incohérence des données. Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 2 Synchronisation des Processus
  • 3. Présentation • L’exécution d’un processus peut être affectée par l’exécution des autres processus ou il peut affecter lui-même leurs exécutions • La communication interprocessus est assurée généralement via des données partagées qui peuvent se trouver dans la mémoire principale ou dans un fichier. § Les accès concurrents (simultanés) à des données partagées peuvent conduire à des incohérences dans les résultats obtenus. Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 3 Synchronisation des Processus
  • 4. Exemple Illustratif Exemple : la spoule d’impression Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 4 Synchronisation des Processus Processus A Processus B … 3 2 1 0 f1f2… f0 Répertoire de spoule Démon d’impression Variable partagée in=3 Schéma d’exécution: A : lire in, next_free_slot = 3 Préemption: la CPU bascule vers le processus B B : lire in, next_free_slot = 3, entrée3 = fichierB, in = 4 Problème: le fichierB ne sera jamais imprimé A : entrée3 = fichierA, in = 4 lire in, next_free_slot = in Entrée[next_free_slot] = fichier in = in +1
  • 5. Sections Critiques et Exclusion Mutuelle • Le problème précédent est dû aux conflits d’accès à la même ressource. • La partie du programme à partir de laquelle on accède à la ressource partagée est appelée section (région) critique. • Solution: § L’exclusion mutuelle est une méthode qui assure qu’un seul processus est autorisé d’accéder à une ressource partagée; les autres processus seront exclus de la même activité. Slide 5 Synchronisation des Processus A B t1 t2 t3 t4 A entre dans sa section critique B tente d’entrer dans sa section critique A quitte sa section critique B entre dans sa section critique B quitte sa section critique Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 6. Sections critiques et exclusion mutuelle • Quatre conditions doivent être vérifiées pour assurer une bonne synchronisation des processus : 1. Exclusion Mutuelle: Deux processus ne doivent pas se trouver simultanément dans leurs sections critiques. 2. Progression : Aucun processus à l’extérieur de sa section critique ne doit bloquer les autres processus. 3. Attente bornée : Aucun processus ne doit attendre indéfiniment pour entrer dans sa section critique. 4. Aucune hypothèse : Il ne faut pas faire d’hypothèse quant à la vitesse ou le nombre de processeurs Synchronisation des Processus Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 6
  • 7. EXCLUSION MUTUELLE PAR ATTENTE ACTIVE Synchronisation des Processus Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 7
  • 8. Approche de Synchronisation • Un processus désirant entrer dans une section critique doit être mis en attente jusqu’a ce que la section critique devienne libre. • Un processus quittant la section critique doit le signaler aux autres processus. • L’attente peut être : § Active : la procédure Entrer_Section_Critique est une boucle dont la condition est un test qui porte sur des variables indiquant la présence ou non d’un processus en Section critique. § Non active : le processus passe dans l’état endormi et ne sera réveillé que lorsqu’il sera autorisé à entrer en section critique. Slide 8 Exclusion Mutuelle par Attente Active Algorithme d’accès à une section critique : Entrer_Section_Critique () /* attente si SC non libre */ Section_Critique() /* un seul processus en SC */ Quitter_Section_Critique() Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 9. Solutions de l’Exclusion Mutuelle par Attente Active • Solution 1: Masquage des interruptions § Lorsqu’un processus entre en section critique il doit masquer les interruptions. § Pas de commutation de contexte § Lorsqu’ il quitte sa section critique il doit restaurer les interruptions. § C’est une solution matérielle qui permet de résoudre complètement le problème. Mais elle est dangereuse en mode utilisateur s’il oublie de restaurer les interruptions. Slide 9 Exclusion Mutuelle par Attente Active Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 10. Solutions de l’Exclusion Mutuelle par Attente Active • Solution 2: Variable de verrouillage § Un verrou est variable binaire partagée qui indique la présence d’un processus en section critique. o si verrou=0 alors section critique libre o si verrou=1 alors section critique occupée § Cette solution ne garantit pas l’exclusion mutuelle car le verrou est une variable partagée qui peut constituer aussi une section critique. Slide 10 Exclusion Mutuelle par Attente Active void entrer_Section_Critique () { while (verrou == 1) ; /* attente active */ verrou=1 ; } void quitter_Section_Critique () { verrou=0 ; } Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 11. Solutions de l’Exclusion Mutuelle par Attente Active • Solution 2-bis : Variable de verrou en matériel: TSL (Test and Set Lock) § Aussi appelée TAS pour Test And Set. § Est une instruction indivisible: réalisée une seule fois par le matériel. o (1) Lit le contenu de LOCK dans REGISTRE //(1) et (2) sont indivisibles o (2) Ecrit 1 dans adresse mémoire LOCK // (TSL instruction atomique) Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 11 Exclusion Mutuelle par Attente Active |pseudo-assembleur entrer_Section_Critique: TSL REGISTER, LOCK | copie lock dans reg et la définit à 1 CMP REGISTER, #0 | lock etait-elle à 0 JNE entrer_SC | si elle était pas à 0, boucle RET | retourne à appelant, entre dans SC quitter_Section_Critique: MOVE LOCK, #0 | stocke un 0 dans lock RET | retourne à l’appelant TSL REGISTER, LOCK
  • 12. Solutions de l’Exclusion Mutuelle par Attente Active • Solution 3: Alternance stricte § Tour est une variable partagée qui indique le numéro de processus autorisé à entrer en section critique. § L’alternance stricte est une solution simple et facile a implémenter. § Mais, un processus qui possède Tour peut ne pas être intéressé immédiatement par la section critique et en même temps il bloque un autre processus qui la demande. § Problème de Progression Slide 12 Exclusion Mutuelle par Attente Active void entrer_Section_Critique (int process) { while (Tour!=process) ; /* attente active */ } void quitter_Section_Critique () { Tour = (Tour+1) %N ; } Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 13. Solutions de l’Exclusion Mutuelle par Attente Active • Solution 4: Alternance stricte v2 § Interested est un tableau de booléens partagé ayant une case pour chaque processus qui veut entrer en SC § Initialement, toutes les valeurs du tableau sont à false § Quand un processus exécute entrer_SC: o Il met sa variable interested à true o Il attend si l’autre processus est intéressé § Problème d’interblocage o Excès de courtoisie! Slide 13 Exclusion Mutuelle par Attente Active void entrer_Section_Critique (int process) { interested[process] = true; while (interested[1-process]) ; /* attente active */ } void quitter_Section_Critique (int process) { interested[process]= false; } Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 14. Solutions de l’Exclusion Mutuelle par Attente Active • Solution 5: Alternance stricte v2 § Cette solution combine les deux version de l’alternance stricte § Cette solution assure les quatre conditions de bonne synchronisation. § Mais, le processus qui attend sa section critique consomme du temps processeur inutilement (attente active). Slide 14 Exclusion Mutuelle par Attente Active #define FAUX 0 #define VRAI 1 #define N 2 int tour ; /* à qui le tour */ int interesse[N] ; /* initialisé à FAUX */ void entrer_Section_Critique (int process) { int autre ; (1) autre = 1-process ; (2) interesse[process]=VRAI; /* process est intéressé */ (3) tour = process ; /* demander le tour */ while (tour == process && interesse[autre] == VRAI) ; } (A) (B) Void quitter_Section_Critique (int process) { (4) interesse[process]=FAUX ; } Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 15. Peterson N-processus #define FALSE 0 #define N 10 /* First process is indicated with 1, not 0 */ int turn[N]; int stage[N + 1]; void enterRegion(int process) { int i, j; 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) ; } } } Exclusion Mutuelle par Attente Active void leaveRegion(int process) { stage[process] = FALSE; } Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 15
  • 16. EXCLUSION MUTUELLE SANS ATTENTE ACTIVE Synchronisation des Processus Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 16
  • 17. Exclusion mutuelle sans attente active • L’idée est qu’un processus qui ne peut pas entrer en section critique passe à l’état bloqué au lieu de consommer le temps processeur inutilement. Il sera réveillé lorsqu’il pourra y entrer. • Les primitives Sleep et Wakeup: § Le système d’exploitation offre deux appels système: 1. Sleep (dormir) qui bloque le processus appelant. 2. Wakeup (réveiller) qui réveille le processus donné en argument. Slide 17 Exclusion Mutuelle Sans Attente Active Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 18. Producteur-Consommateur • Application des primitives Sleep et Wakeup au modèle Producteur Consommateur: • Deux processus (le producteur et le consommateur) coopèrent en partageant un même tampon: • Le producteur produit des objets qu’il dépose dans le tampon. • Le consommateur retire des objets du tampon pour les consommer. Slide 18 Exclusion Mutuelle Sans Attente Active Producteur f1f2… f0 Tampon Variable partagée compteur=3 Consommateur Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 19. Producteur-Consommateur Slide 19 Exclusion Mutuelle Sans Attente Active #define N 100 /* taille du tampon */ int compteur = 0 ; /* objets dans tampon */ void producteur () { while (TRUE) { produire_objet() ; if (compteur == N) sleep () ; mettre_objet() ; compteur = compteur + 1 ; if (compteur == 1) wakeup(consommateur) ; } } void consommateur () { while (TRUE) { if (compteur == 0) sleep() ; retirer_objet() compteur = compteur – 1 ; if (compteur == N-1) wakeup (producteur) ; consommer_objet(…) ; } } Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 20. Producteur-Consommateur • Analyse de cette solution : § L’accès à la variable compteur n’est pas protégé, ce qui peut entraîner des incohérences dans les valeurs prises par cette variable. § Réveils perdus : o c’est le principal défaut de ce mécanisme o Un signal wakeup envoyé à un processus qui ne dort pas (encore) est perdu. ‣ Considérer le scénario où une préemption a lieu entre le if et le sleep du producteur, par exemple. Slide 20 Exclusion Mutuelle Sans Attente Active Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 21. Sémaphores • Pour remédier au problème es réveils en attente (les wakeup perdus), l’idée est d’employé une variable entière appelée: Sémaphore à laquelle est associée une file d’attente des processus bloqués. § sémaphore=0 à aucun réveil n’est mémorisé § sémaphore>0 à un ou plusieurs réveils sont en attente • Un sémaphore s est manipulé par les opérations atomiques suivantes: 1. down(s) : o if (val(s)==0) sleep(); o val(s)--; 2. up(s) : o wakeup(); o s++; Slide 21 Exclusion Mutuelle Sans Attente Active Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 22. Sémaphores • Pour assurer l’exclusion mutuelle un sémaphore peut être programmé de la manière suivante : Slide 22 Exclusion Mutuelle Sans Attente Active initialisation mutex = 1 /* nombre de processus autorisés à entrer simultanément dans la section critique */ down (mutex) <section_critique> up (mutex) Nom du sémaphore Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 23. Sémaphores • Application au modèle Producteur / Consommateur : • Trois sémaphores sont nécessaires: § plein: compte le nombre de places occupées § vide : compte le nombre de places libres § mutex : assure que le producteur et le consommateur n'accèdent jamais en même moment à la mémoire tampon. Slide 23 Exclusion Mutuelle Sans Attente Active Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 24. Producteur/Consommateur avec Sémaphores #define N 100 // taille du tampon semaphore mutex 1 ; // contrôle d’accès section critique semaphore vide N; // contrôle les emplacements vide semaphore plein 0; // contrôle les emplacements plein Slide 24 Exclusion Mutuelle Sans Attente Active 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(…) ; } } Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 25. EXERCICES Synchronisation des Processus Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 25
  • 26. Ex1: Synchronisation et Ordonnancement • Q1 : Round robin ( tourniquet) avec q=5ms • Q2 : Round robin ( tourniquet) avec q=5ms + Synchronisation Peterson Slide 26 Exercices Prêt à l’instant t= Durée d’exécution P0 0 ms 23 ms P1 1 ms 17 ms P2 2 ms 15 ms Durée d’exécution SR+SC Date d’entrée en section critique t= P0 23 ms 3 ms P1 17 ms 7 ms P2 15 ms X Prêt à l’instant t= Durée d’exécution en section critique P0 0 ms 13ms P1 1 ms 10 ms P2 2 ms X Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 27. Prêt à l’instant t= Durée d’exécution P0 0 ms 23 ms P1 1 ms 17 ms P2 2 ms 15 ms 0 5 P0 P1 P2 10 15 20 25 30 35 40 40 45 50 52 55 Ex1: Synchronisation et Ordonnancement • Round robin ( tourniquet) avec q=5ms Exercices Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 27
  • 28. 0 P0 P1 P2 10 15 30 40 45 50 58 Prêt à l’instant t= Durée d’exécution Date d’entrée en section critique t= Durée d’exécution en section critique P0 0 ms 23 ms 3 ms 12 ms P1 1 ms 17 ms 7 ms 10 ms P2 2 ms 15 ms X X SC AA 5 20 25 35 40 55 Ex1: Synchronisation et Ordonnancement • Round robin ( tourniquet) avec q=5ms • Peterson è Attente active Exercices Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 28
  • 29. Ex1: Synchronisation et Ordonnancement • Round robin ( tourniquet) avec q=5ms • Sommeil et activation Exercices 0 5 P0 P1 P2 10 15 20 22 27 32 37 40 42 47 5552 Prêt à l’instant t= Durée d’exécution Date d’entrée en section critique t= Durée d’exécution en section critique P0 0 ms 23 ms 3 ms 12 ms P1 1 ms 17 ms 7 ms 10 ms P2 2 ms 15 ms X X SC 40 Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 29
  • 30. Ex2: Lecteurs/Rédacteur • Une base de données peut être accessible par un seul rédacteur ou N lecteurs en même temps § Exclusion mutuelle entre le rédacteur et les N lecteurs § Donner le pseudo code d’un processus lecteur et celui du processus rédacteur Slide 30 Exercices Base de données Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 31. Ex2: Lecteurs/Rédacteur Semaphore mutex 1 // contrôle l’accés à nb_lect Semaphore db 1 // contrôle l’accés à la base de données int nb_lect = 0 ; // var partagées entre lecteurs pour compter le nombre de lecteurs // accédant actuellement à la BD //lecteur void lecture(){ while (true) { //boucle sans fin lire_la_BD(); //accés à la BD utiliser_données (); //Section restante } } //redacteur void ecriture(){ while (true) { créer_données (); ecrire_dans_la_BD } } Slide 31 Exercices Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 32. Ex2: Lecteurs/Rédacteur Semaphore mutex 1 // contrôle l’accés à nb_lect Semaphore db 1 // contrôle l’accés à la base de données int nb_lect = 0 ; // var partagées entre lecteurs pour // compter le nombre de lecteurs accédant // actuellement à la BD //lecteur void lecture(){ while (true) { //boucle sans fin down (mutex); // la modif de la var. partagée nb_lect nb_lect ++; // est une section critique entre lecteurs if (nb_lect == 1) down (db); //si le premier lecteur up(mutex); // libère l’accés exclusif à nb_lect lire_la_BD(); //accés à la BD down(mutex); nb_lect --; if (nb_lect == 0) up (db); //si le dernier lecteur up (mutex) utiliser_données (); //Section restante } } Slide 32 Exercices void ecriture(){ while (true) { //boucle sans fin créer_données (); //Sec.Rest. down (db); ecrire_dans_la_BD(); //accés BD up (db); } } Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 33. Ex3: Coiffeur endormi • Un coiffeur possède un salon avec un siège de coiffeur et une salle d’attente comportant un nombre fixe F de fauteuils. • S’il n’y a pas de client, le coiffeur se repose sur son siège de coiffeur. • Si un client arrive et trouve le coiffeur endormi, il le réveille, s’assoit sur le siège du coiffeur et attend la fin de sa coupe de cheveux. • Si le coiffeur est occupé lorsqu’un client arrive, le client s’assoit et s’endort sur une des chaises de la salle d’attente ; si la salle d’attente est pleine, le client rentre chez lui. • Lorsque le coiffeur a terminé une coupe de cheveux, il fait sortir son client courant et va réveiller un des clients de la salle d’attente. • Si la salle d’attente est vide, il se rendort sur son siège jusqu’à ce qu’un nouveau client arrive. Slide 33 Exercices Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 34. Ex3: Coiffeur endormi • Résoudre le pb en évitant les conditions de concurrence • Utilisation de 3 sémaphores et un compteur § Semaphore Clients 0; o //bloque le coiffeur s’il n’y a pas de clients § Semaphore Mutex 1; o //accés exclusif à la zone critique § Semaphore Coiffeurs 0; o //bloque le client si le coiffeur est occupé avec un //autre client § Int Attente = 0 ; o //Le nombre de clients en attente Slide 34 Exercices Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 35. Ex3: Coiffeur endormi Semaphore Clients 0; Semaphore Mutex 1; Semaphore Coiffeurs 0; Int Attente = 0 ; //Coiffeur void coiffeur() { while(1){ down(Clients); down(Mutex); Attente = attente – 1; up(Coiffeurs); up(Mutex); Couper_cheveux(); } } Slide 35 Exercices //Client void client() { down(Mutex) if (Attente < Chaises) { Attente = attente + 1 up(Clients) up(Mutex) down(Coiffeurs) Obtenir_coupe } else{ up(Mutex) } } Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 36. Réfléchissons ! • Soient les deux processus P1 et P2 suivants. Ils se partagent deux sémaphores S1 et S2 initialisés à 0. • Quelle synchronisation a-t-on imposée sur les exécutions des procédures A1, A2, B1 et B2 (càd, quel ordre d’exécution) ? Slide 36 Exercices P2 { procedure A2 ; Up(S1) ; Down(S2) ; procedure B2 ; } Semaphore S1 0 Semaphore S2 0 P1 { procedure A1 ; Up(S2) ; Down(S1) ; procedure B1 ; } Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 37. Ex4: Barrière de synchronisation • Les Ai s’exécutent toujours avant les Bi, quelque soit l’ordre de l’exécution des processus P1 et P2 • Ex: Ecrire le code à fin d’imposer la même synchronisation pour N processus en utilisant : § N sémaphores § 2 sémaphores et un compteur Slide 37 Exercices P2 { procedure A2 ; Up(S1) ; Down(S2) ; procedure B2 ; } Semaphore S1 0 Semaphore S2 0 P1 { procedure A1 ; Up(S2) ; Down(S1) ; procedure B1 ; } Dr. Ghada GASMI- Dr. Lilia SFAXI
  • 38. Ex5: Dîner des Philosophes • Cinq philosophes se trouvent autour d'une table ; • Chacun des philosophes a devant lui un plat de spaghetti ; • A gauche de chaque assiette se trouve une fourchette • Un philosophe n'a que trois états possibles : § penser pendant un temps indéterminé ; § être affamé (pendant un temps déterminé et fini sinon il y a famine) ; § manger pendant un temps déterminé et fini. • Des contraintes extérieures s'imposent à cette situation : § quand un philosophe a faim, il va se mettre dans l'état « affamé » et attendre que les fourchettes soient libres ; § pour manger, un philosophe a besoin de deux fourchettes : celle qui se trouve à sa droite, et celle qui se trouve à sa gauche ; § si un philosophe n'arrive pas à s'emparer d'une fourchette, il reste affamé pendant un temps déterminé, en attendant de renouveler sa tentative. • Le problème consiste à trouver un ordonnancement des philosophes tel qu'ils puissent tous manger, chacun à leur tour, sans provoquer d’interblocage! Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 38 Exercices
  • 39. Ex5: Dîner des Philosophes Const int N = 5; //nbr de philosophes Semaphore s[N]={0,0,0,0,0}; Semaphore Mutex=1; int etat[N]= {PENSE,PENSE,…} ; //Philosophe void philosophe(int i) { while(1){ penser(); prendre_fourchettes(i); manger(); poser_fourchettes(i); } } Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 39 Exercices vo i d p re n d re _fo u rch ette s ( i n t i ) { d ow n (m u tex) ; et at [ i ] = FA I M ; i f (et at [ i + 1 % N] = = M A NGE | | et at [ i - 1 % N] = = M A NGE ) { u p (m u tex) ; d ow n ( s [ i ]) ; } e l s e { et at [ i ] = M A NGE ; u p (m u tex) ; } } vo i d p o s e r_fo u rch ette s ( i n t i ) { d ow n (m u tex) ; i f (et at [ i + 1 % N] = = FA I M & & et at [ i + 2 % N] ! = M A NGE ) { et at [ i + 1 % N] = M A NGE ; u p ( s [ i + 1 % N ]) ; } i f (et at [ i - 1 % N] = = FA I M & & et at [ i - 2 % N] ! = M A NGE ) { et at [ i - 1 % N] = M A NGE ; u p ( s [ i - 1 % N]) ; } u p (m u tex) ; }
  • 40. Références Dr. Ghada GASMI- Dr. Lilia SFAXI Slide 40 • Wassim Youssef, Les systèmes d’exploitation, Cours ISI, 2015