Moniteurs C/POSIX C15 NFP137 1

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

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

Problèmes liés à la concurrence

Introduction à la programmation concurrente

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

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

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

Cours de Systèmes d Exploitation

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

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

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

Projet gestion d'objets dupliqués

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

Sixième partie. Programmation multi-activités Java & Posix Threads. Généralités Java Threads POSIX Threads Autres approches

Premiers Pas en Programmation Objet : les Classes et les Objets

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

3IS - Système d'exploitation linux - Programmation système

Programmation Système (en C sous linux) Rémy Malgouyres LIMOS UMR 6158, IUT département info Université Clermont 1, B.P.

Cours de Programmation Impérative: Zones de mémoires et pointeurs

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

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

Un ordonnanceur stupide

ENSP Strasbourg (Edition ) Les Systèmes Temps Réels - Ch. DOIGNON. Chapitre 3. Mise en œuvre : signaux, gestion du temps et multi-activités

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

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

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

L exclusion mutuelle distribuée

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

Systèmes temps-réel. Plan général. Matthieu Herrb. Mars Introduction - concepts généraux

Les structures de données. Rajae El Ouazzani

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

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

Le prototype de la fonction main()

Cours 6 : Tubes anonymes et nommés

TP Temps Réel. Polytech Paris - Mars 2012

Bases de programmation. Cours 5. Structurer les données

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Corrigés des premiers exercices sur les classes

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

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Introduction à la Programmation Parallèle: MPI

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

La programmation des PIC en C. Les fonctions, les interruptions.

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

Introduction : les processus. Introduction : les threads. Plan

Programmation système en C/C++

SYSTÈME DE GESTION DE FICHIERS

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

Introduction aux Systèmes et aux Réseaux

RÉPUBLIQUE ET CANTON DE GENÈVE Echelle des traitements 2015 Valable dès le Office du personnel de l'etat Indexation de 0.

Cours d initiation à la programmation en C++ Johann Cuenin

Threads. Threads. USTL routier 1

Derrière toi Une machine virtuelle!

LOG4430 : Architecture et conception avancée

Cours Programmation Système

Claude Delannoy. 3 e édition C++

Le langage C. Séance n 4

INITIATION AU LANGAGE JAVA

Projet de programmation (IK3) : TP n 1 Correction

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

TP, première séquence d exercices.


TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Notion de thread (1/2)

CONTROLEUR D'IMPRESSION FIERY

Programme Compte bancaire (code)

Les structures. Chapitre 3

Ordonnancement temps réel

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Auto-évaluation Programmation en Java

La carte d'identité électronique (eid): manuel d'installation pour Windows

Introduction au pricing d option en finance

Java DataBaseConnectivity

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

LE CHAMP D APPLICATION

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

Algorithmes de recherche

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

Comment autoriser un programme à communiquer avec Internet sous Vista?

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Runtime. Gestion de la réactivité des communications réseau. François Trahay Runtime, LaBRI sous la direction d'alexandre Denis Université Bordeaux I

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

Examen d informatique première session 2004

LES AMORTISSEMENTS : CALCULS ENREGISTREMENTS

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Introduction au langage C

CD, DVD: quel disque choisir pour stocker ses fichiers?

Les arbres binaires de recherche

Programmation client-serveur sockets - RPC

Représentation d un entier en base b

Serveur d'archivage 2007 Installation et utilisation de la BD exist

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

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

Java Licence Professionnelle CISII,

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

TD3: tableaux avancées, première classe et chaînes

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

Transcription:

Moniteurs C/POSIX C15 NFP137 1

Synchronisation à l aide des Moniteurs Posix Samia Bouzefrane Maître de Conférences CEDRIC CNAM samia.bouzefrane@cnam.fr http://cedric.cnam.fr/~bouzefra C15 NFP137 2

Mécanismes étudiés Mutex Posix (sémaphore binaire) Moniteurs Posix : variables conditionnelles associées aux Mutex C15 NFP137 3

Gestion des Mutex Un «Mutex» est un sémaphore binaire pouvant prendre un des deux états "lock" (verrouillé) ou "unlock" (déverrouillé): valeur de sémaphore 1 ou 0 Un «Mutex» ne peut être partagé que par des threads d un même processus Un «Mutex» ne peut être verrouillé que par une seule thread à la fois. Une thread qui tente de verrouiller un «Mutex» déjà verrouillé est suspendu jusqu'à ce que le «Mutex» soit déverrouillé. C15 NFP137 4

Déclaration et et initialisation d'un Mutex Un mutex est une variable de type «thread_mutex_t» Il existe une constante PTHREAD_MUTEX_INITIALIZER de ce type permettant une déclaration avec initialisation statique du mutex (avec les valeurs de comportement par défaut) pthread_mutex_t monmutex = THREAD_MUTEX_INITIALIZER; Un mutex peut également être initialisé par un appel de la primitive int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *mutexattr); avec une initialisation par défaut lorsque mutexattr vaut NULL ex : pthread_mutex_init(&monmutex, NULL); C15 NFP137 5

