4. Outils pour la synchronisation F. Boyer, Laboratoire Lig Fabienne.Boyer@imag.fr

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

Introduction à la programmation concurrente

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

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

Problèmes liés à la concurrence

Threads. Threads. USTL routier 1

Cours de Systèmes d Exploitation

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

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

Synchro et Threads Java TM

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

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

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

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

Introduction : les processus. Introduction : les threads. Plan

Un ordonnanceur stupide

Systèmes d exploitation Gestion de processus

LOG4430 : Architecture et conception avancée

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Notion de thread (1/2)

Introduction aux systèmes temps réel. Iulian Ober IRIT

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

Introduction à la Programmation Parallèle: MPI

Projet gestion d'objets dupliqués

INITIATION AU LANGAGE JAVA

TD2 Programmation concurrentielle

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

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

TD2/TME2 : Ordonnanceur et Threads (POSIX et fair)

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

as Architecture des Systèmes d Information

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

Remote Method Invocation Les classes implémentant Serializable

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Programmation avec des objets : Cours 7. Menu du jour

Modélisation des interfaces matériel/logiciel

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Premiers Pas en Programmation Objet : les Classes et les Objets

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Corrigés des premiers exercices sur les classes

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Règlement sur le télémarketing et les centres d'appel. Call Centres Telemarketing Sales Regulation

Programmation d Applications Concurrentes et Distribuées (INF431)

Support Orders and Support Provisions (Banks and Authorized Foreign Banks) Regulations

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Calcul Parallèle. Cours 5 - JAVA RMI

Supervision et infrastructure - Accès aux applications JAVA. Document FAQ. Page: 1 / 9 Dernière mise à jour: 15/04/12 16:14

Programmer en JAVA. par Tama

Java Licence Professionnelle CISII,

ACTIVITÉ DE PROGRAMMATION

Plan du cours. Historique du langage Nouveautés de Java 7

2. Comprendre les définitions de classes

4. Groupement d objets

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

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

SugarCubes. Jean-Ferdinand Susini Maître de Conférences, CNAM Chaire systèmes enfouis et embarqués. Paris, le 9 janvier, 2009

Projet de programmation (IK3) : TP n 1 Correction

that the child(ren) was/were in need of protection under Part III of the Child and Family Services Act, and the court made an order on

Once the installation is complete, you can delete the temporary Zip files..

DAns un système d exploitation multiprogrammé en temps partagé, plusieurs

Une introduction à la technologie EJB (2/3)

Programmation Par Objets

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Programmation MacOSX / ios

MELTING POTES, LA SECTION INTERNATIONALE DU BELLASSO (Association étudiante de lʼensaparis-belleville) PRESENTE :

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Arbres binaires de recherche

France SMS+ MT Premium Description

Corrigé des exercices sur les références

COMPOSANTS DE L ARCHITECTURE D UN SGBD. Chapitre 1

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Paxton. ins Net2 desktop reader USB

Cours 1 : Qu est-ce que la programmation?

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

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

Utiliser une WebCam. Micro-ordinateurs, informations, idées, trucs et astuces

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Order Binding Certain Agents of Her Majesty for the Purposes of Part 1 of the Personal Information Protection and Electronic Documents Act

Programmation en Java IUT GEII (MC-II1) 1

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Auto-évaluation Programmation en Java

POLICY: FREE MILK PROGRAM CODE: CS-4

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

Introduction aux Systèmes et aux Réseaux

Cours 1: Java et les objets

Cours 6 : Tubes anonymes et nommés

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

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

RULE 5 - SERVICE OF DOCUMENTS RÈGLE 5 SIGNIFICATION DE DOCUMENTS. Rule 5 / Règle 5

Développement Logiciel

Compléter le formulaire «Demande de participation» et l envoyer aux bureaux de SGC* à l adresse suivante :

SNMP for cloud Jean Parpaillon. SNMP4cloud - 1

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

