Hiver 2005 Page 1 sur 7 INF3600 Question 1 (3 pts ) : Généralités Répondez, en 5 lignes maximum, aux questions suivantes : a) Un système possède suffisamment de mémoire pour contenir 4 processus en mémoire principale. Ces derniers sont bloqués en attente d E/S la moitié du temps. La fraction du temps CPU perdue est de 9.75%. Vrai ou faux? b) Comment implanter le partage du code (code réentrant) dans un système qui gère la mémoire par pagination? c) Lors du changement de contexte, faut-il invalider le contenu de la mémoire associative du MMU? Pourquoi? Question 2 (4.5 pts) : Synchronisation «passage à niveau» On considère le problème du passage à niveau à voie unique. Pour simuler le fonctionnement de ce système, on se propose de le modéliser par un ensemble de processus parallèles : o un processus Contrôleur qui se charge de commander la fermeture et l ouverture des barrières. Les barrières doivent être fermées lorsqu un train traverse le passage à niveau. Le contrôleur ouvre les barrières s il n y a aucun train en attente du passage à niveau. o un processus Train est associé à chaque train. Il est créé de façon aléatoire pour simuler l arrivée d un train ainsi que la traversée du passage à niveau. Complétez, en ajoutant les sémaphores et le code nécessaires, les procédures suivantes exécutées par les processus Contrôleur et Train (attention : vous ne devez pas ajouter de variables d autres types). Si besoin est, vous pouvez utiliser l opération int PNB(semaphore s) qui est l équivalent de sem_trywait(&s). Expliquez le rôle de chaque sémaphore (indiquez l utilité de sa queue ainsi que sa valeur initiale). Attention : Vous ne devez pas ajouter de variables autres que les sémaphores.
Hiver 2005 Page 2 sur 7 INF3600 Semaphore /*0*/ Contrôleur () Train() { { while(1) /*3*/ { /*1*/ Traverser(); /*4*/ FermerBarrieres() ; /*2*/ OuvrirBarrieres() ; Question 3 (3 pts) : Synchronisation/Interblocage On dispose d'un mécanisme d'enregistrement à un ensemble de cours, tel que tout étudiant ne peut être inscrit qu'à au plus trois cours, et que chaque cours a un nombre limité de places. Un étudiant inscrit déjà à trois cours peut s il le souhaite en abandonner un, pour en choisir un autre dans la limite des places disponibles. Si cet échange n est pas possible, l étudiant ne doit pas perdre les cours auxquels il est déjà inscrit. Le bureau des affaires académiques souhaite donc mettre en place un système de permutation de cours, permettant à un étudiant de changer de cours. Il vous sollicite pour vérifier si l implémentation que vous avez proposée il y a un an (avant se suivre le cours INF3600) est correcte : void EchangeCours (Putilisateur utilisateur, PCours cours1, cours2) { cours1->verrouille (); // verrouille l accès à l objet cours1 cours1->desinscrit (utilisateur); if (cours2->estplein == false) { cours2->verrouille (); // verrouille l accès à l objet cours2 cours2->inscrit (utilisateur); cours2->deverrouille (); //déverrouille l accès à l objet cours2 cours1->deverrouille (); //déverrouille l accès à l objet cours2 Vérifiez si l'implémentation est correcte : Si elle est correcte, expliquez pourquoi, en montrant comment est géré le cas où deux étudiants (ou plus) veulent accéder en même temps au système. Si elle est incorrecte, listez et expliquez les problèmes, et proposez une solution qui fonctionne.
Hiver 2005 Page 3 sur 7 INF3600 Question 4 ( 3 pts) : Ordonnancement RMS est un algorithme d ordonnancement temps-réel des processus périodiques. Un processus périodique (P i ) est caractérisé par sa période d activation (T i ), son temps d exécution (C i ) et sa date d arrivée dans le système (S i ). Chaque processus possède une contrainte temporelle : il doit s exécuter complètement avant que sa période arrive de nouveau. Le principe de l algorithme RMS consiste à associer à chaque processus une priorité fixe, inversement proportionnelle à sa période. Lorsqu il est appelé, l ordonnanceur du système choisit le processus de plus forte priorité et le lance en exécution (ordonnacement à priorités). Soit trois processus A, B et C définis par les paramètres suivants : S A = S B = S C = 0 T A = 29 ms, C A = 7 T B = 5 ms, C B = 1 T C = 10 ms, C C = 2 a) Indiquez les priorités des processus P 1, P 2 et P 3 selon RMS. b) Donnez le diagramme de Gantt pour les 30 premières ms d ordonnancement RMS, si l ordonnanceur est préemptif. c) Donnez le diagramme de Gantt pour les 30 premières ms d ordonnancement RMS, si l ordonnanceur est non préemptif. d) Est-ce que tous les processus respectent leurs contraintes temporelles sur les 30 premières ms dans le cas b)? Et dans le cas c)? Sinon, justifiez. Question 5 (4.5 pts) : Gestion de la mémoire I) Soit un programme dont le code occupe 1024 octets en mémoire et qui utilise un vecteur avec 1000 éléments de type caractère (un caractère = un octet en mémoire). Ce programme est exécuté dans un système qui utilise la pagination de la mémoire dont la taille de la mémoire réelle est de 1 Mo, la taille d'une page est de 512 octets et les instructions à référence mémoire ont un champ d adresse de 24 bits. a) Donnez : 1) la taille de l'espace logique d adressage 2) le nombre de bits du déplacement 3) le nombre de bits du numéro de page virtuelle 4) le nombre de bits d'une adresse réelle 5) le nombre de bits du numéro de page réelle (case) 6) le nombre d'entrées de la table des pages b) Le chargement de ce programme en mémoire engendre-t-il une fragmentation interne? Justifiez votre réponse. II) Donnez le format d une adresse virtuelle de 32bits avec des pages de 256 octets et une table des pages à trois niveaux. Si toutes les tables ont le même nombre d entrées, donnez le nombre de tables ainsi que leur nombre d entrées.
Hiver 2005 Page 4 sur 7 INF3600 III) On appelle "anomalie de Belady" le fait que le nombre de défauts de pages augmente quand on augmente le nombre de cadres de pages disponibles en mémoire physique. On appelle "algorithme à pile" un algorithme présentant la propriété d'inclusion : M(m,r) inclus dans M(m+1, r), où m est le nombre de cadres de mémoire et r un index dans le vecteur de références aux pages (ω). M(m,r) représente l'ensemble des pages présentes en mémoire après r références mémoire, lorsque l'on dispose de m cadres de page. Une condition suffisante pour qu'un algorithme ne présente pas l'anomalie de Belady est qu'il soit à pile. a) Montrez l anomalie de Belady pour l algorithme FIFO avec m=3, puis m=4, pour le vecteur de références aux pages suivant : ω = { 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5. b) Montrez sur cet exemple que l algorithme FIFO n est pas un algorithme à pile, en indiquant les états pour lesquels la propriété d'inclusion n'est pas vérifiée. Question 6 (2 pts) : Systèmes de fichiers Considérez le système de fichiers NTFS (version simplifiée). Ce système gère des partitions dont la taille peut atteindre 2 64 octets. L allocation se fait par blocs de taille fixe, encore appelés clusters, les numéros de clusters étant représentés sur 64 bits. L espace libre est représenté par un fichier bitmap qui, à raison de 1 bit par cluster, définit son état d allocation. Une table, appelée MFT (Master File Table), contient un ou plusieurs enregistrement(s) par fichier existant sur le disque. Cet enregistrement, de la taille d un cluster, a la structure suivante pour un fichier nécessitant un seul enregistrement : On gère une partition de 2 Go par ce système, en utilisant une taille de cluster de 4 Ko. a) Déterminez le nombre de clusters ainsi que la taille du fichier bitmap. b) Que contient le champ «Header» qui précède les «Run»? À quoi sert-il?
Hiver 2005 Page 5 sur 7 INF3600 Solutions question 1 : a) Faux. Le temps perdu par le processeur est le temps où tous les processus sont bloqués simultanément pour des opérations d E/S. La probabilité qu un processus soit bloqué en attente d une E/S est p = 50%. Alors, la probabilité que tous les 4 processus soient simultanément bloqués en attente est de p 4 = 6.25%. La fraction du temps CPU perdue est de 6.25%, pas de 9.75%. b) Il suffit de faire pointer les pages virtuelles de deux processus sur les mêmes pages physiques. c) Il faut invalider le contenu car elle contient les dernières références aux pages du processus suspendu. Solution question 2: Semaphore quitte=0, passage=0 ; present=0; /*0*/ Contrôleur () Train() { { while(1) V(present) ; /*3*/ { P(present) /*1*/ P(passage); Traverser(); V(quitte) ; /*4*/ FermerBarrieres() ; V(passage) ; /*2*/ P(quitte) ; While (PNB(present)) { V(passage) ; P(quitte) ; OuvrirBarrieres() ; //present est le sémaphore qui sert à comptabiliser le nombre de trains présents. //passage est le sémaphore qui mémorise les trains en attente du passage à niveau. //quitte est le sémaphore qui sert à bloquer/débloquer le contrôleur lorsque le train entame/termine la traversée. // PNB est l équivalent de sem_trywait. Solution question 3 : Cette implémentation est incorrecte pour plusieurs raisons : - on désinscrit toujours l'utilisateur de son premier cours, même s'il n'a pas pu être inscrit au deuxième cours ; - du fait que l'on verrouille le deuxième cours alors qu'on a déjà un verrou sur le premier, on a un risque d'interblocage si deux étudiants lancent simultanément la routine avec les deux
Hiver 2005 Page 6 sur 7 INF3600 mêmes valeurs de cours, mais dans l'ordre inverse : chacun verrouillera d'abord le cours que l'autre voudra verrouiller ensuite, et il ne sera donc pas possible de sortir de cet interblocage ; - on ne verrouille pas le deuxième cours avant de faire le test pour savoir s'il est plein. void EchangeCours (Putilisateurs utilisateur, PCours cours1, cours2) { cours2->verrouille (); if (cours2->estplein == false) { cours2->inscrit (utilisateur); cours2->deverrouille (); cours1->verrouille (); cours1->desinscrit (utilisateur); cours1->deverrouille (); else cours2->deverrouille (); Solution question 4 : a) Pr A = 1, Pr B = 3, Pr C = 2, où 3 est la priorité la plus forte b) B C A B A B C A B B C B A 0 1 3 5 6 10 11 13 14 15 16 20 21 23 25 26 29 30 c) B C A B C B B C B 0 1 3 10 11 13 15 16 20 21 23 25 26 30 d) Oui, dans le cas a). Non, dans le cas b). B ne respecte pas sa contrainte temporelle sur la période 2 (entre les instants 5 et 10). Solution question 5 I a) 1) 2 24 = 16Mo 2) 9 bits 3) 24 9 = 15 bits 4) 20 bits 5) 20 9 = 11 bits 6) 2 15 = 32Ko I b) Oui. Le programme a besoin de 2000 octets de données et de 1024 octets de code, donc un total de 3024 octets en mémoire. Le nombre de pages occupées : [3024 / 512] = 6 pages. Dans la dernière page, il reste 512 464 = 48 octets libres, ce qui cause la fragmentation interne. II) Le format PT1(8bits) PT2(8bits) PT3(8bits) Offset(8bits) Le nombre de tables : 1 + 256 + (256*256). Le nombre d entrées : 256
Hiver 2005 Page 7 sur 7 INF3600 III) a) L algorithme FIFO pour m=3 1 2 3 4 1 2 5 1 2 3 4 5 M 0 1 1 1 4 4 4 5 5 5 5 5 5 M 1 2 2 2 1 1 1 1 1 3 3 3 M 2 3 3 3 2 2 2 2 2 4 4 P P P P P P P P P Il y a 9 défauts de page L algorithme FIFO pour m=4 1 2 3 4 1 2 5 1 2 3 4 5 M 0 1 1 1 1 1 1 5 5 5 5 4 4 M 1 2 2 2 2 2 2 1 1 1 1 5 M 2 3 3 3 3 3 3 2 2 2 2 M 3 4 4 4 4 4 4 3 3 3 P P P P P P P P P P Il y a 10 défauts de page (anomalie de Belady) b) L algorithme exemplifié au point a) n est pas à pile. Les états où l inclusion n est pas vérifiée sont les états d index 7, 8 et 11 dans le vecteur de références aux pages (ω). Solution question 6 : a) Le nombre de clusters est obtenu en divisant la taille de la partition par la taille d un cluster. On obtient 524288 clusters. Comme il faut 1 bit par cluster, cela conduit à une taille du fichier bitmap de 64 Ko. b) L entête indique les numéros de blocs logiques dont les numéros physiques correspondants sont dans l enregistrement. Il sert à accélérer la localisation des blocs physiques d un fichier.