Chap4 Les Mécanismes de Synchronisation_Sémaphores

34
Systèmes d’Exploitation Avancés 1 Préparé par : Anis ZOUAOUI Hassen JEDIDI [email protected] [email protected]

description

syn

Transcript of Chap4 Les Mécanismes de Synchronisation_Sémaphores

DAO

Systmes dExploitation Avancs1Prpar par : Anis ZOUAOUI Hassen [email protected]@esprit.tn1

Systmes dexploitation Avancs2Prsent : Anis ZOUAOUILes Mcanismes de SynchronisationChapitre 42

Introduction

3 Dans un systme dexploitation multiprogramm en temps partag, plusieurs processus sexcutent en pseudo-parallle ou en parallle et partagent des objets (mmoires et imprimantes )

Le partage des objets sans prcaution particulire peut conduire des rsultats imprvisibles. Ltat finale des donnes dpend de lordonnancement des processus.

Problme(1)

4Lire(S);Somme = 1000 dinarsOpration : RetraitDABAgentDeux Oprations Simultanes : DABAgentLire (S);S=1000Compte Bancaire S=S-300;Ecrire(S);Ecrire(S);S=S-400;S=1000S=700S=700S=600S=600Somme = 700 dinars4

Problme(2)

5Exemple : la spoule dimpressionProcessus AProcessus B 3 2 1 0 f1f2f0Rpertoire de spouleDmon dimpressionVariable partage in=3Schma dexcution:

A : lire in,next_free_slot = 3Interruption: la CPU bascule vers le processus B

B : lire in,next_free_slot = 3,entre3 = fichierB,in = 4

Problme: le fichier B ne sera jamais imprim

A : entre3 = fichierA,in = 4

Introduction

6Le problme prcdent est d aux conflits daccs la mme ressource.

Lorsquun processus modifie un objet partag, les autres processus ne doivent ni lire, ni modifier jusqu ce quun processus ait termin de le modifier.

Autrement dit, laccs une ressource doit se faire en exclusion mutuelle.

Ressource : toute entit dont a besoin un processus pour terminer son excution (UCT,E/S, Donne)

Dfinitions

7Exclusion mutuelle est une mthode qui assure quun seul processus est autoris daccder une ressource partage; les autres processus seront exclus de la mme activit.ABt1t2t3t4A entre dans sa section critiqueB tente dentrer dans sa section critiqueA quitte sa section critiqueB entre dans sa section critiqueB quitte sa section critiqueLa partie du programme partir de laquelle on accde la ressource partage est appele section (rgion) critique.7

Section critique et Exclusion mutuelle

8Quatre conditions doivent tre vrifies pour assurer lexclusion mutuelle:Deux processus ne doivent pas se trouver simultanment dans leurs sections critiques.Aucun processus lextrieur de sa section critique ne doit bloquer les autres processus.Aucun processus ne doit attendre indfiniment pour entrer dans sa section critique.Il ne faut pas faire dhypothse quant la vitesse ou le nombre de processeurs8

Section critique et Exclusion mutuelle

9Questions :Comment mettre en uvre lexclusion mutuelle?Comment contrler les accs concurrents de plusieurs processus une ressource partage?

9

Exclusion mutuelle

10Un processus dsirant entrer dans une section critique doit tre mis en attente jusqu ce que la section critique devient libre.Un processus quittant la section critique doit le signaler aux autres processus.Algorithme daccs une section critique :Entrer_Section_Critique () /* attente si SC non libre */Section_Critique() /* un seul processus en SC */Quitter_Section_Critique() Lattente peut tre : Active : la procdure Entrer_Section_Critique est une boucle dont la condition est un test qui porte sur des variables indiquant la prsence ou non dun processus en Section critique. Non active : le processus passe dans ltat endormi et ne sera rveill que lorsquil sera autoris entrer en section critique.10

Exclusion mutuelle par attente active

11Variable de blocage (lock variable)Solution : Attendre que la ressource soit disponible, en vrifiant le contenu dune variable verrou associe la ressource qui possde deux tats libre ou occup.

