Sémaphores par verrous



Documents pareils
Introduction à la programmation concurrente

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

Problèmes liés à la concurrence

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

Les arbres binaires de recherche

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Les structures de données. Rajae El Ouazzani

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

OS Réseaux et Programmation Système - C5

Programme Compte bancaire (code)

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

Les structures. Chapitre 3

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

Analyse de sécurité de logiciels système par typage statique

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

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

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

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

1.6- Génération de nombres aléatoires

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

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files

Algorithmique, Structures de données et langage C

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

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

Principes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle

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

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

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

Travaux Dirigés n 1 : chaînes de caractères

IRL : Simulation distribuée pour les systèmes embarqués

TD/TP PAC - Programmation n 3

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

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

Objets et Programmation. origine des langages orientés-objet

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Composants Logiciels. Le modèle de composant de CORBA. Plan

Cours d Algorithmique et de Langage C v 3.0

Programmation avec des objets : Cours 7. Menu du jour

Introduction au langage C

TD/TP PAC - Programmation n 3

SUPPORT DE COURS. Langage C

Traduction des Langages : Le Compilateur Micro Java

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Algorithmique I. Algorithmique I p.1/??

Cours de Systèmes d Exploitation

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

Cours de Programmation 2

Génération de code binaire pour application multimedia : une approche au vol

F. Barthélemy. 17 mai 2005

Comment devenir éditeur de logiciels libres quand on est une entreprise?

Corrigé des exercices sur les références

Chapitre VI- La validation de la composition.

Conventions d écriture et outils de mise au point

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Projet de programmation (IK3) : TP n 1 Correction

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

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

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

Compression de Données - Algorithme de Huffman Document de Conception

Programmation Orientée Objet Java

Chapitre 10. Les interfaces Comparable et Comparator 1

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Synchro et Threads Java TM

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Programmation Orientée Objet

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

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

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

Cours 1: Java et les objets

L exclusion mutuelle distribuée

Information utiles. webpage : Google+ : digiusto/

Cours 1 : Qu est-ce que la programmation?

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Chapitre 1 : La gestion dynamique de la mémoire

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

UE Programmation Impérative Licence 2ème Année

Programmation Objet Java Correction

Ordonnancement temps réel

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

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

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

Cours de C. Allocation dynamique. Sébastien Paumier

TP Temps Réel. Polytech Paris - Mars 2012

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

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

Poker. A rendre pour le 25 avril

Dérivation : Résumé de cours et méthodes

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

Cours 1 : La compilation

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Méthodes de programmation systèmes UE n NSY103. Notes de cours. Nombre d'heures : 55h (~ cours de 3 heures)

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

SRS DAY: Problématique liée à la virtualisation

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

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

Transcription:

Question: comment réaliser un sémaphore si nous ne disposons que de verrous? typedef struct pthread_mutex_t mutex, attente; i n t valeur; Semaphore; Semaphore *CreerSemaphore(unsigned val) Semaphore *s = (Semaphore *)malloc( sizeof(semaphore)); i f (s!= NULL) pthread_mutex_init(&s->mutex,null); pthread_mutex_init(&s->attente,null); s->valeur = val; return s; void DetruireSemaphore(Semaphore *s) pthread_mutex_destroy(&s->mutex); pthread_mutex_destroy(&s->attente); free(s); void P(Semaphore *s) i f (s->valeur < 0) void V(Semaphore *s) i f (s->valeur <= 0) April 24, 2013 1 / 5

void P(Semaphore *s) i f (s->valeur < 0) void V(Semaphore *s) i f (s->valeur <= 0) April 24, 2013 2 / 5

i f (s->valeur < 0) ; i f (s->valeur <= 0) valeur 2 mutex ouvert Accès

T 1 i f (s->valeur < 0) ; i f (s->valeur <= 0) valeur 2 mutex ouvert Accès

T 1 i f (s->valeur < 0) ; i f (s->valeur <= 0) valeur 2 mutex fermé Accès

i f (s->valeur < 0) T 1 ; i f (s->valeur <= 0) valeur 1 mutex fermé Accès

i f (s->valeur < 0) ; T 1 i f (s->valeur <= 0) valeur 1 mutex fermé Accès

i f (s->valeur < 0) ; i f (s->valeur <= 0) valeur 1 mutex ouvert Accès T1

T 2 i f (s->valeur < 0) ; i f (s->valeur <= 0) valeur 1 mutex ouvert Accès T1

T 2 i f (s->valeur < 0) ; i f (s->valeur <= 0) valeur 1 mutex fermé Accès T1

i f (s->valeur < 0) T 2 ; i f (s->valeur <= 0) valeur 0 mutex fermé Accès T1

i f (s->valeur < 0) ; T 2 i f (s->valeur <= 0) valeur 0 mutex fermé Accès T1

i f (s->valeur < 0) ; i f (s->valeur <= 0) valeur 0 mutex ouvert Accès T1,T2

T 3 i f (s->valeur < 0) ; i f (s->valeur <= 0) valeur 0 mutex ouvert Accès T1,T2

T 3 i f (s->valeur < 0) ; i f (s->valeur <= 0) valeur 0 mutex fermé Accès T1,T2

