Correction de L’Examen de la Session Principale

Programming, File Systems, Makefile · exam

Voir tous les documents en programmation

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