Sémaphores. Plan. But. Introduction Définition Modèle intuitif Remarques



Documents pareils
INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

Problèmes liés à la concurrence

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Cours de Systèmes d Exploitation

On appelle variable condition une var qui peut être testée et

Introduction à la programmation concurrente

Ordonnancement temps réel

4. Outils pour la synchronisation F. Boyer, Laboratoire Sardes

REALISATION d'un. ORDONNANCEUR à ECHEANCES

1 Mesure de la performance d un système temps réel : la gigue

Synchro et Threads Java TM

Cours 2: Exclusion Mutuelle entre processus (lourds, ou légers -- threads)

Cours A7 : Temps Réel

Chapitre 4 : Exclusion mutuelle

Projet gestion d'objets dupliqués

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Les systèmes de gestion de version

Les processus légers : threads. Système L3, /31

Conception des systèmes répartis

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

Temps Réel. Jérôme Pouiller Septembre 2011

DAns un système multi-utilisateurs à temps partagé, plusieurs processus

Initiation au HPC - Généralités

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Réplication des données

L exclusion mutuelle distribuée

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

Bases de données avancées Concurrence d'accès et reprise

Guide d installation et d utilisation

Exécutif temps réel Pierre-Yves Duval (cppm)

Les transactions 1/46. I même en cas de panne logicielle ou matérielle. I Concept de transaction. I Gestion de la concurrence : les solutions

Introduction à la Programmation Parallèle: MPI

Partie 7 : Gestion de la mémoire

Cours de Base de Données Cours n.12

Génie Logiciel avec Ada. 4 février 2013

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Structurer ses données : les tableaux. Introduction à la programmation

Cours Bases de données 2ème année IUT

Traduction des Langages : Le Compilateur Micro Java

Université de La Rochelle. Réseaux TD n 6

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

<Insert Picture Here> Solaris pour la base de donnés Oracle

IFT Systèmes d exploitation - TP n 1-20%

Cours de Programmation en Langage Synchrone SIGNAL. Bernard HOUSSAIS IRISA. Équipe ESPRESSO

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

Gestion de mémoire secondaire F. Boyer, Laboratoire Sardes

Programmation Objet - Cours II

Introduction aux algorithmes répartis

Algorithmique avec Algobox

Algorithme. Table des matières

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

LOG4430 : Architecture et conception avancée

Etude de l ENT de l Université de Paris 5. Mise en place d outils de suivi de la charge de l ENT (monitoring)

Exercices INF5171 : série #3 (Automne 2012)

Introduction : les processus. Introduction : les threads. Plan

Systèmes d Exploitation - ENSIN6U3. Aix-Marseille Université

Métriques de performance pour les algorithmes et programmes parallèles

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Chapitre 2. Les processus. 2.1 Introduction. 2.2 les différents états d un processus

Noyau de concurrence par moniteur pour Java ou C# pour une autre sémantique plus fiable et plus performante

Définition des Webservices Ordre de paiement par . Version 1.0

Installation et configuration d un serveur DHCP (Windows server 2008 R2)

Gestion des processus

NOTE D ORIENTATION 2015

Cours 6 : Tubes anonymes et nommés

Programmation linéaire

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

Rappels sur les suites - Algorithme

Chapitre 5 : Flot maximal dans un graphe

Programmation C++ (débutant)/instructions for, while et do...while

OCL - Object Constraint Language

Aides pour restaurer les parties communes des immeubles en copropriété. Aides pour restaurer un logement locatif

Annexe 6. Notions d ordonnancement.

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Europresse.com. Pour bibliothèque d enseignement Pour bibliothèque publique. Consulter facilement la presse. Guide version 1.

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Programmation d Applications Concurrentes et Distribuées (INF431)

INITIATION AU LANGAGE JAVA

Gestion répartie de données - 1

Plan du cours Cours théoriques. 29 septembre 2014

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Pré-conditions : Evénement déclencheur : le client souhaite un virement. Description du déroulement du cas : Description des Use cases

