Module Systèmes dexploitation Chapitre 6 Communication Interprocessus Partie II École Normale...

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

Transcript of Module Systèmes dexploitation Chapitre 6 Communication Interprocessus Partie II École Normale...

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

ModuleModuleSystèmes d’exploitationSystèmes d’exploitation

Chapitre 6

Communication Interprocessus

Partie II

École Normale SupérieureÉcole Normale SupérieureTétouanTétouan

Département InformatiqueDépartement Informatique

2008-2009

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

2

RevueRevue

• Qu’est-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?

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

3

SynopsisSynopsis

• 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

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

4

Modèle Producteur/ConsommateurModèle Producteur/Consommateur

Consommateur Producteur

Tampon de taille

• Les deux processus 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• 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.

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

5

Primitives sleep() et wakeup()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

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

6

Primitives sleep() et wakeup()Primitives sleep() et wakeup()#define N 100 // nbre d’emplacement ds

tampon

int compteur = 0 ; // nbre d’objets 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 ?

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

7

• Une première solution consiste à inhiber les interruptions avant les tests et à ne les restaurer qu’après. Cette solution est techniquement efficace, car le code de la fonction sleep est petit (il n’est 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) lorsqu’un processus fait l’objet d’un wakeup alors qu’il n’est pas endormi, et à n’endormir un processus que si son bit de réveil est à zéro (sinon, le bit est remis à zéro et le processus ne s’endort pas). – Que ce passe t’il si nous avons 2 consommateurs, 10, 100…

Primitives sleep() et wakeup()Primitives sleep() et wakeup()

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

8

SémaphoresSémaphoresDéfinitionDéfinition

• Les sémaphores sont introduits par DIJKS]RA on 1965 pour pallier des problèmes d’une 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()

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

9

SémaphoresSémaphoresOpérationsOpérations

• Un sémaphore possède la valeur 0 si aucun réveil n’à été mémorisé, et une valeur positive s’il y a un ou plusieurs réveils en attente.

• L’appel 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() s’endort.

• L’appel système up() incrémente la valeur du sémaphore si aucun processus n’est endormi du fait d’un appel down, ou réveille l’un des ces processus (choisi au hasard) sinon.

• Comment les sémaphores peuvent aider à résoudre le problème du producteur/consommateur?

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

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 d’exclusion mutuelle + un seul processus en SCsémaphore vide = N; // nb. de places libres + la file est toute videsémaphore plein = 0; // nb. de places occupées + aucun emplacement occupé

producteur() { //processus producteurwhile (1) { // boucle infinie

produire_objet (o); //produire un objetdown(vide); // on veut une place vide alors décrémenté des places libresdown(mutex); // on bloque la file (début section critique)mettre_objet(o); // mettre l’objet 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 producteurwhile (1) { // boucle infinie

down(plein); // attente d’un objet (décrémente des places occupées)down(mutex); // on bloque la file (début section critique)retirer_objet(o); // prendre l’objet 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 l’objet courant

}}

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

11

Sémaphores Sémaphores Résolution du problème PRésolution du problème P/C/C

• Notez que nous avons utilisé les sémaphores pour deux différentes intentions:– Le sémaphore mutex garantie l’exclusion mutuelle

pour l’accès d’une ressource partagée• Un sémaphore avec seulement deux états (0,1) s’appel

sémaphore binaire

– Les sémaphores full/empty sont utilisés pour la synchronisation; ils garantissent l’occurrence 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

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

12

Sémaphores Sémaphores Résolution du problème PRésolution du problème P/C/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é

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

13

Sémaphores Sémaphores Résolution du problème PRésolution du problème P/C/C

• L’utilisation des sémaphores, bien qu’amenant une simplification conceptuelle de la gestion des exclusions mutuelles, est encore fastidieuse et propice aux erreurs.

• Ainsi, si l’on 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.

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

14

Quiz Time!Quiz Time!

Questions?