École Polytechnique de Montréal. Département de Génie Informatique et de Génie Logiciel. Cours INF2610. Examen final. Automne 2010

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

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

Introduction à la programmation concurrente

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

Cours de Systèmes d Exploitation

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

Problèmes liés à la concurrence

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

Génie Logiciel avec Ada. 4 février 2013

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

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

INITIATION AU LANGAGE JAVA

Ordonnancement temps réel

Un ordonnanceur stupide

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

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 Programmation Système

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

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

Threads. Threads. USTL routier 1

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

Introduction aux Systèmes et aux Réseaux

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Synchro et Threads Java TM

Les arbres binaires de recherche

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

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

Introduction : les processus. Introduction : les threads. Plan

L exclusion mutuelle distribuée

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

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

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

LOG4430 : Architecture et conception avancée

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

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

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

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

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

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

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

Programmation système en C/C++

Premiers Pas en Programmation Objet : les Classes et les Objets

Application 1- VBA : Test de comportements d'investissements

Chapitre 4 : Exclusion mutuelle

I. Introduction aux fonctions : les fonctions standards

F. Barthélemy. 17 mai 2005

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

Notion de thread (1/2)

Les structures de données. Rajae El Ouazzani

Corrigé des exercices sur les références


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

TRIGONOMETRIE Algorithme : mesure principale

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

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

Conventions d écriture et outils de mise au point

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

Algorithmique et Programmation, IMA

Cours 1 : La compilation

Simulation d un système de paiement par carte bancaire

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

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

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)

Cours de Génie Logiciel

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

ACTIVITÉ DE PROGRAMMATION

Initiation au HPC - Généralités

Package Java.util Classe générique

Conception des systèmes répartis

TD2 Programmation concurrentielle

mode d emploi CRéATioN et GeSTioN de VoTRe CompTe personnel

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

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

Plateforme PAYZEN. Définition de Web-services

4. Groupement d objets

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

Utilisation d objets : String et ArrayList

Partie 7 : Gestion de la mémoire

Cours 6 : Tubes anonymes et nommés

Programme Compte bancaire (code)

Généralités sur le Langage Java et éléments syntaxiques.

AWS avancé. Surveiller votre utilisation d EC2

Java Licence Professionnelle CISII,

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

Introduction à la Programmation Parallèle: MPI

Algorithmique I. Algorithmique I p.1/??

Programmation Par Objets

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

Programmer en JAVA. par Tama

as Architecture des Systèmes d Information

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Cours d algorithmique pour la classe de 2nde

Gestion des processus

GOL502 Industries de services

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

Derrière toi Une machine virtuelle!

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

Transcription:

INF60 Examen final Automne 00 École olytechnique de Montréal Département de Génie Informatique et de Génie Logiciel Cours INF60 Examen final Automne 00 Date : 6 décembre 00 de 9h0 à h00 ondération : 40 % rofesseur : Boucheneb Hanifa Nbre. de questions : 5 Documentation permise : olycopié du cours Total : 0 points Calculatrices programmables et cellulaires non permis age sur

INF60 Examen final Automne 00 Question (4 pts) : Généralités Répondez aux questions suivantes (les réponses doivent être justifiées, concises et claires) : a) [.5 pt] Donnez l arborescence des processus créés par le bout de code suivant (supposez que l appel à «fork» ne retourne pas d erreur) : int i, pid, n=0; for (i=0; i<; i++) pid = fork(); if (pid!= 0) break; else n=n+i; printf("n = %d pour processus %d\n", n, pid); Donnez, pour chaque processus (y compris le processus principal), la (ou les) valeur(s) de la variable n affichées à l écran. b) [ pt] Sous Windows, deux processus père et fils peuvent-ils partager le même pointeur de fichier? Justifiez votre réponse. c) [.5 pt] Expliquez brièvement comment le langage Java implémente les moniteurs. Cette implémentation de moniteurs correspond-elle à un problème classique de synchronisation (vu en classe)? Justifiez votre réponse. age sur

INF60 Examen final Automne 00 Question (4 pts) : Moniteurs et variables de condition On veut synchroniser threads th, th et th d un même processus en utilisant un moniteur et des variables de condition. La fonction Fi, i=,, exécutée par chaque thread thi, consiste en une infinité de cycles. Chaque cycle est une section critique qui doit être exécutée en exclusion mutuelle. De plus, chaque cycle de th doit être précédé d un cycle de th et d un cycle de th. Complétez le pseudocode suivant pour synchroniser, en utilisant les variables de condition, les cycles des threads th, th et th. Moniteur SynCycles /*0*/ Function F() // fonction de th while () /**/ Sc(); // section critique de th /**/ Function F() // fonction de th while () /**/ Sc(); // section critique de th /*4*/ Function F() // fonction de th while () /*5*/ Sc(); // section critique de th /*6*/ age sur