Genie Logiciel Avancé Projet :Gestion d une chaîne hotelier low cost

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Cours Programmation Système

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

Plateforme PAYZEN. Définition de Web-services

Introduction aux Systèmes et aux Réseaux

Configuration d un Client VPN «TheGreenBow» 1) Création d un compte utilisateur dans la base LDAP Netasq

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Gestion distribuée (par sockets) de banque en Java

Auditcon 2 SERIES MODÈLES 252 ET 552 MODE D EMPLOI

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Classes et Objets en Ocaml.

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Transcription:

Plan Troisième partie Sémaphores 1 Spécification Introduction 2 Utilisation des sémaphores Schémas de base Schéma producteurs/consommateurs Contrôle fin de l accès concurrent aux ressources partagées 3 Mise en œuvre des sémaphores Utilisation des la gestion des processus Sémaphore général à partir de sémaphores binaires L inversion de priorité 2 / 27 4 / 27 But Contenu de cette partie présentation d un objet de synchronisation minimal (sémaphore) patrons de conception élémentaires utilisant les sémaphores exemple récapitulatif (schéma producteurs/consommateurs) schémas d utilisation pour le contrôle fin de l accès aux ressources partagées mise en œuvre des sémaphores Fournir un moyen simple, élémentaire, de contrôler les e ets des interactions entre processus isoler (modularité) : atomicité spécifier des interactions précises : synchronisation Exprimer ce contrôle par des interactions sur un objet partagé (indépendant des processus en concurrence) plutôt que par des interactions entre processus (dont le code et le comportement seraient alors interdépendants) 3 / 27 5 / 27

Dijkstra 1968 Un sémaphore S est un objet dont l état val est un attribut entier privé (l état est encapsulé) l ensemble des états permis est contraint par un invariant (contrainte de synchronisation) : invariant S.val 0 (l état doit toujours rester positif ou nul) l interface fournit deux opérations principales : P : décrémente l état s il est strictement positif ; bloque sinon. V :incrémentel état. les opérations P et V sont atomiques S.val S.P() S.V() Un sémaphore peut être vu comme un tas de jetons avec 2 actions Attention Prendre un jeton, en attendant si nécessaire qu il y en ait ; Déposer un jeton. les jetons sont anonymes et illimités : un processus peut déposer un jeton sans en avoir pris ; il n y a pas de lien entre le jeton déposé et le processus déposeur ; lorsqu un processus dépose un jeton et que des processus sont en attente, un seul d entre eux peut prendre ce jeton. 6 / 27 8 / 27 Compléments Autres noms des opérations : P : down, wait/attendre, acquire/prendre V : up, signal/signaler, release/libérer Autre opération : création (et/ou initialisation) S = newsemaphore(v 0 ) (ou S.init(v 0 )) (crée et) initialise l état de S à v 0 Si la précondition de S.P() (c est-à-dire S.val > 0) n est pas vérifiée, le processus est retardé ou bloqué. l invariant du sémaphore peut aussi s exprimer à partir des nombres #P et #V d opérations P et V e ectuées : invariant S.val = S.val init +#V #P 1 Lors de l exécution d une opération V,s il existe plusieurs processus en attente, la politique de choix du processus à débloquer peut être : par ordre chronologique d arrivée (FIFO) : équitable associée à une priorité a ectée aux processus en attente indéfinie. C est le cas le plus courant : avec une primitive rapide mais non équitable, on peut implanter (laborieusement) une solution équitable, mais avec une primitive lente et équitable, on ne peut pas implanter une solution rapide. 2 Variante : P non bloquant (tryp) (k > 0 ^ S.val = k 1 ^ r) S.val = k r S.tryP() _(k =0^ S.val = k ^ r) Attention aux mauvais usages :incite à l attente active. 7 / 27 9 / 27

