1 Communication interprocessus. 2 Plan 1. Introduction 2. Sections critiques et exclusion mutuelle 3. Exclusion mutuelle par attente active 1. Le masquage.

Slides:



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

Synchronisation de Processus
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 dexploitation Communication Interprocessus (CIP) II (Tanenbaum 2.3)
Synchronisation des Processus
Chapitre 2 Processus & Threads
Rappel sur la synchronisation des processus
Synchronisation Classique
Interactions entre Processus
C++ Les fonctions. Présentation Utilité : Dès qu'un programme dépasse la centaine de lignes de code, il est pratique de pouvoir le décomposer en plusieurs.
CINI – Li115 1 Semaine 9 Algorithmes de tri ● Introduction ● Tri à bulle ● - principe ● - algorithme ● - efficacité ● Tri par sélection ● - principe, algorithme,
Chap. 71 Chapitre 7 continuation n Problèmes classiques de synchronisation n Lecteurs - Écrivains n Les philosophes mangeant n Moniteurs n Threads en Java.
Frédéric Le Mouël, Stéphane Frénot, Frédérique Laforest, Tarak Chaari – Dpt TC JAV 1 JAV – TD 8 Les threads en Java.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Observer le paramétrage d’un réseau. 2 Dans notre réseau téléphonique habituel, les postes, reliés à un auto-commutateur... …peuvent dialoguer, car.
1 Identifier les composants d’un réseau local. 2 Les composants d’un réseau Des ordinateurs, appelés stations... …munis d’une carte réseau leur permettant.
Mode noyau Appels Systèmes Interruptions Grégory Seront Institut Paul Lambin
Les Instructions Itératives (Les Boucles)
Introduction au Langage Pascal
Threads et Lightweight Processes
Chapitre 1 nombres, chaînes de caractères, booléens, et VARIABLES
Pas de variable globale
Les notions de classe et d'objet
Qu'est-ce que POSIX? Une librairie en langage C
Semaine #1 INF130 par Frédérick Henri.
Chapitre 01: Structure d'un module VHDL
L'approche asynchrone.
Principes de programmation (suite)
Master Réseaux et Systèmes Distribués (RSD)
Les fonctions.
Les fonctions.
L’Instruction de Test Alternatif
Algorithmiques Abdelbasset KABOU
1. Logique combinatoire vs Logique séquentielle
Chapitre 12 Surveillance des ressources et des performances
IDL_IDL bridge The IDL_IDLBridge object class allows an IDL session to create and control other IDL sessions, each of which runs as a separate process.
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
L E C ORPS D ’ UN A LGORITHME / P ROGRAMME – L A PARTIE I NSTRUCTION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie.
L’I NSTRUCTION DE T EST A LTERNATIF Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira, Bejaia Année.
L ES I NSTRUCTIONS I TÉRATIVES (L ES B OUCLES ) Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira,
De l’ordinateur au processus : rôle d’un système
Programmation en C++ C++ de base
1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité.
Modélisation avec UML 2.0 Partie II Diagramme de classes.
Système d’exploitation
Type Concret – Type Abstrait
Calcul Scientifique Initiation à SCILB
Places Send File Receive Messages.
La sécurité et le rôle du chef d’établissement
MINISTÈRE DE L’ENSEIGNEMENT SUPÉRIEUR ET DE LA RECHERCHE SCIENTIFIQUE
Les classes et les objets
Chapitre 7 continuation
SYSTèMES à évènements discrets
Les structures de base Listes chainées. Listes Les listes(similaire aux tableaux) sont des structures informatiques qui permettent de garder en mémoire.
Réunions Lync Participer à une réunion Lync Aide-mémoire Lync 2013
Définition : 2 Les structures de contrôle conditionnelles permettent à un programme de modifier son traitement en fonction d’une condition.
BUFFER CIRCULAIRE Meryem EL BAKRI. PLAN Introduction Buffer circulaire Fonctionnement.
Information, Calcul, Communication
Système d’exploitation: Principe IFT6800 – E 2008 Pierre Poulin.
Flowchart Itération Cours 04.
Principes de programmation (suite)
Piles et files.
Threads et Lightweight Processes
Encadré par : M. Mohammad EL GHABZOURI Elaboré par : - AZEGAMOUT Mohamed - ABOULKACEM abdelouahed - GOUN Ayoub EXPOSÉ Sous le thème : SER 2018 Parallélisme.
L.P.M Chapitre N°3 Les structures de contrôle itératives Dégager le traitement itératif Problème Nombre d’itération ?? Inconnu à l’avance Connu à l’avance.
CONFIGURATION D’UN ROUTEUR Introduction et planification du cours  Configuration d’un routeur  Administration d’un routeur  Protocoles RIP et IGRP 
Merise le modèle de traitement
Contenu Systèmes de test parallèles Multithreading Synchronisation
Les Commandes de base Linux. 1 L’aide sur les commandes Linux ◦ help : obtenir de l’aide pour une commande interne du shell. Elle permet aussi d'afficher.
Transcription de la présentation:

1 Communication interprocessus

2 Plan 1. Introduction 2. Sections critiques et exclusion mutuelle 3. Exclusion mutuelle par attente active 1. Le masquage des interruptions 2. Les variables de verrouillage 3. L’alternance stricte 4. La solution de Peterson 4. Exclusion mutuelle sans attente active a. Les primitives sleep et wakeup b. Les sémaphores c. Les moniteurs

3 Introduction Sur une plateforme multiprogrammée les processus ont généralement besoin de communiquer pour compléter leurs tâches. L’exécution d’un processus peut être affecter par l’exécution des autres processus ou il peut affecter lui-même leurs exécutions. La communication interprocessus est assurée généralement via des données partagées qui peuvent se trouver dans la mémoire principale ou dans un fichier. Les accès concurrents (simultanés) à des données partagées peuvent conduire à des incohérences dans les résultats obtenus.

4 Introduction: exemple illustratif Exemple : la spoule d’impression Processus A Processus B … f1f2 … f0 Répertoire de spoule Démon d’impression Variable partagée in=3 Schéma d’exécution: A : lire in, next_free_slot = 3 Interruption: la CPU bascule vers le processus B B : lire in, next_free_slot = 3, entrée3 = fichierB, in = 4 Problème: le fichierB ne sera jamais imprimé A : entrée3 = fichierA, in = 4

5 Sections critiques et exclusion mutuelle Le problème précédent est dû aux conflits d’accès à la même ressource. La partie du programme à partir de laquelle on accède à la ressource partagée est appelée section (région) critique. Solution: L’exclusion mutuelle est une méthode qui assure l’autorisation, à un seul processus, d’accès à une ressource partagée; les autres processus seront exclus de la même activité. A B t1t2t3t4 A entre dans sa section critique B tente d’entrer dans sa section critique A quitte sa section critique B entre dans sa section critique B quitte sa section critique

Sections critiques et exclusion mutuelle Quatre conditions doivent être vérifier pour assurer l’exclusion mutuelle: 1. Deux processus ne doivent pas se trouver simultanément dans leurs sections critiques. 2. Aucun processus à l’extérieur de sa section critique ne doit bloquer les autres processus. 3. Aucun processus ne doit attendre indéfiniment pour entrer dans sa section critique. 4. Il ne faut pas faire d’hypothèse quant à la vitesse ou le nombre de processeurs

7 attente Un processus désirant entrer dans une section critique doit être mis en attente si la section critique devient libre. Un processus quittant la section critique doit le signaler aux autres processus. Exclusion mutuelle par attente active Algorithme d’accès à une section critique : Entrer_Section_Critique () /* attente si SC non libre */ Section_Critique() /* un seul processus en SC */ Quitter_Section_Critique()

