Chapitre 3 Coopération et synchronisation par variables partagées

Slides:



Advertisements
Présentations similaires
Module Systèmes d’exploitation
Advertisements

GEF 435 Principes des systèmes d’exploitation
Premier programme en C :
La boucle for : init7.c et init71.c
Synchronisation de Processus
1 CNAM Vendredi 29 Novembre 2002 Bases de Données Avancées UV C Responsable : Mr Scholl PROTOCOLE A DEUX PHASES Meryem Guerrouani.
Portée des variables VBA & Excel
Synchronisation des processus père - fils
Module Systèmes d’exploitation
Module Systèmes dexploitation Chapitre 6 Communication Interprocessus Partie III École Normale Supérieure Tétouan Département Informatique
GEF 435 Principes des systèmes d’exploitation
GEF 435 Principes des systèmes d’exploitation
GEF 435 Principes des systèmes dexploitation Communication Interprocessus (CIP) II (Tanenbaum 2.3)
GEF 435 Principes des systèmes dexploitation Communication Interprocessus (CIP) III (Tanenbaum 2.3)
Synchronisation des Processus
Conception et programmation Programmation Parallèle
Exécutif Temps réel. Limitation des système classiques Rappels Mise en œuvre lourde des communications entre processus Problème de prédictibilité avec.
C.
Plan Présentation de la Solution. Le Protocole MESI
Mémoire & Processus Cours SE - SRC
Jc/md/lp-01/05Trains_presentation1 Threads et Synchronisation Application train Présentation.
Parallel Programming in C with MPI and OpenMP
Systèmes d'exploitations Les redirections d'entrées/sorties GRARI Mounir ESTO Année 2011.
Structures de données linéaires
Rappel sur la synchronisation des processus
Exclusion mutuelle répartie
Synchronisation et communication entre processus
II. Chaînage, SDD séquentielles
Analyse lexicale Généralités Expressions rationnelles Automates finis
Atomicité Transactions Atomiques Recouvrement à Base de Journal
Course Critique Race Condition
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Cours de CPI Philippe Bancquart CPI 2005.
Etude de cas : buffer clavier
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
Module 51 Module 5 - Synchronisation de Processus (ou threads, ou fils ou tâches) Module 5 - Synchronisation de Processus (ou threads, ou fils ou tâches)
Programmation concurrente
Chapitre 6 (Silberchatz)
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Communication interprocessus
Parallel Programming in C with MPI and OpenMP
NOTIONS DE BASE DES SYSTÈMES TEMPS-RÉEL
Synchronisation de Processus (ou threads, ou fils ou tâches)
Chapitre 7 continuation
Chapitre 6 : Synchronisation des processus et des fils
Synchronisation Classique
Synchronisation de Processus
Les Opérateurs Ils régissent toutes les opérations ou transformations sur les valeurs des variables. Opérateur d'affectation Opérateurs arithmétiques Opérateurs.
Systèmes d’exploitation
Exemple de gestion d'un buffer clavier en liste circulaire
LES PILES ET FILES.
SYSTÈME D’EXPLOITATION I
Gestion de processus Corrigé TD 1 EFREI I
Travailler avec des processus
8PRO100 Éléments de programmation Comment répéter plusieurs fois une séquence d’instructions.
NOTIONS DE BASE DES SYSTÈMES TEMPS-RÉEL Sujets Concepts de processus/thread concurrents –Windows NT et la programmation temps réel Lectures: Chapitres.
Interactions entre Processus
 Syntaxe du langage PHP