Transcription:

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig Fabienne.Boyer@imag.fr Le problème Insuffisance des solutions de base (verrous) Les solutions de plus haut niveau Les Sémaphores Les Moniteurs Les Sections Critiques Conditionelles 1

Ce cours a été conçu à partir de Cours de E. Berthelot http://www.iie.cnam.fr/%~eberthelot/ Cours de A. Sylberschatz www.sciences.univnantes.fr/info/perso/permanents/attiogbe/systeme/courssysteme.html Cours de A. Griffaut http://dept-info.labri.fr/~griffault/enseignement/se/cours Cours de H. Bouzourfi, D. Donsez http://www-adele.imag.fr/~donsez/cours/#se 2

Insuffisance des solutions de base pour la synchronisation Les verrous représentent une solution simple Ils ne permettent pas à eux-seuls de gérer des attentes passives conditionnelles 3

Solutions de plus haut niveau Les principes : exploiter la sémantique de l application pour Endormir un processus lorsqu il ne peut pas continuer à s exécuter Le réveiller lorsqu il peut continuer à s exécuter Les solutions : Les sémaphores Attente passive conditionnelle Les moniteurs Les sections critiques conditionnelles 4

Sémaphores (Dijkstra, 1965) Sémaphore S : compteur S.c file d attente S.f Modélise un nombre de ressources (ou une condition de passage) Processus en attente Fournit 2 opérations atomiques : P V Prendre une ressource Libérer une ressource 5

