Université Paris Diderot Master 1 II. Théorie et pratique de la concurrence



Documents pareils
Problèmes liés à la concurrence

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

Cours de Systèmes d Exploitation

L exclusion mutuelle distribuée

Chapitre 4 : Exclusion mutuelle

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

Conception des systèmes répartis

Introduction à la programmation concurrente

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)

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

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

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

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

Un ordonnanceur stupide

Programmation linéaire

Introduction aux algorithmes répartis

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

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

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

Modèles à Événements Discrets. Réseaux de Petri Stochastiques

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

CEG4566/CSI4541 Conception de systèmes temps réel

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

Cours 1 : Qu est-ce que la programmation?

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

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

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

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

Théorie et Codage de l Information (IF01) exercices Paul Honeine Université de technologie de Troyes France


Intégration et probabilités TD1 Espaces mesurés

Plateforme PAYZEN. Définition de Web-services

Introduction à la Programmation Parallèle: MPI

Les systèmes de gestion de version

Network musical jammin

Cours de Génie Logiciel

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

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

Algorithmique des Systèmes Répartis Protocoles de Communications

SPF FIN. Patris Spécification de Use Case: 15-UC01 Obtenir de l'information patrimoniale. Version 1.1

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

Algorithmique répartie

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

Les structures de données. Rajae El Ouazzani

Représentation d un entier en base b

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

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

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

Cours Programmation Système

UFR de Mathématiques et Informatique Année 2009/2010. Réseaux Locaux TP 04 : ICMP, ARP, IP

UML et les Bases de Données

Intégration et probabilités TD1 Espaces mesurés Corrigé

Cours 1 : La compilation

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

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

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

Encryptions, compression et partitionnement des données

Initiation à la programmation en Python

Présentation du langage et premières fonctions

Algorithmique et Programmation, IMA

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

Recherche dans un tableau

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

Systèmes et algorithmes répartis

REALISATION d'un. ORDONNANCEUR à ECHEANCES

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

Cours d algorithmique pour la classe de 2nde

Sélection du contrôleur

Algorithmique et programmation : les bases (VBA) Corrigé

Le langage C. Séance n 4

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

OPTENET DCAgent Manuel d'utilisateur

OCL - Object Constraint Language

L informatique en BCPST

INF 232: Langages et Automates. Travaux Dirigés. Université Joseph Fourier, Université Grenoble 1 Licence Sciences et Technologies

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

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

Cours 1 : introduction

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

Licence Sciences et Technologies Examen janvier 2010

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

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

Guide d utilisation - Intranet de l ASG Pour utilisateurs d Albatros Version 8.7

Programmation d Applications Concurrentes et Distribuées (INF431)

Gestion des transactions et accès concurrents dans les bases de données relationnelles

NOTIONS DE RESEAUX INFORMATIQUES

Pourquoi l apprentissage?

STAGE IREM 0- Premiers pas en Python

LES TYPES DE DONNÉES DU LANGAGE PASCAL

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

Expérience 3 Formats de signalisation binaire

Sciences de Gestion Spécialité : SYSTÈMES D INFORMATION DE GESTION

Ordonnancement temps réel

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

Solutions du chapitre 4

Correction TD algorithmique

Groupe symétrique. Chapitre II. 1 Définitions et généralités

Model checking temporisé

Transcription:

Université Paris Diderot Master 1 II Théorie et pratique de la concurrence Partiel du 30 avril 2009 Durée : 1h30. Tous les documents sont autorisés. Le barème est indicatif. Question 1 : Soit le programme Promela suivant : (7 points) int n=0; a c t i v e proctype Q( ) { q1 : n=n+1; q2 : n=n+1; q3 : s k i p } a c t i v e proctype P( ) { p1 : do : : n < 2 > p2 : p r i n t n : : else > p3 : p r i n t od } 1. Construire les exécutions qui affichent les mots suivants (donnés sous forme d expressions régulières) : 012 *, 002 *, 0 *. 2. Ecrire en LTL les propriétés suivantes en explicitant les proposition atomiques utilisés : (a) 2 doit apparaître dans l affichage (b) 2 apparaît au plus une fois (c) 2 apparaît une infinité de fois (d) 2 peut apparaître que après 0 3. Pour chaque propriété ci-dessus, indiquer sa classe (vivacité, sûreté ou les deux) et sa valeur de vérité pour le programme considéré. Question 2 : (8 points) L algorithme du jeton circulaire (token ring) assure l exclusion mutuelle entre de processus distribués, communiquant par échange de messages. Soient N 2 sites connectés en anneau (le site i communique uniquement avec ses voisins, les sites i 1 mod N et i + 1 mod N) par des canaux de taille 1. Sur chaque site, il existe un processus qui doit exécuter (de façon répétée) un travail en exclusion mutuelle par rapport aux processus travailleurs des autres sites. Le principe de cet algorithme est de faire circuler dans l anneau un jeton unique. Le site qui a le jeton autorise son processus travailleur à effectuer son travail. Un fois le travail fini, le site communique le jeton à son voisin i + 1 mod N et ainsi de suite. 1. Donner une modélisation en Promela pour cet algorithme en explicitant (a) le type des messages échanges sur les canaux et la déclaration des canaux, (b) les processus participant à cet algorithme et leur appartenance aux sites. 2. Exprimer en LTL la propriété d exclusion mutuelle à tester pour votre modélisation. 3. Commenter pour cet algorithme la propriété d attente bornée. 1

