Année 2012-2013 Licence 2 TD 6. Synchronisation et Sémaphores



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

Problèmes liés à la concurrence

Introduction à la programmation concurrente

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

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

Cours de Systèmes d Exploitation

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

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

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

Programme Compte bancaire (code)

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

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

Synchro et Threads Java TM

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

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

Programmer en JAVA. par Tama

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

Algorithmique et Programmation, IMA

Java Licence Professionnelle CISII,

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

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Un ordonnanceur stupide

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

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

Utilisation d objets : String et ArrayList

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

Programmation système en C/C++

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

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

Le langage C. Séance n 4

Cours Programmation Système

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

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

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

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

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

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

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Programmation système

Solutions du chapitre 4

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

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

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Introduction au langage C

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

Threads. Threads. USTL routier 1

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

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

Les arbres binaires de recherche

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

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

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

Premiers Pas en Programmation Objet : les Classes et les Objets

as Architecture des Systèmes d Information

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Les structures. Chapitre 3

Introduction aux Systèmes et aux Réseaux

Projet de programmation (IK3) : TP n 1 Correction

Cours 6 : Tubes anonymes et nommés

INITIATION AU LANGAGE JAVA

Tp 1 correction. Structures de données (IF2)

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

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

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

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

Présentation du langage et premières fonctions

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Notions fondamentales du langage C# Version 1.0

Introduction : les processus. Introduction : les threads. Plan

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

Cours 1: Java et les objets

TP1 : Initiation à Java et Eclipse

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Les structures de données. Rajae El Ouazzani

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

Corrigé des exercices sur les références

Programmation Classique en langage C

Le prototype de la fonction main()

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

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

Programmation par les Objets en Java

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Java Licence Professionnelle CISII,

Programmation avec des objets : Cours 7. Menu du jour

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Corrigés des premiers exercices sur les classes

OCL - Object Constraint Language

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

REALISATION d'un. ORDONNANCEUR à ECHEANCES

TP : Gestion d une image au format PGM

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

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

TP3 : Manipulation et implantation de systèmes de fichiers 1

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

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

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Recherche dans un tableau

Transcription:

Institut Galilée Systèmes d exploitation et Réseaux Année 2012-2013 Licence 2 TD 6 Synchronisation et Sémaphores 1 Synchronisation : le coiffeur Une illustration classique du problème de la synchronisation est celui du salon de coiffure. Dans le salon de coiffure, il y a un coiffeur C, un fauteuil F dans lequel se met le client pour être coiffé et N sièges pour attendre. S il n a pas de clients, le coiffeur C somnole dans le fauteuil F. Quand un client arrive et que le coiffeur C dort, il le réveille, C se lève. Le client s assied dans F et se fait coiffer. Si un client arrive pendant que le coiffeur travaille : si un des N sièges est libre, il s assied et attend, sinon il ressort. Il s agit de synchroniser les activités du coiffeur et de ses clients avec des sémaphores. Les sémaphores utilisés sont initialisés ainsi : Init (SCF, 0); Init (SP, 0); Init (SX, 1); Programme client : Client() P(SX); if(attend < N) Attend = Attend + 1; V (SP); V (SX); P (SCF); SeFaireCoifferEtSortir(); else V(SX); Sortir(); Programme coiffeur : Coiffeur() while (1) P(SP); P(SX); Attend = Attend -1; V(SCF); V(SX); 1

Coiffer(); 1. Détailler le fonctionnement du coiffeur et de ses clients tels qu ils sont représentés par les deux fonctions Coiffeur et Client. 2. Quel est le rôle de chacun des sémaphores SCF, SP et SX? 2 Synchronisation : le carrefour Le carrefour ou le problème de la gestion des feux de circulation. La circulation au carrefour de deux voies est réglée par des signaux lumineux (feu vert/rouge). On suppose que les voitures traversent le carrefour en ligne droite et que le carrefour peut contenir au plus une voiture à la fois. On impose les conditions suivantes : 1. toute voiture se présentant au carrefour le franchit en un temps fini, 2. les feux de chaque voie passent alternativement du vert au rouge, chaque couleur étant maintenue pendant un temps fini. Les arrivées sur les deux voies sont réparties de façon quelconque. Le fonctionnement de ce système peut être modélisé par un ensemble de processus parallèles : 1. un processus P qui exécute la procédure Changement de commande des feux; 2. un processus est associé à chaque voiture; 3. le traversée du carrefour par une voiture qui circule sur la voie i (i = 1, 2) correspond à l exécution d une procédure Traverseei par le processus associé à cette voiture. On demande d écrire le programme Changement ainsi que les procédures Traversee1 et Traversee2. Remarque : Le processus P doit attendre que la voiture engagée dans le carrefour en soit sortie avant d ouvrir le passage sur l autre voie. 3 Synchronisation On se propose ici d écrire deux procédures Wait (P,V) et Set (P,V) : 1. Wait permet à un processus d attendre qu une variable P passe à une valeur V, 2. Set positionne P à la valeur V et libère tous les processus bloqués par la procédure Wait. Ces procédures pouvant être utilisées simultanément par plusieurs processus, il faudra être particulièrement attentif aux problèmes de synchronisation. On donne ci-dessous le canevas (pseudo C) de Wait et Set ainsi que les structures de données utilisées. Structure de données utilisée pour gerer P 2

