Exercices sur le système de fichiers, les disques



1- Programmation C et fichiers

1.1 Ecrire un programme C qui copie un fichier donné dans un autre fichier. Les deux noms seront passés sur la ligne de commande et vous ferez toutes les vérifications nécessaires, par exemple qu'il y a bien deux arguments sur la ligne de commande, que le fichier à copier dispose bien des droits de lecture, que le répertoire ou sera stocké le fichier à écrire peut être écrit...

1.2 Ecrire en langage C un programme qui affiche des N dernières lignes d'un fichier texte. On pourra se passer de faire un appel système à des commandes comme wc, tail et head.

1.3 Ecrire en langage C un programme qui compare deux fichiers et qui le fera via un appel système pour la commande unix diff. (faire un man diff)

1.4 On veut gérer les fichiers contenant des enregistrements de taille variable. Pour cela on décide que les 4 premiers octets (1 entier est sur 4 bytes) du fichier représenteront le nombre d'enregistrements ; puis à la suite on trouvera les tailles (codées sur des entiers) des enregistrements puis enfin les enregistrements.

Ecrire un programme C qui prend en paramètre un fichier dans ce formalisme et va le réorganiser afin que les enregistrements se retrouvent classés selon leurs tailles (de l'enregistrement de plus petite taille à l'enregistrement de plus grande taille).

Si le fichier en entrée a une taille de 1Go, est-ce que votre code peut tourner de manière efficace sur les machines de l'IUT ? Pourquoi ? Suggérez quelques pistes pour le permettre.

1.5 On a deux fichiers contenant des entiers triés. Ecrire un programme C qui va fusionner les deux fichiers dans un troisième de sorte qu'il soit trié.

1.6 Reprendre l'exemple écrit en langage C donné dans le cours pour lister le contenu d'un répertoire en affichant également le contenu des répertoires contenus dans les répertoires. On pourra écrire une procédure récursive dont un des paramètres sera le nombre de blancs (l'indentation) à afficher devant chaque nom.

2- Tester les performances d'un disque avec Bonnie++

2.1 Dans cet exercice, nous vous demandons de télécharger le test (benchmark) Bonnie++, et de l'installer dans votre répertoire racine (suivre le mode d'emploi). Lancez l'exécutable plusieurs fois en faisant varier la taille N en entrée (si possible de 10 octets à 20Ko) et relevez les performances pour les lectures séquentielles, les lectures aléatoires, les écritures séquentielles et aléatoires. Tracer les courbes de ces différentes métriques en fonction de N.

2.2 Repérez ensuite le modèle de votre disque. Pour cela fouillez le répertoire /proc. Recherchez sur Internet et sur le site du constructeur les performances de votre disque. Les chiffres annoncés sont-ils conformes à vos mesures ?

2.3 Déplacez l'exécutable Bonnie++ dans /tmp et refaites les points 2.1 et 2.2. Qu'est ce qui explique que vos nouvelles mesures soient différentes des premières mesures ?

3- Ordonnancement

Calculer le nombre de mouvements entre cyclindres pour l'exemple suivant : la tête est au départ sur le cylindre 143 et la file des requêtes est, dans cet ordre : 86, 1470, 913, 1774, 948, 1509, 1022, 1750, 130 et pour les politiques SSFC, SCAN, C-SCAN, LOOK ainsi que la politique FIFO (ou FCFS) qui consiste à traiter les requêtes dans leur ordre d'arrivée.

4- Utilisation de VisualOS

Dans cette partie on vous demande d'utiliser le simulateur VisualOS pour rejouer les politiques d'ordonnancement des I/O sur l'exemple donné dans le polycopié de cours : il s'agit d'expérimenter avec les politiques SSTF, SCAN, C-SCAN... sur l'exemple du polycopié et de vérifier que les résultats de la simulation sont conformes aux résultats annoncés dans le polycopié. Un autre objectif de cet exercice est de vous faire la main avec le simulateur.