8 Exclusion mutuelle par attente active L’attente peut être : Active : la procédure Entrer_Section_Critique est une boucle dont la condition est un test qui porte sur des variables indiquant la présence ou non d’un processus en Section critique. Non active : le processus passe dans l’état endormi et ne sera réveillé que lorsqu’il sera autorisé à entrer en section critique.

9 Solution 1: Masquage des interruptions  Lorsqu’un processus entre en section critique il doit masquer les interruptions. Solutions de l’exclusion mutuelle par attente active Pas de commutation de processus  Lorsqu’ il quitte sa section critique il doit restaurer les interruptions. C’est une solution matérielle qui permet de résoudre complètement le problème. Mais elle est dangereuse en mode utilisateur s’il oublie de restaurer les interruptions.

10 Solutions de l’exclusion mutuelle par attente active Solution 2: Variables de verrouillage Un verrou est variable binaire partagée qui indique la présence d’un processus en section critique. si verrou=0 alors section critique libre si verrou=1 alors section critique occupée void entrer_Section_Critique () { while (verrou == 1) ; /* attente active */ verrou=1 ; } Void quitter_Section_Critique () { verrou=0 ; } Cette solution ne garantie pas l’exclusion mutuelle car le verrou est une variable partagée qui peut constituer aussi une section critique.

11 Solutions de l’exclusion mutuelle par attente active Solution 3: Alternance stricte Tour est une variable partagée qui indique le numéro de processus autorisé a entrer en section critique. void entrer_Section_Critique (int process) { while (Tour!=process) ; /* attente active */ } Void quitter_Section_Critique () { Tour = (Tour+1) %N ; } L’alternance stricte est une solution simple et facile a implémenter. Mais, un processus qui possède Tour peut ne pas être intéressé immédiatement par la section critique et en même temps il bloque un autre processus qui demandeur. Problème de famine

12 Exclusion mutuelle sans attente active L’idée est qu’un processus qui ne peut pas entrer en section critique passe à l’état bloqué au lieu de consommer le temps processeur inutilement. Il sera réveillé lorsqu’il pourra y entrer. Les primitives Sleep et Wakeup: Le système d’exploitation offre deux appels système: 1. Sleep (dormir) qui bloque le processus appelant. 2. Wakeup (réveiller) qui réveille le processus donné en argument.

13 Application des primitives Sleep et Wakeup au modèle Producteur Consommateur: Exclusion mutuelle sans attente active Producteur f1f2 … f0 Tampon Variable partagée compteur=3 Consommateur Deux processus (le producteur et le consommateur) 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.

14 #define N 100 /* taille du tampon */ int compteur = 0 ; /* objets dans tampon */ void producteur () { while (TRUE) { produire_objet() ; if (compteur == N) sleep () ; mettre_objet() ; compteur = compteur + 1 ; if (compteur == 1) wakeup(consommateur) ; } void consommateur () { while (TRUE) { if (compteur == 0) sleep() ; retirer_objet() compteur = compteur – 1 ; if (compteur == N-1) wakeup (producteur) ; consommer_objet(…) ; } Exclusion mutuelle sans attente active

15 Analyse de cette solution : 1.L’accès à la variable compteur n’est pas protégée, ce qui peut entraîner des incohérences dans les valeurs prises par cette Variable. 2.Réveils perdus : c’est le principal défaut de ce mécanisme. Un signal wakeup envoyé à un processus qui ne dort pas (encore)est perdu. Exclusion mutuelle sans attente active

16 Pour remédier au problème es réveils en attente (les wakeup perdus), l’idée est d’employer une variable entière appelée: Sémaphore à laquelle est associée une file d’attente des processus bloqués. sémaphore=0  aucun réveil n’est mémorisé sémaphore>0  un ou plusieurs réveils sont en attente Les sémaphores Un sémaphore s est manipulé par les opérations : 1.down(s) : - décrémente la valeur de s si s>0, - si s=0, alors le processus est mis en attente. 2.up(s) : - incrémente la valeur de s, - si un ou plusieurs processus sont en attente sur ce sémaphore, l'un d'entre eux est réveillé,