Problme 1 : reporte le problme sur le verrou (nouvelle ressource partage).

11

Exclusion mutuelle par attente active

12Problme 2 : Si rpartiteur rquisition : le processus peut tre interrompu entre le test du verrou et laccs la ressource partage.

12

Solution 1 : Masquage des interruptions

13Avant dentrer en section critique, le processus masque les interruptions. Il ne peut tre alors suspendu durant lexcution de la section critique.Problmes : Solution dangereuse : gnralement il est trs dangereux dautoriser les utilisateurs (programmes utilisateurs) dsactiver les interruptions. En cas derreur un processus pourrait compltement bloquer lordinateur. cette solution nassure lexclusion mutuelle en cas dune architecture multiprocesseur. 13

Solution 2: Test Set & Lock (TSL)

14Certains processeurs disposent dinstructions permettant deffectuer directement le test de la valeur dun registre ou le contenu dune location en mmoire et dassigner une nouvelle valeur si la valeur courante tait nulle. De cette manire un processus ne peut plus tre interrompu entre le test de la variable verrou et le blocage du verrou.14

Solution 3: Alternance Stricte

15

Problme avec lalternance stricteLe nombre de processus qui partagent la ressource apparat directement dans le code, chacun son tour nest pas ncessairement la manire la plus efficace et la plus quitable de partager une ressource, De plus un processus qui a une trs longue section non critique peut en bloquer un autre qui attend que son tour vienne. 15

Solution 3: Alternance Stricte

16Problme gnraux avec lalternance stricte : Lattente active gaspille du temps UCT. Il faut ractiver rgulirement tous les processus qui veulent entrer dans leur section critique afin quils puissent vrifier si leur tour est enfin arriv.

En rgle gnrale, lalternance stricte ne peut pas garantir quun processus nattende indfiniment, ou quun processus bloque dautres processus en dehors de sa section critique.16

Solution 4: Solution de Peterson

17#define FAUX 0#define VRAI 1#define N 2int tour ; /* qui le tour */int interesse[N] ; /* initialis FAUX */void entrer_Section_Critique (int process){int autre ;autre = 1-process ;interesse[process]=VRAI; /* process est intress */tour = process ; /* demander le tour */while (tour == process && interesse[autre] == VRAI) ;}Void quitter_Section_Critique () { interesse[process]=FAUX ;}Cette solution assure compltement lexclusion mutuelle. Mais, le processus qui attend sa section critique consomme du temps processeur inutilement (attente active).17

Problmes Classiques

18Producteurf1f2f0TamponVariable partage compteur=3ConsommateurLe problme Producteurs/consommateursCes problmes sont des reprsentations thoriques de problmes rels daccs une ou plusieurs ressources partages. Tout nouvel algorithme (mthode, solution) de synchronisation doit tre confront ces problmes.18

Problmes Classiques

19N philosophes passent leurs temps soit manger, soit penser. Afin de manger, un philosophe doit utiliser 2 fourchettes. Malheureusement, il y a exactement autant de fourchettes que de philosophes. Ds quun philosophe fini de manger, il repose ses fourchettes et pense.Les philosophes dneurs

19

Problmes Classiques

20Problme du Barbier endormiDans ce cas la ressource est un barbier (pouvant modliser lUCTdun systme multiprogramm) et chaises dattente. Des clients viennent et demandent tre servis ; ils peuvent donc modliser des processus cherchant accder lUCT.Tche du barbier : Si au moins un client est prsent, il en prend un et lui coupe les cheveux ; Si aucun client nest prsent, il sassied dans son fauteuil et sendort. Tche dun client : Si le barbier est endormi, le client le rveille et se fait servir ; Si le barbier est occup et quil reste au moins une chaise disponible, le client sassied et attend son tour ; Sil ny a aucune chaise disponible, le client sen va.20

Smaphores

21Dfinitions :Un Smaphore est une variable (enregistrement) qui a une valeur indiquant le nombre de ressources disponibles et une liste de processus bloqus.

smaphore>=0 nombres dunits de la ressource disponible smaphore=0, - si s