Vous êtes sur la page 1sur 7

Code (réservé à l’admin)

Nom & Prénom : …………………………………………………..

Nº CIN : ……………………Nº Carte Etud : …………………….

Systèmes d’Exploitation - Examen Principal


Code (réservé à l’admin)
Filière : GL2, RT2, IIA2 Année Univ. : 2018/2019
Semestre : 1 Durée : 1h30
Documents : Non autorisés Enseignantes : L. Sfaxi, G. Gasmi
Nb de Pages : 7

EXERCICE 1 : Synchronisation (6pts)

Partie 1.

Des développeurs désirent réaliser une application de gestion de salle de révision dans un institut.
Dans cette partie, nous supposerons qu’il existe une seule salle de révision, qui peut être utilisée
par un seul groupe d’étudiants à la fois. Un groupe d’étudiants a besoin de réserver une salle pour
pouvoir réviser. Le groupe peut être composé de 2 à 5 personnes, au maximum, car la capacité de
la salle est de 5. Le premier étudiant d’un groupe qui demande à réserver la salle peut le faire si
elle est libre, sinon il attend que le groupe qui l’utilise la libère. Les autres membres du groupe
utilisent la salle directement, si l’un de leurs camarades l’a déjà réservée.

L’un des développeurs propose le code suivant pour gérer ce scénario :

Initialisation
semaphore salle = 5;

Processus Etudiant
reserver_salle(){
down (salle);
utiliser_salle();
up (salle);
}

1. Quelles sont les conditions de bonne synchronisation des processus qui ne sont pas
respectées dans ce code ? Donner un scénario d’exécution montrant comment cette (ou ces)
condition(s) ne sont pas respectées. (1)

1
Code (réservé à l’admin)
Nom & Prénom : …………………………………………………..

Nº CIN : ……………………Nº Carte Etud : …………………….

La condition non respectée est : L’exclusion mutuelle. Car un étudiant d’un groupe peut utiliser la
salle en même temps qu’un étudiant d’un groupe différent : accès non autorisé à la section critique.

2. Proposer une autre implémentation de la fonction reserver_salle de façon à corriger ce (ou


ces) problème(s) au mieux. (3)
Nous pouvons utiliser le principe de lecteurs-rédacteurs, en la changeant pour autoriser plusieurs
rédacteurs en même temps.

Initialisation
semaphore salle = 1; //protège la salle pour qu’elle soit accédée par un seul groupe
semaphore mutex[n] = {1 ;1 ;… ;1} ; //mutex[i] protège la variable groupe[i]
int groupe[n]={0 ;0… ;0} //groupe[i] = nb étudiants d’un groupe i arrivés

Processus Etudiant
reserver_salle(groupe_id){
down(mutex[groupe_id]) ;
groupe[groupe_id] ++ ;
if (groupe[groupe_id] == 1){
down(salle) ;
}
up(mutex[groupe_id]) ;
utiliser_salle();
down(mutex[groupe_id]);
groupe[groupe_id] -- ;
if (groupe[groupe_id] == 0){
up(salle) ;
}
up(mutex[groupe_id])
}

Partie 2.

Nous supposerons maintenant que le nombre de salles est supérieur à 1 (par exemple 10), toutes
les autres conditions sont maintenues. Nous supposerons que le premier étudiant d’un groupe doit
d’abord chercher une salle libre parmi les salles disponibles. S’il en trouve une, il la réserve, et les
membres de son groupe peuvent y accéder directement sans attendre. Sinon, il devra attendre l’une
des salles au hasard. Dès qu’elle est libérée par le groupe qui l’occupe, il pourra y accéder, lui et
tout autre membre de son groupe qui attendent avec lui. Si d’autres membres arrivent plus tard, ils
pourront accéder directement à la salle.

2
Code (réservé à l’admin)
Nom & Prénom : …………………………………………………..

Nº CIN : ……………………Nº Carte Etud : …………………….

3. Écrire le code de la fonction reserver_salle. Prenez soin d’initialiser les sémaphores utilisés,
et de mettre des commentaires pour expliquer leur utilité. (2)

Initialisation
semaphore salle = 10; //représente le nombre de salles libres
semaphore mutex[n] = {1 ;1 ;… ;1} ; //mutex[i] protège la variable groupe[i]
int groupe[n]={0 ;0… ;0} //groupe[i] = nb étudiants d’un groupe i arrivés

Processus Etudiant
reserver_salle(groupe_id){
down(mutex[groupe_id]) ;
groupe[groupe_id] ++ ;
if (groupe[groupe_id] == 1){
down(salle) ;
}
up(mutex[groupe_id]) ;
utiliser_salle();
down(mutex[groupe_id]);
groupe[groupe_id] -- ;
if (groupe[groupe_id] == 0){
up(salle) ;
}
up(mutex[groupe_id])
}

EXERCICE 2 : Pagination et Remplacement de Page (7pts)


Dans un système à mémoire paginée, considérons les informations suivantes :
- La taille d’une page est de 4Ko
- La mémoire physique contient 8 pages en tout.
- L’algorithme de remplacement de page utilisé est le LRU. Nous précisons que n’importe
quelle page d’un processus P peut remplacer n’importe quelle autre page, d’un
processus P’ ou du même processus P.

Les processus se présentant au système sont comme suit :

3
Code (réservé à l’admin)
Nom & Prénom : …………………………………………………..

Nº CIN : ……………………Nº Carte Etud : …………………….

Processus Temps Taille Temps total Séquence d’exécution


