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 d’exploitation

Présentations similaires


Présentation au sujet: "Module Systèmes d’exploitation"— Transcription de la présentation:

1 Module Systèmes d’exploitation
BTS Génie Informatqiue École Normale Supérieure Tétouan Département Informatique Module Systèmes d’exploitation Chapitre 6 Communication Interprocessus Partie II Enseigant : AAMMOU Souhaib

2 Module Systèmes d'exploitation
BTS Génie Informatqiue Revue 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? Race Condition is where two or more processes are accessing shared data and the final result depends on the order in which the processes execute The Critical Region Enseigant : AAMMOU Souhaib

3 Module Systèmes d'exploitation
BTS Génie Informatqiue 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 Enseigant : AAMMOU Souhaib

4 Modèle Producteur/Consommateur
Module Systèmes d'exploitation BTS Génie Informatqiue 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 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. Enseigant : AAMMOU Souhaib

5 Primitives sleep() et wakeup()
Module Systèmes d'exploitation BTS Génie Informatqiue 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 Note: sleep() and wakeup() aren’t part of the standard C library, but they would be available for any system that actually had those system calls Enseigant : AAMMOU Souhaib

6 Primitives sleep() et wakeup()
Module Systèmes d'exploitation BTS Génie Informatqiue 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 () { if (compteur == 0) sleep() ; retirer_objet(o) compteur -- ; if (compteur == N-1) wakeup (producteur) ; consommer_objet(o) ; } Quel problème existe ici ? Dicté Cette solution est élégante, mais conduit aux conflits d’accès à la variable compteur. Considérant en effet la situation suivante : la file (tampon) est vide, et le consommateur vient de lire la valeur 0 ds la variable compteur; l’ordonnanceur l’interrompt et donne la main au producteur, qui insère un objet ds la file, incrémente le compteur, et appelle wakeup pour réveiller le consommateur; comme celui-ci n’était pas endormi, l’appel wakeup est sans effet (Réveils perdus); l’ordonnanceur donne la main au consommateur, qui appelle la routine sleep. Comme le producteur n’appellera plus la routine wakeup, et que le consommateur est endormi, le producteur remplira la file jusqu’à ce quelle soit pleine, puis s’endormira à son tour, et donc les deux processus seront bloqués (il y a interblocage). Ici encore, les problèmes apparaissent du fait de la non-atomicité du test et de l’action qui lui est associée. Solution voir diapositive suivant Enseigant : AAMMOU Souhaib

7 Primitives sleep() et wakeup()
Module Systèmes d'exploitation BTS Génie Informatqiue Primitives sleep() et wakeup() 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… Pourquoi la première solution est dangereuse? Pour la deuxième solution, on peut exhiber (découvrir = trouver) des situation à producteurs consommateurs multiples, pour les quelles autant de bits que de processus seraient nécessaires. Enseigant : AAMMOU Souhaib

8 Sémaphores Définition
Module Systèmes d'exploitation BTS Génie Informatqiue Sémaphores Dé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() Dans la littérature, on trouve parfois d’autres terminologies, respectivement, P() (proberen) et V() (verhogen) ou wait() et signal() ou get() et release(). Définition atomique, non-interruptibilité ; La définition précise d’atomicité, non-déterminisme etc. est un peu compliquée, et il y en a aussi des différentes… (les curieux pourraient faire une recherche Web sur ces mot clé) Ce que nous discutons dans ce cours est une 1ère approximation: une séquence d’ops est atomique si elle est exécutée toujours sans être interrompue par aucune autre séquence sur les mêmes données Ou son résultat ne dépend jamais de l’existence d’autres séquences en parallèle… Enseigant : AAMMOU Souhaib

9 Sémaphores Opérations
Module Systèmes d'exploitation BTS Génie Informatqiue Sémaphores Opé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? Enseigant : AAMMOU Souhaib

10 Module Systèmes d'exploitation
BTS Génie Informatqiue #define N // 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 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 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 producteur while (1) { // boucle infinie down(plein); // attente d’un objet (décrémente des places occupées) retirer_objet(o); // prendre l’objet courant (utilisation ressource) up(vide); // incrémente des places vides (une place est à prendre) consommer_objet(o) //consommer l’objet courant It is essential that down() and up() (the semaphores) be implemented in an indivisible way. We’ll discuss how next slide, for now simply consider how this works Give them all the details...even, make one of them explain... There are actually three semaphores here: One for counting the number of full slots One for counting the number of empty slots A semaphore to restrict access to the same area of memory as it is entirely possible that the consumer and producer could be able to proceed through their down(&empty) and down(&full) calls simultaneously Enseigant : AAMMOU Souhaib

11 Sémaphores Résolution du problème P/C
Module Systèmes d'exploitation BTS Génie Informatqiue 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 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 Enseigant : AAMMOU Souhaib

12 Sémaphores Résolution du problème P/C
Module Systèmes d'exploitation BTS Génie Informatqiue 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é Note if multiple CPUs used, then the semaphore should be protected by a lock variable and TSL instruction use as described previously Problème: 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. Enseigant : AAMMOU Souhaib

13 Sémaphores Résolution du problème P/C
Module Systèmes d'exploitation BTS Génie Informatqiue Sémaphores Résolution du problème P/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. Enseigant : AAMMOU Souhaib

14 Module Systèmes d'exploitation
BTS Génie Informatqiue Quiz Time! Questions? What is the name of a semaphore that only has two values? A binary semaphore Can up() and down() be implemented in user space? Almost certainly not as they need to disable interrupts while the value of the semaphore is being adjusted Enseigant : AAMMOU Souhaib


Télécharger ppt "Module Systèmes d’exploitation"

Présentations similaires


Annonces Google