struct Sema Sema1; /* Semaphore pour g\ erer la section critique */ Sema Sema2; /* Semaphore d attente de remise a jour */ int Count; /* Nombre de processus en attente */ int X; /* Donnee protegee */ Protected; La fonction Set : Set fait passer la variable P a la valeur V et libere ensuite tous les processus qui attendent le changement de valeur de P. void Set (Protected *P; int Valeur) int I; P->X = Valeur; for (I=0 ; I < P->Count ; I++) P->Count = 0; La fonction Wait: Wait bloque un processus tant que la variable X ne vaut pas V Le nombre de processus bloques est memorise dans Count void Wait (Protected *P; int Valeur) Boolean Do_Wait = True; while Do_Wait if (P->X == Valeur) Do_Wait = else P->Count++; if Do_Wait /* (1) */ 1. Comment doivent être initialisés Sema1 et Sema2? 2. Compléter Wait en remplaçant les *** par le code adéquat. 3. Compléter Set en remplaçant les *** par le code adéquat. 4. Que se passe-t-il dans ce scénario très particulier : (a) un processus P1 se bloque sur l instruction commentée (1) dans Wait (b) un processus P2 exécute ensuite intégralement Set 3

(c) un processus P3 fait alors appel à Wait plus précisément qu arrive-t-il à P3? Suggérez une solution en utilisant un troisième sémaphore qui assure le bon fonctionnement de l instruction commentée (1). 4

TD 6- Corrrection Synchronisation et Sémaphores 4 Synchronisation : le coiffeur Coiffeur 1. prend le 1er client de la file, s il y en a un (sinon il se bloque) 2. décrémente Attend (accès exclusif) 3. libère le siège du client (l invite à s asseoir) 4. Coiffe Client 1. incrémente Attend (accès exclusif) 2. Si le nombre de clients en attente est supérieur à N, sort 3. s ajoute à la file d attente 4. attend de pouvoir s asseoir dans le siège du coiffeur 5. se fait coiffer et sort. Rôle de chacun des sémaphores SCF, SP et SX : 1. SX : assure l accès en exclusion mutuelle à la variable Attend. Attendpermet de contrôler la taille maximale de la file d attente 2. SP : gère la file des clients en attente. Indique le nombre de ressources pour le coiffeur, c est à dire le nombre de clients en attente, 3. SCF : gère l accès au fauteil du coiffeur. Indique si le coiffeur est prêt à travailler ou non (il est la essource unique des clients). 5 Synchronisation : le carrefour Sémaphores utilisés : Init (X1, 1), Init (X2, 1), Init (SF1, 1), Init (SF2, 0); Changement Traversee1 Traversee2 int Feu = 1; P(SX1); P(SX2); while(1) P(SF1); P(SF2); sleep(duree_du_feu); Traversee(); Traversee(); if Feu == 1) V(SF1); V(SF2); P(SF1); V(SF2); Feu = 2; V(SX1); V(SX2); else P(SF2); V(SF1); Feu = 1; SX1 et SX2 sont introduits pour éviter que les voitures attendent sur SF1 et SF2 et bloquent de ce fait les changements de feu effectués par Changement. 5