Question 3 : Soit l algorithme d exclusion mutuelle suivant modélisé en Promela : (7 points) 1 #define N 5 2 int requete = 0 ; 3 int reponse = 0 ; 4 a c t i v e proctype Serveur ( ) { 5 do : : true > 6 ( requete!= 0 ) ; 7 reponse = r e q u e t e ; 8 ( reponse == 0 ) ; 9 requete = 0 10 od 11 } 1 a c t i v e [N] proctype C l i e n t ( ) { 2 do : : true > 3 / s e c t i o n non c r i t i q u e / 4 do : : reponse!= p i d > 5 r e q u e t e = p i d 6 : : else > break 7 od ; 8 / s e c t i o n c r i t i q u e / 9 reponse = 0 10 od 11 } 1. Expliquer (1 page maximum) comment cet algorithme fonctionne. Rappel : pid est le numéro unique associé à chaque processus (le processus Serveur ayant le pid 0). 2. Montrer, en raisonnant sur l algorithme, que cet algorithme satisfait les propriétés d exclusion mutuelle et d absence d inter-blocage. 3. Qu en est-il des propriétés d absence de famine et d attente bornée? 4. Y-a-t-il un processus privilégié parmi les clients? Question 4 : (8 points) Dans une ville tranquille, un coiffeur possède un petit salon ayant une porte d entrée, une porte de sortie, un fauteuil de coiffure et N chaises. Les clients arrivent par la porte d entrée et sortent par la porte de sortie après avoir eu leur coupe de cheveux. Comme le salon est petit, uniquement le client sur le fauteuil de coiffure peut être servi à un moment donné par le coiffeur. Le coiffeur passe sa vie entre dormir et servir ses clients. Quand il n a aucun client, le coiffeur dort. Quand un client arrive et le fauteuil est libre, il s assoit dans le fauteuil et il réveille le coiffeur. Si le fauteuil n est pas libre, le client occupe une chaise s il y a des chaises libres ou il attend qu une chaise se libère sinon. Un client sur une chaise attend que le fauteuil se libère. Après avoir fini une coupe, le coiffeur fait sortir le client servi et s endort. Modéliser ce problème en utilisant les sémaphores pour la synchronisation entre le coiffeur et ses clients. Pour cela, écrire (dans le langage de votre choix) : 1. un processus générique Client dans lequel sont identifiés clairement ses états : en attente d une chaise, sur une chaise en attente du fauteuil, sur le fauteuil en attente de la fin de sa coupe et servi, 2. un processus Coiffeur avec les états : endormi et en service et 3. des déclarations de sémaphores avec leur type (binaire ou généralisé) et leur valeur initiale. 4. De plus, en utilisant LTL, spécifier la propriété suivante : le coiffeur est réveillé que si le fauteuil est occupé. 2

Correction 1 : (1 + 4 + 2) Fig. 1 Point 1.1 : séquences d exécution. Point 1.2 : Pour capturer le fait que une certaine valeur v de n est imprimée pendant l exécution, on définit le prédicat suivant : print(v) = (n = v) P @p2 P @p1 En instanciant v par 0 et 2, on obtient les deux prédicats print0 et print2 utilises dans les formules ci-dessous. 1. a. print2 2. b. print2 (print2 print2) 3. c. print2 4. d. Propriété difficile, car on parle du passé et qu on ne demande pas que 0 et 2 se suivent! On décompose la propriété en deux cas disjoints (c est donc une disjonction de deux formules) : (a) si 0 n apparaît pas, alors 2 n apparaît pas non plus : ( print0) ( print2) (b) il n est pas possible d avoir un 2 avant la première occurrence de 0 (ici 0 est forcé d apparaître) : ( print0 print2)uprint0 3