Sémaphore binaire Verrou Schémas d utilisation essentiels (1/4) Sémaphore S encapsulant un entier b tel que {S.b =1} S.P() {S.b =0} {true} S.V () {S.b =1} Un sémaphore binaire est di érent d un sémaphore entier initialisé à 1. Souvent nommé verrou/lock Opérations P/V = lock/unlock ou acquire/release Réalisation de l isolation : sections critiques mutex = new Semaphore(1) // initialisé à 1 Protocole d exclusion mutuelle (pour chacun des processus) : mutex.p() section critique mutex.v() Généralisation : limiter à Max le nombre d utilisateurs simultanés d une ressource R accèsr = new Semaphore(Max) // initialisé à Max Protocole d accès à la ressource R (pour chaque processus) : accèsr.p() accès à la ressource R accèsr.v() 10 / 27 12 / 27 Plan Schémas d utilisation essentiels (2/4) 1 Spécification Introduction 2 Utilisation des sémaphores Schémas de base Schéma producteurs/consommateurs Contrôle fin de l accès concurrent aux ressources partagées Synchronisation élémentaire : attendre/signaler un événement E occurrencee = new Semaphore(0) // initialisé à 0 attendre une occurrence de E : occurrencee.p() signaler l occurence de l événement E : occurrencee.v() 3 Mise en œuvre des sémaphores Utilisation des la gestion des processus Sémaphore général à partir de sémaphores binaires L inversion de priorité 11 / 27 13 / 27

Schémas d utilisation essentiels (3/4) Synchronisation élémentaire : rendez-vous entre 2 processus A et B Problème : garantir l exécution virtuellement simultanée d un point donné du flot de contrôle de A et d un point donné du flot de contrôle de B Objets partagés : aarrivé = new Semaphore(0); barrivé = new Semaphore(0) // initialisés à 0 Protocole de rendez-vous : Processus A Processus B...... aarrivé.v() barrivé.v() barrivé.p() aarrivé.p()...... Schéma producteurs/consommateurs : tampon borné Producteur Producteur tampon borné tampon de taille borné et fixé Consommateur Consommateur Consommateur nombre indéterminé et dynamique de producteurs de consommateurs 14 / 27 16 / 27 Schémas d utilisation essentiels (4/4) Généralisation : rendez-vous à N processus ( barrière ) Fonctionnement : pour passer la barrière, un processus doit attendre que les N 1 autres processus l aient atteint. barrière = tableau [0..N-1] de Semaphore; pour i := 0 à N-1 faire barrière[i].init(0) finpour; Protocole de passage de la barrière (pour le processus i) : pour k := 0 à N-1 faire barrière[i].v() finpour; pour k := 0 à N-1 faire barrière[k].p() finpour; producteur produire(i) {i : Item} libre.p() { 9 places libres } mutex.p() { dép^ot dans le tampon } tampon[prod] := i prod := prod + 1 mod N mutex.v() { 9 places occupées } plein.v() 0 N 1 cons prod consommateur plein.p() { 9 places occupées } mutex.p() { retrait du tampon } i := tampon[cons] cons := cons + 1 mod N mutex.v() { 9 places libres } libre.v() consommer(i) {i : Item} Sémaphores : mutex := 1, libre := N, plein := 0 15 / 27 17 / 27

