Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Systèmes d’exploitation 2
A. ABBAS
abbasakli@gmail.com
1
Systèmes d‘exploitation 2 :Dr. A. ABBAS
²
Chapitre 2:
Synchronisation
2
Systèmes d‘exploitation 2 :Dr. A. ABBAS
CONTENU DU COURS
Synchronisation
· Problème de l’exclusion mutuelle
· Synchronisation
o Evénements, Verrous
o Sémaphores
o Moniteurs
o Régions critiques.
o Expressions de chemins
²
3
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Problématique
Lorsque plusieurs processus (ou threads) s'exécutent sur processeur sont amenés a
partager des ressources comme : les périphériques d'entrées-sorties (écrans,
imprimantes,..), les moyens de mémorisation (mémoire centrale,...) ou des moyens
logiciels (fichiers, base de données, ...) soit volontairement s'ils coopèrent pour
traiter un même problème, soit involontairement parce qu'ils sont obliges de se
partager ces ressources vue leurs nombre limite.
²
Dans ce cas, les processus vont se trouver en situation de concurrence d'accès vis-à-
vis de ces ressources offertes par le système d'exploitation.
4
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Problématique
La mise a jour concurrente des données peut se dérouler sans problème, où la variable
cpt, initialisée à 2000, aura comme valeur finale 1000 (2000 + 1000 - 2000).
5
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Problématique
7
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
2- Définitions
1. Ressources critiques:
a. Les ressources partagée, comme des zones mémoire, cartes d'entrées/sorties, etc.,
sont dites critiques si elles ne peuvent être utilisées simultanément que par un seul
processus.
b. On appelle ressource critique tout objet : variable, table, fichier, périphérique, ... qui
²
peut faire l'objet d'un accès concurrent (ou simultané) par plusieurs processus.
2. Section critique
a. Une section critique (SC) est un ensemble d'instruction d'un programme qui peuvent
engendrer des résultats imprévisibles (ou incohérents) lorsqu'elles sont exécutées
simultanément par des processus différents.
b. Une SC est une suite d'instructions qui opèrent sur une ou plusieurs ressources
partagées (critiques) et qui nécessitent une utilisation exclusive de ces ressources.
8
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
2- Définitions
3. Exclusion mutuelle
Les problème d'incohérences des résultats, posé par les accès concurrents, montrent que
la solution consiste à exécuter les sections critiques en exclusion mutuelle. C'est à dire
qu'une section critique (SC) ne peut être entamée (ou exécutée) que si aucune autre SC
du même ensemble n'est en exécution.
²
9
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
2- Définitions
3. Exclusion mutuelle
Par exemple, avant d'entrer en SC, le processus doit exécuter un protocole d'entrée. Le
but de ce protocole est de vérifier si la SC n'est occupée par aucun autre processus. A
la sortie de la SC, le processus doit exécuter un protocole de sortie de la SC. Le but de
ce protocole est d'avertir les autres processus en attente que la SC est devenue libre.
²
Le pseudo-code suivante résume ce fonctionnement :
10
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
2- Conditions nécessaires pour réaliser une exclusion mutuelle
Pour réaliser une exclusion mutuelle utile on admet que certaines conditions doivent
être respectées :
1. Le déroulement : Le fait qu'un processus qui ne demande pas à entrer en section
critique ne doit pas empêcher un autre processus d'y entrer. En plus, aucun processus
suspendu en dehors de sa section critique ne doit bloquer les autres processus.
²
3. Deux processus ne peuvent être en même temps dans leurs sections critiques.
4. Tous les processus doivent être égaux vis a vis de l'entrée en SC.
11
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
1- Masquage des interruptions
Avant d'entrer dans une section critique, le processus masque les interruptions.
Il les restaure (non masque) a la fin de la section critique.
Il ne peut être suspendu alors durant l'exécution de la section critique.
Exemple : Masque des interruptions
²
Local_irq_disable(); /* Les interruptions sont masquées .. */
Section critique ();
Local_irq_enable();
Problèmes:
1- Si le processus ne restaure pas les interruptions a la sortie de la section critique, ce serait
le bug du système.
12
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
2- Attente active
Utiliser une variable de verrouillage partagée verrou, unique, initialisée a 0. Pour
rentrer en section critique, un processus doit tester la valeur de verrou
• Si elle est égale à 0, le processus modifie la valeur du verrou1 et exécute sa
section critique. A la fin de la section critique, il remet le verrou a 0.
²
• Sinon, il attend (par une attente active) que le verrou devienne egal à 0, c.-a-d.
: while(verrou ≠0);
13
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
2- Attente active
Problèmes: Cette méthode n'assure pas l'exclusion mutuelle
Si un processus P1 est suspendu juste après avoir lu la valeur du verrou qui est égal à 0
(par exemple: mov verrou).
Ensuite, si un autre processus P2 est élu et il teste le verrou qui est toujours égal a 0,
²
met verrou 1 et entre dans sa section critique.
Si P2 est suspendu avant de quitter la section critique et que P1 est réactivé et entre
dans sa section critique et met le verrou1
Résultats: Les deux processus P1 et P2 sont en même temps en section critique.
14
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
3 - Solution de Peterson
- Cette solution se base sur deux fonctions entrer_region et quitter_region.
- Chaque processus doit, avant d'entrer dans sa section critique, appeler la fonction
entrer_region en lui fournissant en paramètre son numéro.
15
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
3 - Solution de Peterson
Le pseudo code des deux fonction est donné ci-dessous:
17
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
4 - Sémaphore
L'opération P(S) décrémente la valeur du sémaphore S. Puis, si cette dernière est
inferieure à 0 alors le processus appelant est mis en attente. Sinon le processus appelant
accède a la section critique.
18
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
4 - Sémaphore
L'opération V(S) incrémente la valeur du sémaphore S. Puis si cette valeur est supérieure
ou égale à 0 alors l'un des processus bloqués par l'opération P(S) sera choisi et
redeviendra prêt.
19
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
4 - Sémaphore
²
Remarque 1 : Le test du sémaphore, le changement de sa valeur et la mise en attente
éventuelle sont effectués en une seule opération atomique indivisible.
Remarque 2 : La valeur initiale du champ value d'un sémaphore doit être un nombre
non négatif. La valeur initiale d'un sémaphore est le nombre d'unités de ressource.
20
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
4 - Sémaphore
Ainsi, on peut proposer un schéma de synchronisation de n processus voulant entrer
simultanément en SC, en utilisant les deux opérations P(S) et V(S).
21
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
4 – Sémaphore - Exemple 1
22
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
4 – Sémaphore - Exemple 2: Lecteurs / Rédacteurs
Considérons un objet (une base de donnée par exemple) qui n'est accessible que par deux
catégories d'opérations : les lectures et les écritures. Plusieurs lectures (consultations)
peuvent avoir lieu simultanément ; par contre les écritures (mises a jour) doivent se faire
en exclusion mutuelle.
²
On appellera lecteur un processus faisant des lectures et rédacteur un processus faisant
des écritures.
23
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
4 – Sémaphore - Exemple 2: Lecteurs / Rédacteurs
24
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
4 – Sémaphore - Exemple 2: Lecteurs / Rédacteurs
25
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
4 – Sémaphore - Services Posix sur les semaphores
Le système d'exploitation Linux permet de créer et d'utiliser les sémaphores définis
par le standard Posix.
Les services Posix de manipulation des sémaphores se trouvent dans la librairie
<semaphore.h>.
²
Le type sémaphore est désigné par le type sem_t.
27
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
4 – Sémaphore - Exemple 3: le problème du producteur-consommateur
28
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
4 – Sémaphore - Exemple 3: le problème du producteur-consommateur
30
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
4 – Sémaphore -Critiques
31
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
5 – Les Moniteurs -Définition
L'idée des moniteurs est de regrouper dans un module spécial, appelé moniteur, toutes
les sections critiques d'un même problème.
Les processus peuvent appeler (ou utiliser) les procédures du moniteur mais ils ne
peuvent pas accéder aux variables et aux structures de données interne du moniteur à
partir des procédures externes.
32
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
5 – Les Moniteurs -Exclusion mutuelle par des moniteurs
Pour assurer l'accès aux ressources critiques en exclusion mutuelle, il suffit qu'il y ait à
tout instant pas plus d'un processus actif dans le moniteur, c'est-a-dire que les procédures
du moniteur ne peuvent être exécutées que par un seul processus a la fois. C'est le
compilateur qui effectue de cette tâche (assurer l'accès aux ressources critiques).
Pour cela, le compilateur rajoute, au début de² chaque procédure du moniteur un code qui
réalise ce qui suit:
Le processus bloqué est réveillé par un autre processus en lui envoyant un signal sur
la variable conditionnelle (signal(c)).
33
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
5 – Les Moniteurs
Une variable de condition (des moniteurs) est une condition manipulée au moyen de
deux opérations wait et signal :
wait(x) :
²
suspend l'exécution du processus (thread) appelant (le met en attente de x);
autorise un autre processus en attente du moniteur a y entrer.
34
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
5 – Les Moniteurs -Implémentation des moniteurs
L'utilisation de moniteurs est plus simple que les sémaphores puisque le programmeur
n'a pas a se préoccuper de contrôler les accès aux sections critiques.
36
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
5 – Les Moniteurs –Exemple 1 : Producteur/consommateur
Moniteur ProducteurConsommateur (){
bool nplein, nvide ; //variable de condition pour non
plein et non vide void retirer (int* objet) //section critique
int compteur =0, ic=0, ip=0, N ; pour le retrait
{ if (compteur ==0) wait(nvide) ;
void mettre (int objet) // section critique pour le dépôt objet = tampon[ic] ;
{ ² ic = (ic+1)%N ;
if (compteur==N) wait(nplein) ; //attendre compteur - ;
jusqu'a ce que le tampon soit non plein
// si le tampon était plein, envoyer un
tampon[ip] = objet ; signal pour réveiller le producteur.
ip = (ip+1)%N ;
compteur++ ; if(compteur==N-1) signal(nplein) ;
}
// si le tampon était vide, envoyer un }
signal pour réveiller le consommateur.
if (compteur==1) signal(nvide) ;
}
37
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
5 – Les Moniteurs - Règles d'utilisation des moniteurs
An d‘éviter que tous les processus réveillés se retrouvent au même temps dans le
moniteur, différentes règles ont été établies pour définir ce qui se passe a l'issue d'un
signal.
1. Règle de Hoare : ne laisser entrer dans le moniteur que le processus qui a été
suspendu le moins longtemps;
²
2. Regle de Brinch Hansen : exiger du processus qui fait Signal de sortir
immédiatement du moniteur. Il laisse ainsi la place a tous ceux qui étaient en attente.
L'ordonnanceur choisira un parmi ceux ci.
3. 2ème règle de Brinch Hansen : si un Signal est réalise sur une variable
conditionnelle et qu'aucun processus ne l'attend, alors ce signal est perdu.
38
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
5 – Les Moniteurs - Réalisation sous C/POSIX
Pour garantir qu'une seule procédure du moniteur soit activée à instant donne, il suffit
de protéger l'exécution de toutes les procédures par le même sémaphore d'exclusion
mutuelle.
Exemple Moniteur: probleme Producteur/consommateur
pthread_mutex_t mutex ; ²
pthread_cond_t est_vide, est_plein;
char *buffer;
void *mettre (char msg) {// section critique pour le dépôt
pthread_mutex_lock ( & mutex);
while (buffer ! = NULL)
pthread_cond _wait ( & est_vide, & mutex);
// buer = NULL
buffer = strdup(msg);
Pthread_cond_signal ( & est_plein);
pthread_mutex _unlock ( & mutex);
} 39
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
5 – Les Moniteurs - Réalisation sous C/POSIX
char *retirer () {//section critique pour le retrait
char *result;
pthread_mutex_lock ( & mutex);
while (buffer == NULL)
pthread_cond _wait ( & est_plein, & mutex);
result = buer;
buffer = NULL; ²
pthread_cond_signal ( & est_vide);
pthread_mutex_unlock ( & mutex);
return result;
} void main (void){
pthread_t ta; pthread_t tb;
pthread_mutex_init (&mutex, NULL);
pthread_cond_init (& est_vide, NULL);
Pthread_cond_init (& est_plein, NULL);
buffer = NULL;
}
40
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
5 – Les Moniteurs - Résumé des types et des fonctions utilisés
41
Systèmes d‘exploitation 2 :Dr. A. ABBAS
Synchronisation
3- Solutions pour réaliser une exclusion mutuelle
5 – Les Moniteurs - Réalisation avec JAVA
Les données du moniteur doivent être déclarées avec le mot clé privates pour
que seules les méthodes du moniteur accèdent à ces données,
Les méthodes (ou procédures d'entrée)² du moniteur doivent être déclarées avec
le mot clé synchronized pour qu'elles puissent s'exécuter en exclusion mutuelle,
42
Systèmes d‘exploitation 2 :Dr. A. ABBAS