Prise (verrouillage) d'un mutex Un mutex peut être verrouillé par la primitive int pthread_mutex_lock(pthread_mutex_t *mutex); Si le mutex est déverrouillé il devient verrouillé Si le mutex est déjà verrouillé par une autre thread la tentative de verrouillage suspend l'appelant jusqu'à ce que le mutex soit déverrouillé. C15 NFP137 6

Relâchement (déverrouillage) d'un mutex Un mutex peut être déverrouillé par la primitive int pthread_mutex_unlock(pthread_mutex_t *mutex); Si le mutex est déjà déverrouillé, cet appel n'a aucun effet (comportement par défaut) Si le mutex est verrouillé, une des threads en attente obtient le mutex (qui reprend alors l'état verrouillé) et cette thread redevient active (elle n'est plus bloquée) L'opération est toujours non bloquante pour l'appelant C15 NFP137 7

Exemple d'utilisation de de mutex #define N 10 /* Nb de cases du tampon */ pthread_mutex_t monmutex = PTHREAD_MUTEX_INITIALIZER; int tampon[n]; void Deposer(int m){ pthread_mutex_lock(&mutex); // déposer m dans tampon; pthread_mutex_unlock(&mutex); On verrouille le Mutex : accès exclusif On déverrouille le Mutex C15 NFP137 8

Moniteurs Posix Un moniteur Posix est l'association d un mutex ( type pthread_mutex_t ) qui sert à protéger la partie de code où l on teste les conditions de progression et d une variable condition ( type pthread_cond_t ) qui sert de point de signalisation : on se met en attente sur cette variable par la primitive : Libération du mutex + Blocage systématique de l appelant de manière atomique pthread_cond_wait(&lavariablecondition,&lemutex); on est réveillé sur cette variable avec la primitive : Réveil d une thread en attente qui acquiert à nouveau le mutex pthread_cond_signal(&lavariablecondition); C15 NFP137 9

Schéma d utilisation Soit la condition de progression C, Le schéma d utilisation des moniteurs Posix est le suivant : pthread_mutex_lock (&lemutex); évaluer C; while (! C ) { pthread_cond_wait(&lavariablecondition,&lemutex); ré-évaluer C si nécessaire Faire le travail; pthread_mutex_unlock(&lemutex); C15 NFP137 10

Exemple du du Prod/Cons avec les les moniteurs Posix #include <pthread.h> /* définition du tampon */ #define N 10 /* Nb de cases du tampon */ #define NbMess 20 /* Nb de messages échangés */ int NbPleins=0; int tete=0, queue=0; int tampon[n]; /* définition des conditions et du mutex */ pthread_cond_t vide; pthread_cond_t plein; pthread_mutex_t mutex; pthread_t tid[2]; C15 NFP137 11

Exemple (suite) void Deposer(int m){ pthread_mutex_lock(&mutex); if(nbpleins == N) pthread_cond_wait(&plein, &mutex); tampon[queue]=m; queue=(queue+1)%n; NbPleins++; pthread_cond_signal(&vide); pthread_mutex_unlock(&mutex); int Prelever(void){ int m; pthread_mutex_lock(&mutex); if(nbpleins ==0) pthread_cond_wait(&vide, &mutex); m=tampon[tete]; tete=(tete+1)%n; NbPleins--; pthread_cond_signal(&plein); pthread_mutex_unlock(&mutex); return m; C15 NFP137 12

Exemple (suite) void * Prod(void * k) /********** PRODUCTEUR */ { int i; int mess; srand(pthread_self()); for(i=0;i<=nbmess; i++){ usleep(rand()%10000); /* fabrication du message */ mess=rand()%1000; Deposer(mess); printf("mess depose: %d\n",mess); void * Cons(void * k) /********** CONSOMMATEUR */ { int i; int mess; srand(pthread_self()); for(i=0;i<=nbmess; i++){ mess=prelever(); printf("\tmess preleve: %d\n",mess); usleep(rand()%1000000); /* traitement du message */ C15 NFP137 13

Exemple (fin) void main() /* M A I N */ { int i, num; pthread_mutex_init(&mutex,0); pthread_cond_init(&vide,0); pthread_cond_init(&plein,0); /* creation des threads */ pthread_create(tid, 0, (void * (*)()) Prod, NULL); pthread_create(tid+1, 0, (void * (*)()) Cons, NULL); // attente de la fin des threads pthread_join(tid[0],null); pthread_join(tid[1],null); // libération des ressources pthread_mutex_destroy(&mutex); pthread_cond_destroy(&vide); pthread_cond_destroy(&plein); exit(0); C15 NFP137 14

Références Jean-François Peyre, supports de cours sur l informatique industrielle-systèmes temps réel, CNAM(Paris). Samia Bouzefrane, LES SYSTEMES D'EXPLOITATION: COURS ET EXERCICES CORRIGES UNIX, LINUX et WINDOWS XP avec C et JAVA (566 pages), Dunod Editeur, Octobre 2003, ISBN : 2 10 007 189 0. C15 NFP137 15