Contrôle fin du partage (1/3) : pool de ressources Contrôle fin du partage (3/3) : lecteurs/rédacteurs N ressources critiques, équivalentes, réutilisables usage exclusif des ressources opération allouer k apple N ressources opération libérer des ressources précédemment obtenues bon comportement : pas deux demandes d allocation consécutives sans libération intermédiaire un processus ne libère pas plus que ce qu il détient Mise en œuvre de politiques d allocation :FIFO,priorités... Une ressource peut être utilisée : concurremment par plusieurs lecteurs (plusieurs lecteurs simultanément) ; exclusivement par un rédacteur (pas d autre rédacteur, pas d autre lecteur). Souvent rencontré sous la forme de verrou lecture/écriture (read-write lock). Permet l isolation des modifications avec un meilleur parallélisme que l exclusion mutuelle. Stratégies d allocation pour des classes distinctes de clients... 18 / 27 20 / 27 Contrôle fin du partage (2/3) : philosophes et spaghettis Plan N philosophes sont autour d une table. Il y a une assiette par philosophe, et une fourchette entre chaque assiette. Pour manger, un philosophe doit utiliser les deux fourchettes adjacentes à son assiette (et celles-là seulement). Un philosophe peut être : penseur : il n utilise pas de fourchettes ; mangeur : il utilise les deux fourchettes adjacentes ; aucun de ses voisins ne peut manger ; demandeur : il souhaite manger mais ne dispose pas des deux fourchettes. Allocation multiple de ressources di érenciées, interblocage... 19 / 27 1 Spécification Introduction 2 Utilisation des sémaphores Schémas de base Schéma producteurs/consommateurs Contrôle fin de l accès concurrent aux ressources partagées 3 Mise en œuvre des sémaphores Utilisation des la gestion des processus Sémaphore général à partir de sémaphores binaires L inversion de priorité 21 / 27

Implantation d un sémaphore Repose sur un service de gestion des processus fournissant : l exclusion mutuelle (cf partie II) le blocage (suspension) et déblocage (reprise) des processus Implantation Sémaphore = h int nbjetons ; File<Processus> bloqués i Compléments (1/3) : réalisation d un sémaphore général à partir de sémaphores binaires Sg = hval :=?, mutex = new SemaphoreBinaire(1), accès = new SemaphoreBinaire(val>0;1;0) // verrous i Sg.P() = Sg.accès.P() Sg.mutex.P() S.val S.val - 1 si S.val 1 alors Sg.accès.V() Sg.mutex.V() Sg.V() = Sg.mutex.P() S.val S.val + 1 si S.val =1 alors Sg.accès.V() Sg.mutex.V() 22 / 27! les sémaphores binaires ont (au moins) la même puissance d expression que les sémaphores généraux 24 / 27 Algorithme S.P() = S.V() = entrer en excl. mutuelle si S.nbjetons = 0 alors insérer self dans S.bloqués suspendre le processus courant sinon S.nbjetons S.nbjetons - 1 finsi sortir d excl. mutuelle entrer en excl. mutuelle si S.bloqués 6= vide alors procréveillé extraire de S.bloqués débloquer procréveillé sinon S.nbjetons S.nbjetons + 1 finsi sortir d excl. mutuelle Compléments (2/3) : sémaphores et priorités Temps-réel ) priorité ) sémaphore non-fifo. Inversion de priorités : un processus moins prioritaire bloque/retarde indirectement un processus plus prioritaire. Priorité 100 Priorité 50 Priorité 10 réveil s.p() s.p() réveil fin s.v() 23 / 27 25 / 27

Compléments (3/3) : solution à l inversion de priorité Plafonnement de priorité (priority ceiling) : monter systématiquement la priorité d un processus verrouilleur à la priorité maximale des processus potentiellement utilisateurs de cette ressource. Nécessite de connaître a priori les demandeurs Augmente la priorité même en l absence de conflit + Simple et facile à implanter + Prédictible : la priorité est associée à la ressource Héritage de priorité : monter dynamiquement la priorité d un processus verrouilleur à celle du demandeur. + Limite les cas d augmentation de priorité aux cas de conflit Nécessite de connaître les possesseurs d un sémaphore Dynamique ) comportement moins prédictible 26 / 27 Conclusion Les sémaphores + ont une sémantique, un fonctionnement simples à comprendre + peuvent être mis en œuvre de manière e cace + sont su sants pour réaliser les schémas de synchronisation nécessaires à la coordination des applications concurrentes mais sont un outil de synchronisation élémentaire, aboutissant à des solutions di ciles à concevoir et à vérifier! schémas génériques 27 / 27