Sémaphores (Dijkstra, 1965) suspend() suspend le processus sourant et libère la SC wakeup(p) remet p dans la file des prêts wait() ou P (): S.c-- if S.c < 0 do { // no more free resources put(myself, S.f); suspend(); // suspension signal() ou V (): S.c++; if (S.c <= 0) do { // at least 1 waiting process P = get(s.f); wakeup(p); Sections critiques 6

Sémaphores Compteur S.c == S.c initial + NV - NP NV est le nombre d opérations V exécutées sur le sémaphore NP est le nombre d opérations P exécutées sur le même sémaphore Compteur S.c < 0 : correspond au nombre de processus bloqués Compteur S.c > 0 : correspond au nombre de ressources disponibles Compteur S.c == 0 : aucune ressource disponible et aucun processus bloqué 7

Problème du producteur/consommateur Msg Producteur Consommateur Conditions de dépôt et de retrait Dépôt : buffer non plein Retrait : buffernon vide Protéger les données partagées 8

Producteur / Consommateur Conditions de dépôt/retrait Soit on utilise des variables pour évaluer les conditions de dépôt et de retrait, et on protège ces variables par un sémaphore mutex Boolean notempty, notfull; Ou bien : Int nbempty, nbfull; Soit on utilise des sémaphores pour représenter les conditions de dépôt et de retrait Semaphore notempty, notfull; Protection des données partagées Sémaphore mutex 9

Producteur / Consommateur Données partagées : Msg buffer[] = new Msg[1]; // production condition Semaphore notfull = new Semaphore(1); // consommation condition Semaphore notempty = new Semaphore(0); // shared data protection Semaphore mutex = new Semaphore(1); 10

Producteur / Consommateur Processus Producteur : produce (Msg msg) { // if the buffer is full, wait until it becomes empty notfull.p(); mutex.p(); buffer[0] = msg; mutex.v(); // wakeup some waiting process notempty.v(); 11

Producteur / Consommateur Processus Consommateur Msg Consume { // if buffer is empty, wait until it becomes full notempty.p(); mutex.p(); Msg msg = buffer[0]; mutex.v(); // wakeup some waiting process notfull.v(); return msg; Mutex nécessaire? 12

Producteur / Consommateur Gestion d un buffer de N cases (N>1) Données partagées int buffersz; Msg buffer[]; Semaphore notfull; Semaphore notempty; int in = 0, out = 0; Semaphore mutex; Initialisation public ProdCons(int buffersz) { this.buffersz = buffersz; buffer = new Msg[bufferSz]; notfull = new Semaphore(bufferSz); notempty = new Semaphore(0); mutex = new Semaphore(1); 13

Producteur / Consommateur Processus Producteur, buffer à N cases (N>1) : Produce(Msg msg) { // if the buffer is full, wait until it becomes empty notfull.p(); mutex.p(); buffer[in] = msg; in = in + 1 % buffersz; mutex.v(); // wakeup some waiting process notempty.v(); 14

Producteur / Consommateur Processus Consommateur,buffer à N cases (N>1) Msg Consume() { // if buffer is empty, wait until it contains one message notempty.p(); mutex.p(); Msg msg = buffer[out]; out = out + 1 % buffersz; mutex.v(); // wakeup some waiting process notfull.v(); 15

Producteur / Consommateur Pas de parallélisme entre productions et consommations -> manque d efficacité Les opérations suivantes doivent être exclusives in = in + 1 % buffersz (resp.) out = out + 1 % buffersz mettre en SC la manipulation de in et de out Sémaphore mutexin = new Semaphore(1); Sémaphore mutexout = new Semaphore(1); 16

Producteur / Consommateur Processus Producteur, buffer à N cases (N>1) Produce(Msg msg) { // if buffer is full, wait for one empty entry notfull.p(); mutexin.p(); buffer[in] = msg; in = in + 1 % buffersz; mutexin.v(); // wakeup some waiting process notempty.v(); 17

Producteur / Consommateur Processus Consommateur, buffer à N cases (N>1) Msg Consume() { notempty.p(); // if buffer is empty, wait for one item mutexout.p(); Msg msg = buffer[out]; out = out + 1 % buffersz; mutexout.v(); notfull.v(); return msg; 18

Interblocages Les sémaphores ne garantissent pas une solution correcte : P(mutex); if P(S); interblocage possible else V(S); V(mutex); REGLE: jamais de blocage dans une SC sans libérer la SC La gestion des interblocages est étudiée au chapître 4 19

Le moniteur Module comprenant Des données Des procédures d accès (P1,..,Pn) Une procédure d initialisation Des conditions Les procédures sont exécutées en exclusion mutuelle Une condition est une structure fournissant deux opérations : - wait() bloque le processus courant - signal() réveille un processus bloqué s il y en a un. Le signal est fugace. en général, les conditions sont gérées de manière FIFO 20

Schéma de moniteur monitor <monitor-name> { <shared variables + conditions declarations> procedure P1 ( ) {... procedure P2 ( ) {... procedure Pn ( ) {... { initialization code 21

Fonctionnement d un moniteur Au maximum un seul processus actif dans le moniteur Lors d un signal Soit le signalant garde le moniteur (priorité signalant) Soit le signalé prend le moniteur (priorité signalé) Libération du moniteur Lorsque la procédure en cours est terminée Lors d un wait Lors de la libération du moniteur Le moniteur peut être alloué en priorité à un processus déjà dans le moniteur (un signalé ou un signalant selon la priorité appliquée lors du signal) Ou bien il n y a pas de règle (tous les processus sont en concurrence) 22

Moniteur Producteur/Consommateur Monitor ProdConsMonitor int buffersz = 0; int nbmsg = 0; Msg buffer[]; Condition notempty, notfull; procedure ini(int buffersz) this.buffersz = buffersz; buffer = new Msg[buffersz]; procedure produce(msg msg) if (nbmsg==buffer_sz) notfull.wait(); buffer[in] = msg; in = in + 1 % BUFFER_SZ; nbmsg++; procedure consume() : Msg if (nbmsg==0) notempty.wait(); Msg msg = buffer[out]; out = out + 1 % BUFFER_SZ; nbmsg-- notfull.signal(); notempty.signal(); 23

Les sections critiques conditionnelles Outil de synchronisation POSIX (verrou + condition) Gestion explicite de l exclusion mutuelle lock(verrou) wait(verrou, condition) signal(verrou, condition) unlock(verrou) wait( V, C ) libère le verrou V, bloque le processus courant sur C, puis reprend le verrou V à son réveil signal( V, C ) réveille un processus bloqué sur C, s il y en a un. (fugace) En général, verrous FIFO 24

SCC «Moniteur» (Implantation procédurale d un moniteur avec une SCC) monitor M { condition c; procedure P ( ) { wait(c)... signal(c) SCC M { condition c; lock l; void P ( ) { lock(l);... wait(c, l);... signal(c,l)... unlock(l); 25

Implantation des SCC priorité signalant avec vol de cycles class Scc { Lock mutex, condition; int nbwaiting; // number of processes waiting for the Scc public Scc { mutex = new Lock(); // this lock manages the Scc mutual exclusion condition = new Lock(); // this lock manages a FIFO waiting set of threads condition.lock(); // ensure that following calls to condition.lock will block nbwaiting = 0; public void lock () { mutex.lock(); public void unlock () { mutex.unlock(); 26

Implantation des SCC (2) priorité signalant avec vol de cycles public void wait() { nbwaiting++; mutex.unlock(); // free the Scc condition.lock(); // block the current process mutex.lock(); // come back in the Scc public void signal() { if (nbwaiting > 0) { nbwaiting--; condition.unlock(); // wake up a waiting process public void signalall() { while (nbwaiting > 0) { nbwaiting--; condition.unlock(); 27

Implantation des SCC à base de verrous priorité signalant sans vol de cycles class Scc { Lock mutex; Lock condition; int nbwaiting; // number of processes waiting for the Scc Lock wakeup; // to manage the coming back of the wakeup processes in the Scc int nbwakeup; // number of wakeup processes public Scc { mutex = new Lock(); condition = new Lock(); waked = new Lock(); condition.lock(); // ensure that following calls to condition.lock will block wakeup.lock(); // ensure that following calls to wakeup.lock will block nbwaiting = 0; nbwakeup = 0; 28

Implantation des SCC (2) priorité signalant sans vol de cycles public void lock () { mutex.lock(); public void unlock () { if (nbwakeup > 0) { nbwakeup --; wakeup.unlock(); // give the Scc to a wakeup process else { mutex.unlock(); // free the Scc 29

Implantation des SCC (3) priorité signalant sans vol de cycles public void wait() { nbwaiting++; this.unlock(); condition.lock(); // block myself in the condition waiting-set wakeup.lock(); //block myself in the wakeup waiting-set public void signal() { if (nbwaiting > 0) { nbwaiting--; condition.unlock(); nbwakeup++; public void signalall() { while (nbwaiting)> 0) { nbwaiting--; condition.unlock(); nbwakeup++; 30

Synchronisation Java Eléments synchronisés : Objets Classes Principes d un moniteur Méthodes synchronisées = exécutées en exclusion mutuelle Opérations wait et notify/notifyall pour gérer des conditions class Example { int cpt; // shared data public void synchronized get() { if (cpt <= 0) wait(); cpt--; public void synchronized put() { cpt++; notify(); 31

Principes d implantation de la synchronisation Java (1) Tout objet synchronisé possède un verrou (transparent / programmeur) Toute classe synchronisée possède un verrou (transparent / programmeur) Gestion FIFO / non FIFO dépend du JDK Méthodes synchronisées : Méthode d instance currentobject.lock() <méthode> currentobject.unlock() Méthode de classe (static) currentclass.lock() <méthode> currentclass.unlock() 32

Principes d implantation de la synchronisation Java (2) Tout objet / classe synchronisé(e) possède un verrou et une file de processus bloqués wait() put(current_thread, blocked) current.unlock() <stop the current thread> current.lock() notify() if!empty(blocked) { thread = get(blocked) wakeup(thread) 33

Codage des sémaphores en Java (<1.5) Class Semaphore { private int count; public semaphore(int count) { this.count = count; public synchronized void P() throws Exception { if ((--count) < 0) wait(); public synchronized void V() throws Exception { if ((++count) <= 0) notify(); 34