La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Module Systèmes dexploitation Chapitre 6 Communication Interprocessus Partie II École Normale Supérieure Tétouan Département Informatique 2008-2009.

Présentations similaires


Présentation au sujet: "Module Systèmes dexploitation Chapitre 6 Communication Interprocessus Partie II École Normale Supérieure Tétouan Département Informatique 2008-2009."— Transcription de la présentation:

1 Module Systèmes dexploitation Chapitre 6 Communication Interprocessus Partie II École Normale Supérieure Tétouan Département Informatique

2 2 Revue Quest-ce que la concurrence critique ( race condition )? Quel est le nom de la place dans un programme où la concurrence critique peut arriver? Quelles sont les quatre requis ou règles que les algorithmes de sections critiques doivent rencontrer?

3 3 Synopsis Modèle Producteur/Consommateur Exclusion mutuelle sans attente active: sleep() and wakeup() Sémaphores –Définition –Opérations –Résolution du problème du producteur/consommateur avec les sémaphores

4 4 Modèle Producteur/Consommateur Consommateur Producteur Tampon de taille Les deux processus coopèrent en partageant un même tampon –Le producteur produit des objets quil dépose dans le tampon –Le consommateur retire des objets du tampon pour les consommer Conflits –Le producteur veut déposer un objet alors que le tampon est déjà plein; –Le consommateur veut retirer un objet du tampon alors que celui-ci est vide; –Le producteur et le consommateur ne doivent pas accéder simultanément au tampon.

5 5 Primitives sleep() et wakeup() Les primitives sleep et wakup sont deux appels système: –Sleep() (dormir) qui suspend (held) le processus appelant –Wakeup(processus) (réveiller) qui réveille le processus donné en argument

6 6 Primitives sleep() et wakeup() #define N 100// nbre demplacement ds tampon int compteur = 0 ; // nbre dobjets ds tampon void producteur () { while (1) { produire_objet(o) ; if (compteur == N) sleep () ; mettre_objet(o) ; compteur ++ ; If (compteur == 1) wakeup(consommateur) ; } } void consommateur () { while (1) { if (compteur == 0) sleep() ; retirer_objet(o) compteur -- ; if (compteur == N-1) wakeup (producteur) ; consommer_objet(o) ; } } Quel problème existe ici ?

7 7 Une première solution consiste à inhiber les interruptions avant les tests et à ne les restaurer quaprès. Cette solution est techniquement efficace, car le code de la fonction sleep est petit (il nest en effet pas nécessaire ici de protéger les test de wakeup. Mais cette solution est dangereuse en mode utilisateur. Une deuxième solution consisterait à stocker un bit de réveil en attente ( wakeupwaiting) lorsquun processus fait lobjet dun wakeup alors quil nest pas endormi, et à nendormir un processus que si son bit de réveil est à zéro (sinon, le bit est remis à zéro et le processus ne sendort pas). –Que ce passe til si nous avons 2 consommateurs, 10, 100… Primitives sleep() et wakeup()

8 8 Sémaphores Définition Les sémaphores sont introduits par DIJKS]RA on 1965 pour pallier des problèmes dune méthode plus ancienne basée sur des appels de sleep() (basculement en mode bloqué) et wakeup() (basculement en mode prêt) directs, qui pouvaient engendrer des interblocages. ils sont maintenant largement utilisés dans les systèmes d'exploitation modernes. Un sémaphore S est une variable entière non négative à partir de laquelle sont définies deux opérations atomiques : –Up() –down()

9 9 Sémaphores Opérations Un sémaphore possède la valeur 0 si aucun réveil nà été mémorisé, et une valeur positive sil y a un ou plusieurs réveils en attente. Lappel système down() décrémente la valeur du sémaphore lorsque celle-ci est supérieure à 0, sinon le processus qui a appelé down() sendort. Lappel système up() incrémente la valeur du sémaphore si aucun processus nest endormi du fait dun appel down, ou réveille lun des ces processus (choisi au hasard) sinon. Comment les sémaphores peuvent aider à résoudre le problème du producteur/consommateur?

10 10 #define N 100// nombre de places dans la file (taille de la file) typedef int sémaphore; //Les sémaphores partagés par tous les processus sémaphore mutex = 1;// sémaphore dexclusion mutuelle + un seul processus en SC sémaphore vide = N;// nb. de places libres + la file est toute vide sémaphore plein = 0;// nb. de places occupées + aucun emplacement occupé producteur() {//processus producteur while (1) { // boucle infinie produire_objet (o);//produire un objet down(vide);// on veut une place vide alors décrémenté des places libres down(mutex);// on bloque la file (début section critique) mettre_objet(o);// mettre lobjet en file (utilisation ressource) up(mutex);// libération de la file (fin section critique) up(plein);// incrémente des places occupées (un objet est à prendre) } consommateur(){//processus producteur while (1) {// boucle infinie down(plein);// attente dun objet (décrémente des places occupées) down(mutex);// on bloque la file (début section critique) retirer_objet(o);// prendre lobjet courant (utilisation ressource) up(mutex);// libération de la file (fin section critique) up(vide);// incrémente des places vides (une place est à prendre) consommer_objet(o)//consommer lobjet courant }

11 11 Sémaphores Résolution du problème P/C Notez que nous avons utilisé les sémaphores pour deux différentes intentions: –Le sémaphore mutex garantie lexclusion mutuelle pour laccès dune ressource partagée Un sémaphore avec seulement deux états (0,1) sappel sémaphore binaire –Les sémaphores full/empty sont utilisés pour la synchronisation; ils garantissent loccurrence ou la non occurrence de certaines séquences dévénements ie: Le producteur arrête de produire quand le tampon est plein et le consommateur arrête de consommer quand le tampon est vide

12 12 Sémaphores Résolution du problème P/C Pour que cela marche, les fonctions up() et down() doivent être implémentés comme actions atomiques... Tout le reste est basé sur ce fait –Typiquement atteint en les implémentant comme appels de système où les interruptions sont désactivées par le SE Ceci est bon parce que les opérations sont seulement quelques instructions Seulement le sémaphore est mis à jour et possiblement un processus éveillé

13 13 Sémaphores Résolution du problème P/C Lutilisation des sémaphores, bien quamenant une simplification conceptuelle de la gestion des exclusions mutuelles, est encore fastidieuse et propice aux erreurs. Ainsi, si lon inverse par mégarde les deux down dans le code du consommateur, et si la file est vide, le consommateur se bloque sur sémaphore plein après avoir positionné le sémaphore mutex, et le producteur se bloque sur son appel à mutex sans pouvoir débloquer le sémaphore plein, réalisant ainsi un interblocage.

14 14 Quiz Time! Questions?


Télécharger ppt "Module Systèmes dexploitation Chapitre 6 Communication Interprocessus Partie II École Normale Supérieure Tétouan Département Informatique 2008-2009."

Présentations similaires


Annonces Google