Programmation Système et Réseau
Ait Ahmed Madjid Cohen Lior Jaballah Seddik Leborgne Fabien
1 PHP 5 Notions fondamentales (niveau 1 – cours #2) Formation continue – Cégep de Sainte-Foy.
Systèmes d’exploitation Processus conclusion Modèle conceptuel de processus Pour masquer les effets des interruptions, les SE fournissent un modèle conceptuel.
02/10/2015Les structures de contrôle1 COURS A2I12 Initiation à l'algorithmique illustrée par le langage C Guillaume BOURLET Département GEII IUT Sénart/Fontainebleau.
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
Systèmes multitâches et systèmes temps réels. Systèmes temps réel.
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
O UTILS DE P ROGRAMMATION P OUR LES M ATHÉMATIQUES Mr. BENDIB. I MAA, LAMIS Laboratory, Université Larbi Tébessi - Tébessa.
1 UNIX AVANCE Yves PAGNOTTE – Janvier – PROCESSUS ET RESSOURCES.
Qu'est-ce que POSIX? Une librairie en langage C
Transcription de la présentation:

Chapitre 3 Coopération et synchronisation par variables partagées Problème de l’exclusion mutuelle action atomique Protocoles d’exclusion mutuelle Sémaphores

3.1. Problème de l’exclusion mutuelle Problème : Deux processus cycliques partageant une imprimante. Chaque processus imprime son identité n fois. Nous souhaitons que les résultats de l’impression ne soient pas mélangés P0 { for(;;) imprimer ’’p0’’ n fois; } P1 { for(;;) imprimer ’’p1’’ n fois; } Section Critique Rien n’empêche d’imprimer une séquence P0P0P1P0P1…. Comment empêcher ce phénomène? Comment exécuter la section critique en exclusion mutuelle

3.2 Action atomique Considérons un système centralisé Action atomique: action indivisible par exemple une instruction câblée Considérons un langage de programmation simple du style C séquence, if, while.. les processus peuvent utiliser des variables partagées (VP) affectation d’une VP par une valeur est atomique comparaison d’une VP avec une valeur est atomique pas d’instructions spéciales dans ce langage

3.3 Protocoles d’exclusion mutuelle Nous allons construire un protocole de l ’exclusion mutuelle entre deux processus. Nous considérons deux processus cycliques dénotés P0 et P1 qui partagent une section critique dénotées SC0 dans P0 et SC1dans P1. Nous prenons en compte les hypothèses suivantes: H1. Un processus ne restent pas infiniment dans sa section critique H2. Un processus en dehors du protocole ne peut pas interdire l’accès à la section critique H3. le protocole est construit en utilisant (un minimum) de variables partagées. H4. Les variables du protocoles sont privées H5. Le protocole enveloppe la section critique (Entrée; SC; Sortie) afin d’assurer son utilisation en exclusion mutuelle. H6. Aucune hypothèse concernant la vitesse des processus à part qu’elle est différentes de 0.

Protocole 0 V_P tour = 0 ou 1; P0 for(;;) { /* Entrée */ while ( tour != 0) ; SC0; tour = 1; } P1 for(;;) { /* Entrée */ while ( tour != 1) ; SC1; tour = 0; } Exclusion mutuelle est assurée A rejeter H2 n’est pas respectée

Protocole 1 V_P tour; P0 for(;;) { /* Entrée */ tour = 0; while ( tour != 0) ; SC0; tour = 1; } P1 for(;;) { /* Entrée */ tour = 1; while ( tour != 1) ; SC1; tour = 0; } A rejeter H5 n’est pas respectée

Protocole 2 V_P D[2] = (0,0); P0 for(;;) { /* Entrée */ D[0] = 1; while ( D[1]) ; SC0; D[0] = 0; } P1 for(;;) { /* Entrée */ D[1] = 1; while ( D[0]) ; SC1; D[1] = 0; } Exclusion mutuelle est assurée A rejeter Livelock: attente mutuelle

Protocole 3 V_P D[2] = (0,0); P0 for(;;) { /* Entrée */ D[0] = 1; while ( D[1]) {D[0] = 0; while ( D[1]); }; SC0; D[0] = 0; } P1 for(;;) { /* Entrée */ D[1] = 1; while ( D[0]) {D[1] = 0; while ( D[0]); } ; SC1; D[1] = 0; } Exclusion mutuelle est assurée A rejeter Livelock: attente mutuelle

Protocole 4 V_P D[2] = (0,0); tour=0 ou 1; P0 for(;;) { /* Entrée */ D[0] = 1; while ( D[1]) if (tour !=0) {D[0] = 0; while ( D[1]); }; SC0; D[0] = 0; tour = 1; } P1 for(;;) { /* Entrée */ D[1] = 1; while ( D[0]) if (tour !=1) {D[1] = 0; while ( D[0]); } ; SC1; D[1] = 0; tour = 0; } Exclusion mutuelle est assurée Pas d’attente mutuelle A rejeter: Famine

Protocole 5 Dekker 1968 V_P D[2] = (0,0); tour=0 ou 1; P0 for(;;) { /* Entrée */ D[0] = 1; while ( D[1]) if (tour !=0) {D[0] = 0; while ( tour == 1); }; SC0; D[0] = 0; tour = 1; } P1 for(;;) { /* Entrée */ D[1] = 1; while ( D[0]) if (tour !=1) {D[1] = 0; while ( tour == 0); } ; SC1; D[1] = 0; tour = 0; } Exclusion mutuelle est assurée Pas d’attente mutuelle Pas de famine

Protocole 5 Peterso 1981 V_P D[2] = (0,0); tour; P0 for(;;) { /* Entrée */ D[0] = 1; tour = 1; while ( (D[1]) && ( tour ==1) ) ; SC0; D[0] = 0; } P1 for(;;) { /* Entrée */ D[1] = 1; tour = 0; while ( (D[0]) && ( tour ==0) ) ; SC1; D[1] = 0; } Exclusion mutuelle est assurée Pas d’attente mutuelle Pas de famine

Problème Boucle d’attente active Charge des UC Solution Opération de blocage À l a place de la boucle d’attente active performance

Semaphore de Dikstra 1968 Idée : Guichet d’un cinéma Compteur de ticket File d’attente Compteur initialisé au nombre des places libres S’il n’y a pas de tickets attendre dans la file; Décrémenter le compteur; Pour entrer on doit prendre un ticket Pour sortir on rend le ticket Incrémenter le compteur; débloquer, éventuellement, Si la file n’est pas vide, la tête

Semaphore struct { int count; fifo F; } Init (Semaphore S, Natural N) { S.count = N; créer(S.F);} P(Semaphore S) { if (S.count == 0) {inserer (num_proc_courant, S.F); bloquer(proc_courant); } S.count--; V(Semaphore S) { S.count ++; if (!vide(S.F)) {extraire(num_proc_courant,S.F); debloquer(num_proc_courant); } Init, P et V s’exécutent en exclusion mutuelle Init joue le rêle d’un constructeur P est libre si on est bloqué

Utilisation des sémaphores Attendre un événement et protection des ressources Exemple 1 Attendre un événement L’événement est mémorisé Semaphore S; Init(S,0); P0 { ………/* attendre un événement */ ………./* S.count > 0 */……. P(S); ………./* S.count ≥ 0 */……. } Événement { /* signaler */ ………./* S.count ≥ 0 */……. V(S); ………./* S.count > 0 */……. }

Exemple 2 Exclusion mutuelle Entre N processus Semaphore Mutex; Init(Mutex,1); Pi { P( Mutex); SCi; V(Mutex); }

Exemple 3 Producteur Consommateur Buffer : un message consommateur producteur Déposer 1 prélever Ce n’est pas un problème d’exclusion mutuelle Deux problèmes on ne doit pas perdre de message un message est consommé une et une seule fois Problème de performance

message T; /* T est un buffer de la taille d’un message*/ Semaphore T_vide; Init(T_vide,1); Semaphore T_plein; Init(T_plein, 0); Producteur {message m; for(;;) { Construire(m); /*attendre, éventuellement, que T soit vide*/ P(T_vide); /* déposer m dans T */ T = m; /* signaler que T contient un nouveau message*/ V(T_plein); }; } Consommateur { message m; for(;;) { /*attendre, éventuellement, que T soit plein*/ P(T_plein); /* prélever m de T */ m = T; /* signaler que T est vide*/ V(T_vide); Consommer(m); }; }

Exemple 4 Producteur Consommateur Buffer : un message Solution: Augmenter la taille du Buffer consommateur producteur Déposer N prélever

message T [N]; /* T est un buffer de taille N*/ Semaphore T_vide Init(T_vide,N); Semaphore T_plein Init (T_plein, 0); Producteur {message m; int I = 0; for(;;) { Construire(m); /*attendre, éventuellement, qu’une case de T soit vide*/ P(T_vide); /* déposer m dans T */ T[I] = m; I = (I+1) N; /* signaler que T contient un nouveau message*/ V(T_plein); }; } Consommateur { message m; int J = 0; for(;;) { /*attendre, éventuellement, qu’une case de T soit pleine*/ P(T_plein); /* prélever m de T */ m = T [J]; J = (J+1) N; /* signaler que T est vide*/ V(T_vide); Consommer(m); }; }

Exemple 5 ProducteurS ConsommateurS Buffer : un message Plusieurs producteurs Plusieurs consommateurs N Déposer prélever Exclusion mutuelle Entre producteurs Exclusion mutuelle Entre consommateurs

message T [N]; /* T est un buffer de taille N*/ Semaphore T_vide; Init(T_vide,N); Semaphore T_plein; Init (T_plein, 0); Semaphore MutexP;Init(MutexP, 1); Semaphore MutexC; Init(MutexC,1); int I = 0; /* partagée par les producteurs int J = 0;/* partagée par les consommateurs Consommateurj { message m; for(;;) { /*attendre, éventuellement, qu’une case de T soit pleine*/ P(T_plein); /* prélever m de T */ P(MutexC); m = T [J]; J = (J+1) N; V(MutexC); /* signaler que T est vide*/ V(T_vide); Consommer(m); }; } Producteuri {message m; for(;;) { Construire(m); /*attendre, éventuellement, qu’une case de T soit vide*/ P(T_vide); /* déposer m dans T */ P(MutexP); T[I] = m; I = (I+1) N; V(MutexP); /* signaler que T contient un nouveau message*/ V(T_plein); }; }

lirea lireb ecrirec ecrired liree ecriref Exemple 6 Problème des Lecteurs /Rédacteurs Lecteurs Rédacteurs Fichier ecrire lirea lireb lire ecrirec ecrired liree ecriref

Exemple 6 Comportement d’un rédacteur Il interdit l’accès au fichier en lecture ou en écriture On résout le problème par un sémaphore d’exclusion mutuelle Semaphore w; Init(w,1); Rédacteur For(;;) { P(w); ecrire(f); V(w); }

Exemple 6 Comportement d’un lecteur Il peut lire en parallèle avec d’autres lecteurs Il doit être en exclusion mutuelle avec un rédacteur Un lecteur effectue un P(w) pour accéder au fichier en exclusion mutuelle. Solution 1 Lecteur for(;;) { P(w); ecrire(f); V(w); } On perd le parallélisme entre lecteurs

Exemple 6 Le premier lecteur effectue un P(w) pour accéder au fichier en exclusion mutuelle. solution2 S’il traverse cette barrière, un autre lecteur peut le suivre. S’il est bloqué alors un nouveau lecteur est bloqué derrière lui Il nous faut un compteur des lecteurs en cours int nlc = 0; /* auccun lecteur dans le fichier*/ If (nlc ==0) P(w); nlc++; Lire(F) Problème pour modifier nlc entre lecteurs Nlc--; If (nlc==0) V(w);

Exemple 6 int nlc = 0; /* auccun lecteur dans le fichier*/ Semaphore w; Init(w, 1); Semaphore MutexL; Init(MutexL, 1); Lecteur Famine Possible Des lecteurs P(MutexL ); If (nlc ==0) P(w); nlc++; V(MutexL); Redacteur for(;;) { P(w); ecrire(f); V(w); } Lire(F) P(MutexL ); nlc--; If (nlc==0) V(w); V(MutexL); Le premier lecteur est attente fait attendre toutes les nouvelles demandes de lectures Le dernier lecteur lance une cascade de réveil

Exemple 7 Solution 1 Phi For(;;) { Penser; Prendre (Fi,Fi-1); Manger; 5 philosophes se sont réunis autour d’une table ronde Pour philosopher et pour manger du spaghettis Chaque philosophe possède une fourchette Solution 1 3 Phi For(;;) { Penser; Prendre (Fi,Fi-1); Manger; Rendre (Fi,Fi-1); } 2 3 2 4 1 4 Temps fini 1 Atomiques À implémenter Mais pour manger il faut utiliser les deux fourchettes (sa fourchette qui est à sa droite et celle de son voisin gauche)

Exemple 7 Solution 1 Exclusion mutuelle entre deux voisins 5 philosophes se sont réunis autour d’une table ronde Pour philosopher et pour manger du spaghettis Chaque philosophe possède une fourchette Exclusion mutuelle entre deux voisins 3 2 1 3 2 1 2 4 1 2 3 4 3 4 4 1 Mais pour manger il faut utiliser les deux fourchettes (sa fourchette qui est à sa droite et celle de son voisin gauche)

Exemple 7 Parallélisme Possible entre deux Non voisins Solution 1 5 philosophes se sont réunis autour d’une table ronde Pour philosopher et pour manger du spaghettis Chaque philosophe possède une fourchette Solution 1 3 2 2 3 2 3 4 1 1 3 4 1 4 2 4 1 Mais pour manger il faut utiliser les deux fourchettes (sa fourchette qui est à sa droite et celle de son voisin gauche)

Exemple 7 Solution 1 Exclusion mutuelle entre deux voisins 5 philosophes se sont réunis autour d’une table ronde Pour philosopher et pour manger du spaghettis Chaque philosophe possède une fourchette Exclusion mutuelle entre deux voisins 3 Parallélisme possible entre deux non voisins 2 3 2 4 1 Famine cycle (0,3); (0,2); (4,2); (2,0); 4 1 Mais pour manger il faut utiliser les deux fourchettes (sa fourchette qui est à sa droite et celle de son voisin gauche)

Exemple 7 Solution 2 Avoir 4 sur 5 à Table Phi For(;;) 5 philosophes se sont réunis autour d’une table ronde Pour philosopher et pour manger du spaghettis Chaque philosophe possède une fourchette Avoir 4 sur 5 à Table Phi For(;;) { se_mettre_à_table; Penser; Prendre (Fi,Fi-1); Manger; Rendre (Fi,Fi-1); sortir_de_la_table; } 3 2 3 2 4 1 4 1 Mais pour manger il faut utiliser les deux fourchettes (sa fourchette qui est à sa droite et celle de son voisin gauche)

Solution 4 Prendre (Fi,Fi-1); Est coupée en 2 Solution 3 Deadlock 5 philosophes se sont réunis autour d’une table ronde Pour philosopher et pour manger du spaghettis Chaque philosophe possède une fourchette Solution 4 Prendre (Fi,Fi-1); Est coupée en 2 Solution 3 Deadlock possible Au moins un droitier Et Au moins un gaucher 3 2 Phg for(;;) { Penser; Prendre (Fi-1); Prendre(Fi); Manger; Rendre (Fi); Rendre(Fi-1); } Phd for(;;) { Penser; Prendre (Fi); Prendre(Fi-1); Manger; Rendre (Fi); Rendre(Fi-1); } 3 2 4 1 4 1 Mais pour manger il faut utiliser les deux fourchettes (sa fourchette qui est à sa droite et celle de son voisin gauche)