d’arrivée (Ko) d’exécution

A 0 19 35 (5/19015), (12/1100), (30/14000)

B 10 39 65 (10/150), (23/12456), (40/28672), (55/200)

C 30 38 35 (2/38000), (19/2157), (20/34121)

D 40 8 25 (11/7019), (20/143)

A(5/19015) signifie que, 5 unités de temps après son démarrage, le processus A a besoin
d’exécuter l’instruction à l’adresse logique 19015.

Il est important de noter que, pour que le processus puisse démarrer, il a besoin de charger sa
première page en mémoire.

Nous considérons également l’hypothèse suivante :


- Si plusieurs processus doivent charger (ou décharger) une page au même instant, le système
considère leurs requêtes par ordre alphanumérique des processus (le processus A est traité
avant le processus C par exemple).

L’objectif final est de représenter les états de la mémoire physique aux différents moments.

4
Code (réservé à l’admin)
Nom & Prénom : …………………………………………………..

Nº CIN : ……………………Nº Carte Etud : …………………….

Donner l’état (contenu) des tables de pages à l’instant 38. Une table de page contient une
référence vers le cadre au niveau de la mémoire centrale + un bit de présence.

Discuter le choix de l’hypothèse et de l’algorithme de remplacement choisis. Avons-nous fait le


bon choix ?
Dans cet exemple, l’algorithme de remplacement n’a pas été évoqué, car le nombre de places dans
la mémoire est suffisant pour l’exécution simultanée de tous les processus. Néanmoins, c’est un
algorithme qui a été prouvé efficace dans les cas réels, car les pages les plus récemment utilisées
sont connues pour avoir plus de chance d’être réutilisées dans le futur proche.

EXERCICE 3 : Gestion des Fichiers (7pts)


Soient les fichiers F1, F2 et F3, répartis respectivement en 6, 5 et 5 blocs, comme suit :

B11
B21 B31
B12
F1 : F2 : B22 F3 : B32
B13
B23 B33
B14
B24 B34
B15
B25 B35
B16
B17

5
Code (réservé à l’admin)
Nom & Prénom : …………………………………………………..

Nº CIN : ……………………Nº Carte Etud : …………………….

Les blocs de ces trois fichiers sont répartis sur le disque comme suit1 :

0 3 6 9 12 15 18 21 24 27
B23 B22 B14 B12 B16 R1 B17

1 4 7 10 13 16 19 22 25 28
F3 B11 B21 R2 B32 B13 B24 B35 F1

2 5 8 11 14 17 20 23 26 29
B33 B34 B15 B25 B31 F2

Ces trois fichiers sont sauvegardés selon l’arborescence suivante (R1 et R2 étant des répertoires):
R1
|_ F1
|_ F2
|_ R2
|_ F3

Le système de fichiers utilise les iNodes pour gérer ses blocs logiques. On supposera qu’un iNode
contient 2 pointeurs directs, un bloc d’indirection simple et un bloc d’indirection double
uniquement. Les iNodes principaux des structures R1, R2, F1, F2 et F3 sont respectivement les
blocs physiques 21, 10, 25, 26, 1.
Nous précisons que l’iNode d’un répertoire pointe directement sur les iNodes des répertoires et
fichiers qu’il contient.
Nous supposerons que :
• Les blocs de données sont de taille = 32 octets
• Les blocs d’index (blocs contenant des adresses) sont de taille = 16 octets
• La taille du disque = 2 Ko
• La taille d’une adresse = 4 octets
• La taille des métadonnées d’un fichier est négligeable

1
le nombre de blocs total du disque représentés dans la figure n’est pas significatif

6
Code (réservé à l’admin)
Nom & Prénom : …………………………………………………..

Nº CIN : ……………………Nº Carte Etud : …………………….

1. Donner le contenu des iNodes de chacun de ces fichiers et répertoires. (1)

2. Donner la taille maximale d’un fichier. (1)


Taille max d’un fichier = Nombre de blocs de données possibles * Taille d’un bloc de données
= (2 + (Taille BS / Taille @)+ (Taille BS / Taille @)2)* 32 o
= (2 + 4 + 16) * 32 = 704 octets
3. Donner la taille maximale d’un iNode. (1)
Taille max d’un iNode = Nombre de blocs spéciaux max * taille d’un BS
= 7 * 16 o = 112 octets
4. Quelle serait la taille maximale d’un fichier si on avait utilisé :
a. Une allocation non contiguë indexée simple avec un seul bloc d’index (1)
Taille max d’un fichier = Nombre d’adresses dans un bloc spécial * taille bloc de données
= 4* 32 o = 128 octets
b. Une allocation non contiguë indexée simple avec plusieurs blocs d’index chaînés
(1)
Taille max du fichier devient limitée à la taille du disque, c’est à dire 2 Ko.
a. Une allocation chaînée2 (FAT) (1)
Taille max du fichier devient limitée à la taille du disque, c’est à dire 2 Ko.
5. Discuter les différents choix et indiquer le meilleur à votre avis. (1)
Même si la FAT et l’allocation contiguë à blocs d’indexe chaînés permettent une taille de fichier
plus grande, ils consomment beaucoup d’espace en mémoire pour les blocs spéciaux, et la fat est
toujours chargée en mémoire quel que soit le nombre de fichiers dans le disque.

2
Comme dans le cas d’allocation chaînée, il n’existe pas de blocs d’indexe, on considère que les blocs ont
une taille identique de 32 octets.

Vous aimerez peut-être aussi