Point 1.3 : 1. a. Propriété de vivacité, fausse (voir séquence 0 ). 2. b. Propriété de sûreté (2 ne doit pas apparaître 2 fois), vraie car une fois que 2 est affiché, le processus P choisit que la branche du test, donc il n imprime plus n. 3. c. Propriété de vivacité, fausse car complémentaire de b. 4. d. Propriété de sûreté (2 ne doit apparaître avant un 0), fausse (voir séquence (q1, p1, 0) (q1, p2, 0) (q2, p2, 1) (q3, p2, 2) print2 (q3, p1, 2) )). Correction 2 : (1 + 4 + 2 + 1) Comme dans les algorithmes d exclusion mutuelle dans un cadre distribué, sur chaque site il faut faire fonctionner deux processus : un qui effectue le travaille et demande la section critique (Worker ci-dessous) et un autre qui gère les messages (Msg ci-dessous). Ces deux processus communiquent entre eux par une mémoire partagée sur chaque site (donc c est chaque variable est un tableau de taille N) : un booléen requete indique une demande de SC de la part du travailleur et un booléen reponse indique si la requette est satisfaite. Point 2.1a : Comme convention, les canaux relient les processus tel que le processus i lit son canal et envoie un message sur le canal i + 1%N. Le message échangé est vide, mais pour simplifier, on considère qu il s agit d un booléen. 1 chan ch [N] = [ 1 ] o f b i t ; Point 2.1b : Le code exécuté par chaque composant sur chaque site est : 1 b i t requete [N] = 0 ; 2 b i t reponse [N] = 0 ; 1 a c t i v e [N] proctype Worker ( ) { 2 do : : 1 > 3 / s e c t i o n non c r i t i q u e / 4 s k i p ; 5 / pre p r o t o c o l e / 6 requete [ p i d ] = 1 ; 7 ( reponse [ p i d ] == 1 ) ; 8 sc : / s e c t i o n c r i t i q u e / 9 s k i p ; 10 / post p r o t o c o l e / 11 reponse [ p i d ] = 0 ; 12 requete [ p i d ] = 0 ; 13 od 14 } 1 a c t i v e [N] proctype Msg ( ) { 2 int id = p i d N; 3 b i t b ; 4 do : : 1 > 5 ch [ id ]? b ; 6 i f : : r e q u e t t e [ id ] == 1 > 7 reponse [ id ] = 1 ; 8 ( r e q u e t t e [ id ] == 0) 9 : : else > s k i p 10 f i ; 11 ch [ id+1 % N]! b 12 od 13 } On suppose qu initialement, le canal d index 0 contient un message. Point 2.2 : Si on définit par sc i = W orker[i]@sc alors l exclusion mutuelle s écrit en LTL : i j sc i sc j. 4

Point 2.3 : Pour la modélisation ci-dessus, la propriété d attente bornée est satisfaite car, si un processus fait la demande de la SC, sa demande sera satisfaite après au plus N 1 exécutions de SC. En effet, le jeton est bloqué sur un site uniquement si le Worker exécute la SC, sinon, le jeton est transmis au site suivant (c est pourquoi on a besoin de processus Msg). Comme les SC se terminent forcement, le temps d attente du demandeur est donc borné. Correction 3 : (2 + 2 + 1 + 1 + 1) Point 3.1 : Il s agit d un algorithme d exclusion mutuelle centralisé dans un système à mémoire partagée : un serveur reçoit des requêtes de la part des processus accédant à la SC à travers la variable requete. Cette requête contient le numéro unique, strictement positif, du demandeur. Le serveur répond en affectant la variable reponse à un numéro reçu (le dernier vu dans requete avant l affectation). Le processus demandeur ayant ce numéro peut ainsi entrer dans sa section critique. Le post-protocole consiste à changer la valeur de la reponse à 0 afin d indiquer au serveur qu il peut traiter un autre demandeur. Point 3.2 : Exclusion mutuelle : les invariants utilisés pour la preuve sont : 1. Tous les clients ont des pids différents et strictement positifs : 2. Quand le serveur se trouve en dehors de la ligne 8, la variable reponse est 0 : ( l {5,6,7,9} Server@l) (reponse = 0) 3. La variable reponse est 0 alors tous les clients sont dans la section non-critique ou dans le pre-protocole : (reponse = 0) ( j [0,N 1] m [2,5] Client[j]@m) 4. Quand la variable reponse est non nulle, le serveur est en attente à la ligne 8 : (reponse 0) Server@8 5. Quand la variable reponse est non nulle, elle a des valeurs parmi les pids des clients : (reponse 0) 1 reponse N (facile à vérifier en regardant les endroits où les variables du programme sont affectées). 6. De plus, un client peut se trouver aux lignes 6 9 : (reponse 0) j. 1 j N m [6,9] Client[j]@m Ces invariants sont faciles à vérifier sur le code. Le code des clients montre que un client arrive en SC que si, à un certain moment, la variable reponse a été égale à sont pid, donc non nulle. Dans ce cas, le serveur est bloquée à la ligne 8 et ne peut pas changer la valeur de reponse (à la ligne 7). De plus, les autres clients sont bloqués aux lignes 2 5. Donc au plus un client se trouve en SC tant que reponse a une valeur non-nulle. Absence d interblocage : si plusieurs clients exécutent en même le pré-protocole, le dernier qui affecte la variable requete avant que le serveur effectue l affectation de la ligne 7 sera choisi par le serveur. 5