6 Synchronisation Compléter Wait : Wait bloque un processus tant que la variable X ne vaut pas V Le nombre de processus bloques est memorise dans Count void Wait (Protected *P; int Valeur) Boolean Do_Wait = True; while Do_Wait P (P->Sema1); if (P->X == Valeur) Do_Wait = False; else P->Count++; V (P->Sema1); if Do_Wait P (P->Sema2); /* (1) */ Compléter Set : Set fait passer la variable P a la valeur V et libere ensuite tous les processus qui attendent le changement de valeur de P. void Set (Protected *P; int Valeur) int I; P (P->Sema1); P->X = Valeur; for (I=0 ; I < P->Count ; I++) V (P->Sema2); P->Count = 0; V (P->Sem Scénario très particulier : 1. un processus P1 se bloque sur l instruction commentée (1) dans Wait 2. un processus P2 exécute ensuite intégralement Set 3. un processus P3 fait alors appel à Wait plus précisément qu arrive-t-il à P3? Solution : dans Set :... for (I=0 ; I < P->Count ; I++) V (P->Sema2); P (S3);... dans Wait : if Do_Wait P (P->Sema2); V (S3) /* (1) */ 6

7 Synchronisation : barrière TP 6 Synchronisation et Sémaphores Ecrire les procédures d accès à un objet de type barrière, c est à dire dont le fonctionnement est le suivant : 1. la barrière est fermée à son initialisation, 2. elle s ouvre lorsque N processus sont bloqués sur elle. Définition de la barrière : struct Sema Sema1; /* S\ emaphore de section critique */ Sema Sema2; /* S\ emaphore de blocage sur la barriere */ int Count; /* Compteur */ int Maximum; /* Valeur d\ eclenchant l ouverture */ Barriere; 1. Complétez le code de la procédure d initialisation : void Init (Barriere *B; int Maximum) Init (B->Sema1, ); Init (B->Sema2, ); B->Count = ; B->Maximum = ; Complétez le code de la procédure d attente donné ci-dessous : 2. void Wait (Barriere *B) Boolean Do_Wait = True; int I; B->Count++; if (B->Count == B->Maximum ) for (I=0 ; I < (B->Maximum-1) ; I++ ) B->Count = 0; Do_Wait = if (Do_Wait) 7

8 Synchronisation - construction d une bote outils Le but de cet exercice est de construire quelques fonctions outils de haut niveau pour la gestion de la synchronisation entre processus. Toutes les fonctions demandées ci-dessous devront être déclarées dans un fichier en-tête ipctools.h et définies dans le fichier source ipctools.c correspondant. Ecrire les fonctions suivantes: 1. int semalloc(keyt key, int valinit); et int mutalloc(keyt key); qui créent un sémaphore (ou un mutex, la seconde n est qu un cas particulier de la première) et renvoient l identifiant associé ou -1 en cas d échec. 2. void P(int semid); et void V(int semid); qui implémentent les deux opérations principales vues en cours sur les sémaphores. 3. int semfree(int semid); et int mutfree(int mid); qui libèrent le sémaphore (resp. le mutex) associé l identifiant passé en paramètre. Si celui-ci a déj été libéré, les fonctions renvoient -1, sinon elles renvoient 0. 8

9 Synchronisation : barrière TP 6 -Correction Synchronisation et Sémaphores Complétez le code de la procédure d initialisation : void Init (Barriere *B; int Maximum) Init (B->Sema1, 1); Init (B->Sema2, 0); B->Count = 0 ; B->Maximum = N ; Complétez le code de la procédure d attente : void Wait (Barriere *B) Boolean Do_Wait = True; int I; P (P->Sema1); B->Count++; if (B->Count == B->Maximum ) for (I=0 ; I < (B->Maximum-1) ; I++ ) V (P->Sema2); B->Count = 0; Do_Wait = false; V (P->Sema1); if (Do_Wait) P (P->Sema2); 10 Synchronisation - construction d une bote outils Le fichier en-tête ********************************************* * * * Utilisation des segments de memoire partagee et des semaphores * pour la synchronisation de processus collaboratifs * ********************************************* #ifndef ipctools_h #define ipctools_h #include <sys/types.h> #include <sys/ipc.h> 9

* cree un SEMAPHORE ou un MUTEX. * La fonction renvoie le semid associe en cas de succes, -1 en cas * d echec. * Si le semaphore existe deja, la fonction le renvoie simplement. int semalloc(key_t key, int valinit); * attend un MUTEX ou SEMAPHORE void P(int semid); * libere un MUTEX ou SEMAPHORE void V(int semid); * detruit un MUTEX ou SEMAPHORE. * Si le semaphore a deja ete libere, retourne -1 int semfree(int semid); #endif ************** Le fichier source ********************************************* * * ********************************************* static char rcsid[] = "@(#)"; #include <stdio.h> #include "ipctools.h" #include <sys/sem.h> * cree un MUTEX ou SEMAPHORE * La fonction renvoie le semid associe en cas de succes, -1 en cas * d echec. * Si le semaphore existe deja, la valeur initiale est ignoree. int semalloc(key_t key, int valinit) int semid = semget(key,1,0); if (semid == -1) 10

semid = semget(key,1,ipc_creat IPC_EXCL 0600); if (semid == -1) return -1; if (semctl(semid,0,setval,valinit) == -1) /* il faut detruire le semaphore */ semctl(semid,0,ipc_rmid,0); return -1; return semid; static struct sembuf sp = 0,-1,0; /* decrementation du mutex */ static struct sembuf sv = 0, 1,0; /* incrementation du mutex */ * attend un MUTEX ou SEMAPHORE void P(int semid) semop(semid,&sp,1); * libere un MUTEX ou SEMAPHORE void V(int semid) semop(semid,&sv,1); * detruit un MUTEX ou SEMAPHORE * Si le semaphore a deja ete libere, retourne -1 int semfree(int semid) return semctl(semid,0,ipc_rmid,0); ************* 11