17 Pour assurer l’exclusion mutuelle un sémaphore peut être programmé de la manière suivante : initialisation mutex = 1 /* nombre de processus autorisés à entrer simultanément dans la section critique */ down (mutex) up (mutex) Les sémaphores Nom du sémaphore

18 Application au modèle Producteur / Consommateur : Trois sémaphores sont nécessaires: 1.plein: compte le nombre de places occupées 2.vide : compte le nombre de places libres 3.Mutex : assure que le producteur et le consommateur n'accèdent jamais en même moment à la mémoire tampon. Les sémaphores

Semaphore plein=0; /* contrôle les emplacements plein dans le tampon */ #define N 100 /* taille du tampon */ typedef int semaphore; /* les sémaphores sont des entiers */ semaphore mutex=1 ; /* contrôle d’accès à la section critique */ semaphore vide=N; /* contrôle les emplacements vide dans le tampon */ 19 Application au modèle Producteur / Consommateur : Les sémaphores

20 Application au modèle Producteur / Consommateur : Les sémaphores Semaphore plein=0; /* contrôle les emplacements plein dans le tampon */ void consommateur () { while (TRUE) { down(plein); down(mutex); retirer_objet() up(mutex); up(vide); consommer_objet(…) ; } } void producteur () { while (TRUE) {produire_objet() ; down(vide); down(mutex); mettre_objet() ; up(mutex); up(plein) } }

21 Un moniteur est un module de programme de haut niveau permettant au compilateur (pas au processus utilisateur) de réaliser l’exclusion mutuelle. Les moniteurs Un moniteur est constitué d'un ensemble de variables d'état et de procédures possédant les caractéristiques suivantes : 1.Seules certaines procédures, appelées entrées (entry) du moniteur peuvent être appelées de l'extérieur 2.Un seul processus actif dans un moniteur à un moment donné. 3.Les variables d'état ne sont pas visibles de l'extérieur du module 4.Le moniteur fournit des possibilités de synchronisation au moyen de conditions. 5.Une instruction initiale est exécutée une seule fois à l'initialisation du programme

22 Une condition C est une variable manipulable par seulement deux opérations : L'opération attendre(C) (en anglais wait(c)): bloque le processus appelant et le place en queue de file d'attente L'opération signaler(C) (en anglais signal(c)): retire un processus en tête de la file d'attente, si elle est non vide, et l'active Les moniteurs Une condition est implantée dans un système d’exploitation comme une file d'attente de processus bloqués, c'est à dire une structure de données capable de mémoriser le blocage de processus. En général, une condition de synchronisation est exprimée à l'aide d'une expression booléenne faisant intervenir les valeurs des variables d'état : SI NON ALORS attendre (c) FSI;

23 Algorithme Moniteur: Les moniteurs Moniteur ressource ; var ressource_libre : booleen; libre : condition; Procédure acquérir () debut si non ressource_libre alors attendre(libre) fsi; ressource_libre:= Faux; fin acquérir; Procédure libérer () debut ressource_libre := vrai; signaler(libre); fin liberer; debut ressource_libre := vrai; fin ressource; Nom du moniteur Fonction principale d’initialisation du moniteur Variables et conditions globales portant sur les ressources partagées. Procédure d’entrée en section critique Procédure quitter section critique

24 Application au modèle producteur consommateur: Les moniteurs monitor ProducteurConsommateur condition full, empty; integer count; procedure insert (item) begin if count = N then wait(full) insert_item(item); count++; if (count = 1) then signal(empty); end; procedure remove () begin if count = 0 then wait(empty); item = remove_item; count--; if (count = N –1) then signal(full); end; count = 0; end monitor; procedure producteur begin while true { item = produce_item; ProducteurConsommateur.insert(item); } end; procedure consommateur begin while true { item = ProducteurConsommateur.remove; consume_item(item); } end;

25

26

27