INF60 Examen final Automne 00 Question (5 pts) : Sémaphore On veut implanter une pile partagée entre plusieurs threads d un même processus. Les fonctions empiler et depiler peuvent être appelées simultanément par plusieurs threads du processus. La fonction empiler bloque jusqu à ce qu un espace soit libre dans la pile. De son côté, la fonction depiler bloque jusqu à ce qu une donnée soit disponible dans la pile. a) [ pts] Complétez, en utilisant les sémaphores, le code suivant de manière à satisfaire les contraintes de synchronisation des fonctions empiler et dépiler. int sommet = 0; int pile [ Size ]; /* 0 */ Semaphore // Utilisez la structure Semaphore et les fonctions et V. void empiler (int a) /* */ pile[ sommet ] = a; sommet++; /* */ int depiler() /* */ sommet--; int tmp = pile[ sommet ]; /* 4 */ return tmp; b) [ pts] On veut maintenant permettre aux threads de partager une file circulaire, d enfiler et de défiler un ou plusieurs éléments de la file. La fonction enfiler insère en queue de file, l un à la suite de l autre, les éléments d un tableau. La fonction defiler récupère, dans un tableau, un ou plusieurs éléments de la file. Les fonctions enfiler et defiler peuvent être appelées simultanément par plusieurs threads du processus. La fonction enfiler (int A[], int m) bloque jusqu à ce que l espace nécessaire pour insérer les éléments du tableau A soit libre dans la file. De son côté, la fonction defiler (int A[], int m) bloque jusqu à ce qu il y ait au moins m éléments dans la file. our les deux fonctions, m est la dimension du tableau A. Sa valeur est supposée inférieure ou égale à la taille de la file. Elle est la même pour tous les appels aux fonctions enfiler et defiler. Complétez, en utilisant les sémaphores, le code suivant de manière à satisfaire les contraintes de synchronisation des fonctions enfiler et defiler. age 4 sur

INF60 Examen final Automne 00 int t = 0, q=0; int file [ Size ]; /* 0 */ Semaphore // Utilisez la structure Semaphore et les fonctions et V. void enfiler (int A[], int m) int i; /* */ for(i=0; i<m;i++) file[q] = A[i]; q=(q+)%size; /* */ void defiler (int A[], int m) int i; /* */ for(i=0; i<m;i++) A[i] = file[t]; t=(t+)%size; /* 4 */ age 5 sur

INF60 Examen final Automne 00 Question 4 (.5 pts) : Interblocage Soient processus concurrents, et qui utilisent en exclusion mutuelle 6 ressources différentes (de R à R6). Les processus exécutent respectivement les codes suivants : () while() prendre (R4); prendre (R5); prendre (R); // Utiliser R4, R5, R liberer(r4); liberer(r5); liberer(r); () while() prendre (R); prendre (R); prendre (R6); //Utiliser R, R, R6 liberer(r6); liberer(r); liberer(r); () while() prendre (R); prendre (R); prendre (R5); // Utiliser R, R, R5 liberer(r5); liberer(r); liberer(r); La fonction prendre permet d allouer une ressource au processus appelant, si cette dernière est libre. Dans le cas contraire, elle bloque le processus appelant jusqu à l obtention de la ressource demandée. Une ressource allouée est libérée par le processus détenteur lorsqu il invoquera la fonction liberer. Ces processus peuvent-ils entrer en interblocage? Si oui, peut-on prévenir les interblocages? eut-on les éviter? Justifiez vos réponses. age 6 sur

INF60 Examen final Automne 00 Question 5 (.5 pts) : Ordonnancement de processus a) [.5 pts] Considérez un système monoprocesseur et les 5 processus,,, 4 et 5 décrits dans le Tableau : rocessus Date d arrivée riorité Temps d exécution 0 5 () 6 () 4 4 5 5 Tableau Supposez que : le système dispose d un seul périphérique d E/S partagé entre les processus, le temps de commutation est égal à 0, et la priorité est la plus basse. Donnez le diagramme de Gantt montrant l ordonnancement des processus dans le cas d un ordonnancement préemptif à priorités fixes. L ordonnancement des processus de même priorité est circulaire avec un quantum égal à. b) [ pts] Considérez les tâches décrites par les caractéristiques suivantes, partageant la même ressource R : rocessus Date d arrivée Temps d exécution Deadline = ériode ERE 6 EE 8 0 4 ERRE Ces processus sont-ils ordonnançables RMA dans le cas où I (protocole d héritage de priorités) est utilisé pour traiter les inversions de priorité? L intervalle d étude à considérer est [0,7]. age 7 sur