i f (s->valeur < 0) T 3 ; i f (s->valeur <= 0) valeur -1 mutex fermé Accès T1,T2

i f (s->valeur < 0) T 3 ; i f (s->valeur <= 0) valeur -1 mutex fermé Accès T1,T2

i f (s->valeur < 0) ; T 3 i f (s->valeur <= 0) valeur -1 mutex ouvert Accès T1,T2

T 4 i f (s->valeur < 0) ; T 3 i f (s->valeur <= 0) valeur -1 mutex ouvert Accès T1,T2

T 4 i f (s->valeur < 0) ; T 3 i f (s->valeur <= 0) valeur -1 mutex fermé Accès T1,T2

i f (s->valeur < 0) T 4 ; T 3 i f (s->valeur <= 0) valeur -2 mutex fermé Accès T1,T2

i f (s->valeur < 0) T 4 ; T 3 i f (s->valeur <= 0) valeur -2 mutex fermé Accès T1,T2

i f (s->valeur < 0) ; T 3 T 4 i f (s->valeur <= 0) valeur -2 mutex ouvert Accès T1,T2

T 5 i f (s->valeur < 0) ; T 3 T 4 i f (s->valeur <= 0) valeur -2 mutex ouvert Accès T1,T2

T 5 i f (s->valeur < 0) ; T 3 T 4 i f (s->valeur <= 0) valeur -2 mutex fermé Accès T1,T2

i f (s->valeur < 0) T 5 ; T 3 T 4 i f (s->valeur <= 0) valeur -3 mutex fermé Accès T1,T2

i f (s->valeur < 0) T 5 ; T 3 T 4 i f (s->valeur <= 0) valeur -3 mutex fermé Accès T1,T2

i f (s->valeur < 0) ; T 3 T 4 T 5 i f (s->valeur <= 0) valeur -3 mutex ouvert Accès T1,T2

i f (s->valeur < 0) ; T 3 T 4 T 5 T 1 i f (s->valeur <= 0) valeur -3 mutex ouvert Accès T2

i f (s->valeur < 0) ; T 3 T 4 T 5 T 1 i f (s->valeur <= 0) valeur -3 mutex fermé Accès T2

i f (s->valeur < 0) ; T 3 T 4 T 5 i f (s->valeur <= 0) T 1 valeur -2 mutex fermé Accès T2

i f (s->valeur < 0) ; T 3 T 4 T 5 i f (s->valeur <= 0) T 1 valeur -2 mutex fermé Accès T2

i f (s->valeur < 0) ; T 3 T 4 T 5 i f (s->valeur <= 0) T 1 valeur -2 mutex ouvert Accès T2

i f (s->valeur < 0) ; T 3 T 4 T 5 T 2 i f (s->valeur <= 0) valeur -2 mutex ouvert attente ouvert Accès

i f (s->valeur < 0) ; T 3 T 4 T 5 T 2 i f (s->valeur <= 0) valeur -2 mutex fermé attente ouvert Accès

i f (s->valeur < 0) ; T 3 T 4 T 5 i f (s->valeur <= 0) T 2 valeur -1 mutex fermé attente ouvert Accès

i f (s->valeur < 0) ; T 3 T 4 T 5 i f (s->valeur <= 0) T 2 valeur -1 mutex fermé attente ouvert Accès

i f (s->valeur < 0) ; T 3 T 4 T 5 i f (s->valeur <= 0) T 2 valeur -1 mutex ouvert attente ouvert Accès

i f (s->valeur < 0) ; T 3 T 4 T 5 i f (s->valeur <= 0) valeur -1 mutex ouvert attente ouvert Accès

i f (s->valeur < 0) ; T 4 T 5 i f (s->valeur <= 0) valeur -1 mutex ouvert Accès T3

i f (s->valeur < 0) ; T 5 i f (s->valeur <= 0) valeur -1 mutex ouvert T4 Accès T3

i f (s->valeur < 0) ; i f (s->valeur <= 0) valeur -1 mutex ouvert T4,T5 Accès T3

Exercices Exercices 1 Comment faut-il modifier l implémentation d un sémaphore donnée par l algorithme du transparent 1 si nous voulons que les valeurs du sémaphore soient sur des entiers non signés (unsigned int)? 2 Comment implémentez-vous un verrou si vous ne disposez que de sémaphores? La sémantique du verrou doit évidemment être préservée. 3 Commentez la différence entre les deux codes suivants: void *tache(void *) pthred_mutex_t mutex= PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&mutex); printf("section critique\n"); pthread_mutex_unlock(&mutex); void *tache(void *) s t a t i c pthred_mutex_t mutex= PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&mutex); printf("section critique\n"); pthread_mutex_unlock(&mutex); April 24, 2013 4 / 5

Exercices Exercice Nous désirons réaliser une application possédant 2 tâches. Le programme principal est en charge de lancer les deux tâches. Etant donné que les tâches, une fois lancées, doivent attendre un signal du programme principal pour s exécuter, comment résoudre le problème à l aide de verrous? Et à l aide de sémaphores? April 24, 2013 5 / 5