Correction de L’Examen de la Session Principale
Exercice 1 (4 pts) Comparaisons d'implantation de fichiers
On considère les quatre représentations suivantes de la localisation d'un fichier :
a) Un couple <numéro du premier bloc, nombre de blocs>
b) Un couple <numéro du premier bloc, numéro du dernier bloc> avec chaînage des blocs entre eux.
c) Un ensemble de 24 couples <numéro de bloc, nombre de blocs>
d) Un ensemble de 13 numéros de blocs:
-
-
-
-
10 numéros de blocs contenant des données,
1 numéro de bloc contenant des numéros de blocs contenant des données,
1 numéro de bloc contenant des numéros de blocs contenant des numéros de blocs contenant des données,
1 numéro de bloc contenant des numéros de blocs contenant des numéros de blocs contenant des numéros de blocs contenant
des données,
Donner pour chacune de ces représentations, celles des propositions suivantes qui sont vérifiées, en justifiant brièvement votre
réponse.
Il est possible que le fichier ne puisse être créé alors que l'espace libre est supérieur à la taille du fichier.
1. La taille totale du fichier doit être connue lors de sa création.
Publicité
2. Aucune information de taille n'est nécessaire lors de la création.
3.
4. L'accès aléatoire à un bloc quelconque du fichier demande un seul accès disque.
5. L'accès aléatoire à un bloc quelconque du fichier demande au plus 4 accès disque.
6. L'allocation d'espace peut se faire par blocs individuels.
Cocher les cases qui correspondent aux propositions correctes, puis justifier votre réponse
3
X
4
X
5
X
1
X
2
6
A
B
C
D
Publicité
X
X
X
X
X
X
X
X
Exercice 2 (5 pts) SGF
On considère un petit disque de 64 secteurs décrit en ANNEXE I. Ce disque accueille un SGF similaire au FFS (Fast File System)
d’UNIX. Les 16 premiers secteurs du disque sont réservés pour la table des i-nœuds.
Chaque secteur contite quatre mots de 4 octets. Un i-noeud remplit un secteur et contient 2 pointeurs directs, 1 pointeur indirect, et 1
double-pointeur indirect. Un i-nœud est un entier de 4 octets. Dans un répertoire, un nom de fichier est un tableau de 4 octets. Un
identificateur de bloc est un entier de 4 octets. Le répertoire racine est 0.
1. Quelle est la taille (en secteurs) du fichier décrit par l’i-noeud 1?
Solution: 1 secteur
2. Quelle est la taille (en secteurs) du fichier décrit par l’i-noeud 4?
Solution: 3 secteurs
3. Quelle la liste des noms de fichiers pour le répertoire racine
Solution: HELP, ME , MARY, HAD
Publicité
4. Quel est l’i-nœud du fichier /MARY/ABLE?
Solution: 10
5. Pour le système de fichiers sur ce disque, que dois-je faire si j'ai bien lu l'intégralité du fichier / ME / WAS?
Solution: APT 7 ABLE 10 MARY 2 MOVE 8
6. Ce système de fichiers peut-il supporter les liens symboliques? Pourquoi ?
Solution: C'est possible, mais seulement pour les chemins dont les noms ne dépassent pas la taille limite que le SGF prend en
charge
Exercice 3 (6=3+3 pts) Programmation système
Exercice 4 (5=4+1 pts) outils make, gdb ,…
1. Donner le fichier Makefile pour construire le programme « commande », correspondant à la situation
suivante :
• Le fichier commande.c contient la fonction main et inclut les fichiers suivants : <stdio.h>, <string.h>, <math.h>,
"commun.h", "util.h" et "fichier.h"
• Le fichier util.c inclut les fichiers suivants : <stdio.h>, "commun.h" et "util.h"
• Le fichier commun.c inclut les fichiers suivants : <stdio.h>, "commun.h" et "fichier.h"
• Le fichier libfichier.a contient les fonctions déclarées dans le fichier fichier.h (fichier bibliothèque)
N.B.
-
on utilise le compilateur C du projet GNU, gcc ;
1
Publicité
- Utiliser les options de compilation pour indiquer : il s’agit de source en ANSI C, signaler tous les warnings et les considérer
comme des erreurs;
Solution
commande: commande.o commun.h util.h fichier.h libfichier.a
gcc (CFLAGS) -o commande commande.o util.o commun.o -lfichier
commande.o: commande.c commun.h util.h fichier.h
gcc (CFLAGS) -Wall -ansi -pedantic -c commande.c
util.o:
util.c util.h commun.h
gcc (CFLAGS) -Wall -ansi -pedantic -c util.c
commun.o: commun.c commun.h fichier.h
gcc (CFLAGS) -Wall -ansi -pedantic -c commun.c
2. Modifier Makefile pour pouvoir deboggué le programme par gdb
Solution
CFLAGS=-g dans le fichier makefile
Ou
$ make CFLAGS=-g
2