INF60 Examen final Automne 00 Le corrigé Question : a) 0 crée un processus F puis affiche n=0 F crée un processus F puis affiche n=0 F crée un processus F puis affiche n= F ne crée pas de processus mais affiche n= b) Oui, il suffit, d une part, de spécifier lors de la création ou l ouverture du fichier que le handle est héritable par les processus fils et, d autre part, d indiquer lors de la création du fils qu il hérite tous les objets marqués héritables. c) II permet d exécuter en exclusion mutuelle certaines méthodes (les méthodes de type synchronized) d un même objet. Il associe à un chaque objet une variable de condition et deux files d attente : Entry queue et wait queue. La première file sert à gérer les demandes d accès aux méthodes de l objet alors que la seconde est utilisée pour se mettre en attente de la variable de condition de l objet. Le modèle de synchronisation utilisé est similaire à celui des lecteurs / rédacteurs d une base de données. L objet représente la base de données. Ses méthodes de type Synchronized sont les rédacteurs. Ses autres méthodes sont des lecteurs. Question : (4pts) Moniteur SynCycles /*0*/ boolc c, c, c; bool t=, t=, t=0; // ti =0 si ce n est pas le tour de thi, ti= sinon. Function F() // fonction de th age 8 sur

INF60 Examen final Automne 00 while () /**/ while (t!=) c.wait(); Sc(); // section critique de th /**/ t=0; if (t==0) t=; c.signal(); Function F() // fonction de th while () /**/ while(t!=) c.wait(); Sc(); // section critique de th /*4*/ t=0; if( t==0) t =; c.signal(); Function F() // fonction de th while () /*5*/ while (t!=) c.wait(); Sc(); // section critique de th /*6*/ t=0; t=; t=; c.signal(); c.signal(); age 9 sur

INF60 Examen final Automne 00 Question : a) int sommet = 0; int pile [ Size ]; /* 0 */ Semaphore libre= Size, Occupe=0, mutex =; void empiler (int a) /* */ (libre); (mutex); pile[ sommet ] = a; sommet++; /* */ V(mutex); V(occupe); int depiler() /* */ (occupe); (mutex); sommet--; int tmp = pile[ sommet ]; /* 4 */ V(mutex); V(libre); return tmp; b) int t = 0, q=0; int file [ Size ]; /* 0 */ Semaphore libre = Size, occupe=0, mutex=, mutex=; void enfiler (int A[], int m) int i; /* */ (mutex); for(i=0; i<m; i++) (libre); for(i=0; i<m;i++) file[ q ] = A[i]; q=(q+)%size; /* */ V(mutex); age 0 sur

INF60 Examen final Automne 00 for(i=0; i<m; i++) V(occupe); void defiler (int A[], int m) /* */ (mutex); for(i=0; i<m; i++) (occupe); for(int i=0; i<m;i++) A[i] = file[ t ]; t=(t+)%size; /* 4 */ V(mutex); for(i=0; i<m;i++) V(libre); Question 4 :.5 pts Oui, le scénario suivant mène vers un interblocage : prend R4 et R5; prend R et R; prend R; attend R; (détenue par ) attend R5; (détenue par ) attend R; (détenue par ) Oui, on peut les prévenir en ordonnant les ressources R<R<R<R4<R5<R6 et en modifiant le code de manière à demander les ressources dans un ordre croissant : () while() prendre (R); prendre (R4); prendre (R5); // Utiliser R4, R5, R liberer(r4); liberer(r5); liberer(r); () while() prendre (R); prendre (R); prendre (R6); //Utiliser R, R, R6 liberer(r6); liberer(r); liberer(r); () while() prendre (R); prendre (R); prendre (R5); //Utiliser R, R, R5 liberer(r5); liberer(r); liberer(r); Oui, on peut les éviter en appliquant l algorithme du banquier car on connait les besoins maximaux des processus. Au départ toutes les ressources sont libres et la matrice Alloc est nulle : age sur

INF60 Examen final Automne 00 age sur A = (,,,,,), 0 0 0 0 0 0 Alloc = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Req = 0 0 0 0 0 0 Question 5 : a) 5 5 4 4 0 4 5 6 7 8 9 0 4 5 6 7 8 9 0 b) E R E E R E E R E E R E E E E E E E E R R E E R R X 0 4 5 6 7 8 9 0 4 5 6 7 8 9 0 4 5 6 7