Point 3.3 : La famine est possible, donc la propriété d attente bornée n est pas satisfaite. En effet, en prenant comme exemple le cas de deux clients, il est possible d exhiber une trace dans laquelle le premier client est en famine (on choisit comme états l état du serveur, celui des deux clients et les valeurs de requete et reponse) : (S@6, C[1]@4, C[2]@4, 0, 0) (S@6, C[1]@5, C[2]@4, 0, 0) (S@6, C[1]@5, C[2]@5, 0, 0) (S@6, C[1]@4, C[2]@5, 1, 0) (S@6, C[1]@4, C[2]@4, 2, 0) (S@7, C[1]@4, C[2]@4, 2, 0) (S@8, C[1]@4, C[2]@4, 2, 2) (S@8, C[1]@4, C[2]@7, 2, 2) (S@8, C[1]@4, C[2]@8, 2, 2) (S@8, C[1]@4, C[2]@9, 2, 2) (S@8, C[1]@4, C[2]@4, 2, 0) (S@9, C[1]@4, C[2]@4, 2, 0) (S@6, C[1]@4, C[2]@4, 0, 0) Point 3.4 : Il n y a pas de client privilégié car : le serveur ne sélectionne pas un numéro spécial de requête et l affectation de la variable requete dans le clients ne tiens pas compte d une valeur spécifique. Correction 4 : () Point 4.3 : les sémaphores utilisés sont : reveil : un sémaphore binaire (initialisé à 0) pour le barbier (initialement endormi), fincoupe : un sémaphore binaire (initialisé à 0) pour le client servi (initialement aucun, c est le barbier qui le signale et le client qui se bloque en attente de de fin service), faut-libre : sémaphore binaire (initialement à 1) pour le fauteuil, chaise-libre : sémaphore généralisé (initialement à N) pour les chaises. 1 bsem r e v e i l = 0 ; 2 bsem f i n coupe = 0 ; 3 bsem faut l i b r e = 0 ; 4 sem chaise l i b r e = N; Point 4.1 : le code du client 1 a c t i v e [M] proctype C l i e n t ( ) { 2 do : : 1 > 3 / v i e normale / s k i p ; 4 / c o i f f e u r / 5 wait ( chaise l i b r e ) ; 6 wait ( faut l i b r e ) ; 7 s i g n a l ( chaise l i b r e ) ; 8 s i g n a l ( r e v e i l ) ; 9 wait ( f i n coupe ) ; 10 s i g n a l ( faut l i b r e ) 11 od 12 } Point 4.2 : on a considéré que le coiffeur essaie de s endormir entre deux clients : 6

1 a c t i v e proctype C o i f f e u r ( ) { 2 do : : 1 > 3 / dors / s k i p ; 4 wait ( r e v e i l ) ; 5 / t r a v a i l l e / s k i p ; 6 s i g n a l ( f i n coupe ) 7 od 8 } Point 4.4 : Le coiffeur est réveillé aux lignes 5 6 (cr =Coiffeur@5-6) et le fauteuil est occupé quand le sémaphore faut-libre est 0 (f o =faut-libre==0). Alors la propriété s écrit : [fo cr]. 7