SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Systèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionSystèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionLilia Sfaxi
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - CorrectionLilia Sfaxi
 
CONCEPTION ET REALISATION D ’ UNE APPLICATION WEB POUR GESTION DE P ROJETS DE...
CONCEPTION ET REALISATION D ’ UNE APPLICATION WEB POUR GESTION DE P ROJETS DE...CONCEPTION ET REALISATION D ’ UNE APPLICATION WEB POUR GESTION DE P ROJETS DE...
CONCEPTION ET REALISATION D ’ UNE APPLICATION WEB POUR GESTION DE P ROJETS DE...Madjid Meddah
 
Rapport Pfe Application Web e-commerce Symfony2
Rapport Pfe Application Web e-commerce Symfony2Rapport Pfe Application Web e-commerce Symfony2
Rapport Pfe Application Web e-commerce Symfony2Ben Abdelwahed Slim
 
Rapport pfe Conceptionet Developpement d'une Application web et Mobile
Rapport pfe Conceptionet Developpement d'une Application web et  Mobile Rapport pfe Conceptionet Developpement d'une Application web et  Mobile
Rapport pfe Conceptionet Developpement d'une Application web et Mobile Raoua Bennasr
 
Introduction aux systèmes répartis
Introduction aux systèmes répartisIntroduction aux systèmes répartis
Introduction aux systèmes répartisHeithem Abbes
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionLilia Sfaxi
 
Presentation stage Tunisie Telecom
Presentation stage Tunisie TelecomPresentation stage Tunisie Telecom
Presentation stage Tunisie Telecomlitayem bechir
 
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2Sofien Benrhouma
 
Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...
Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...
Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...Symphorien Niyonzima
 
Rapport application chat
Rapport application chatRapport application chat
Rapport application chatTbatou sanae
 
Memoire licence informatique application gestion personnel par herma - zita...
Memoire licence  informatique application gestion personnel  par herma - zita...Memoire licence  informatique application gestion personnel  par herma - zita...
Memoire licence informatique application gestion personnel par herma - zita...Soumia Elyakote HERMA
 
Rapport PFE Application Web Mobiles belwafi bilel
Rapport PFE Application Web Mobiles belwafi bilelRapport PFE Application Web Mobiles belwafi bilel
Rapport PFE Application Web Mobiles belwafi bilelBelwafi Bilel
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2Amal Abid
 
Chp2 - Diagramme des Cas d'Utilisation
Chp2 - Diagramme des Cas d'UtilisationChp2 - Diagramme des Cas d'Utilisation
Chp2 - Diagramme des Cas d'UtilisationLilia Sfaxi
 
Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Heithem Abbes
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfslimyaich3
 
Rapport PFE Ahmed BEN JEMIA
Rapport PFE Ahmed BEN JEMIARapport PFE Ahmed BEN JEMIA
Rapport PFE Ahmed BEN JEMIAAhmed BEN JEMIA
 

Mais procurados (20)

Systèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionSystèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introduction
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - Correction
 
CONCEPTION ET REALISATION D ’ UNE APPLICATION WEB POUR GESTION DE P ROJETS DE...
CONCEPTION ET REALISATION D ’ UNE APPLICATION WEB POUR GESTION DE P ROJETS DE...CONCEPTION ET REALISATION D ’ UNE APPLICATION WEB POUR GESTION DE P ROJETS DE...
CONCEPTION ET REALISATION D ’ UNE APPLICATION WEB POUR GESTION DE P ROJETS DE...
 
Tp n 3 linux
Tp n 3 linuxTp n 3 linux
Tp n 3 linux
 
Rapport Pfe Application Web e-commerce Symfony2
Rapport Pfe Application Web e-commerce Symfony2Rapport Pfe Application Web e-commerce Symfony2
Rapport Pfe Application Web e-commerce Symfony2
 
Rapport pfe Conceptionet Developpement d'une Application web et Mobile
Rapport pfe Conceptionet Developpement d'une Application web et  Mobile Rapport pfe Conceptionet Developpement d'une Application web et  Mobile
Rapport pfe Conceptionet Developpement d'une Application web et Mobile
 
Introduction aux systèmes répartis
Introduction aux systèmes répartisIntroduction aux systèmes répartis
Introduction aux systèmes répartis
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de Conception
 
Presentation stage Tunisie Telecom
Presentation stage Tunisie TelecomPresentation stage Tunisie Telecom
Presentation stage Tunisie Telecom
 
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
 
Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...
Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...
Conception d’une plateforme web d’e-Commerce au sein d’une entreprise commerc...
 
Rapport application chat
Rapport application chatRapport application chat
Rapport application chat
 
Memoire licence informatique application gestion personnel par herma - zita...
Memoire licence  informatique application gestion personnel  par herma - zita...Memoire licence  informatique application gestion personnel  par herma - zita...
Memoire licence informatique application gestion personnel par herma - zita...
 
Rapport PFE Application Web Mobiles belwafi bilel
Rapport PFE Application Web Mobiles belwafi bilelRapport PFE Application Web Mobiles belwafi bilel
Rapport PFE Application Web Mobiles belwafi bilel
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2
 
Chp2 - Diagramme des Cas d'Utilisation
Chp2 - Diagramme des Cas d'UtilisationChp2 - Diagramme des Cas d'Utilisation
Chp2 - Diagramme des Cas d'Utilisation
 
Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
MEMOIRE DE STAGE
MEMOIRE DE STAGEMEMOIRE DE STAGE
MEMOIRE DE STAGE
 
Rapport PFE Ahmed BEN JEMIA
Rapport PFE Ahmed BEN JEMIARapport PFE Ahmed BEN JEMIA
Rapport PFE Ahmed BEN JEMIA
 

Destaque

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
 
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
 
Chp3 - Modélisation Multidimensionnelle
Chp3 - Modélisation MultidimensionnelleChp3 - Modélisation Multidimensionnelle
Chp3 - Modélisation MultidimensionnelleLilia Sfaxi
 

Destaque (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
 
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
 
Chp3 - Modélisation Multidimensionnelle
Chp3 - Modélisation MultidimensionnelleChp3 - Modélisation Multidimensionnelle
Chp3 - Modélisation Multidimensionnelle
 

Mais 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
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-CorrectionLilia 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
 
TD1-UML-correction
TD1-UML-correctionTD1-UML-correction
TD1-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
 

Mais 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
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
 
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
 
TD1-UML-correction
TD1-UML-correctionTD1-UML-correction
TD1-UML-correction
 
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
 

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