D’un point de vue logique, les secteurs d’un disque sont regroupés pour former un « volume ». Un volume peut correspondre à l’ensemble des secteurs d’un disque donné, mais il arrive qu’un disque soit décomposé en plusieurs volumes distincts, chaque volume représentant une partie de la surface du disque.
Pour définir la place de chaque volume (ou partition) sur le disque on structure le disque. Le premier secteur du disque correspond au « master boot record », MBR. Nous convenons ici que ce premier secteur définit le nombre de volumes présents sur le disque, la position (en coordonnée piste/secteur) du premier secteur de chaque volume, ainsi que le nombre de secteurs consécutifs associés au volume. On conviendra d’un maximum de 8 volumes présents sur un disque. De plus une information associée à chaque volume permettra de déterminer si le volume est :
Proposez de même une fonction de sauvegarde de la structure de données vers le MBR qui sera appelée en fin d’utilisation du disque.
void read_bloc(unsigned int vol, unsigned int nbloc,
unsigned char *buffer);
void write_bloc(unsigned int vol, unsigned int nbloc,
const unsigned char *buffer);
void format_vol(unsigned int vol);
Notez que l’utilisation de ces fonctions suppose que le disque ait
été initialisé et que le MBR ait été lu en mémoire.
Squelette d’un gestionnaire de partitions
/home/enseign/ASE/src/vm-skel.tgzcontient le squelette d’un gestionnaire de volumes. Vous pouvez l’utiliser comme point de départ de votre développement d’un gestionnaire de partitions. En particulier cela vous décharge complètement de la gestion de l’interaction avec l’utilisateur.
Il vous faut copier le fichier vm-skel.c pour créer un fichier vm.c que vous compléterez. Un Makefile vous est fourni pour construire les différents exécutables.
Pour faciliter les choses, on peut introduire dans la bibliothèque drive d’accès au matériel une fonction init_master() qui initialisera le disque maître utilisé. Dans la suite des développements, nous ne nous préoccuperons plus du disque esclave.
La fonction principale de notre gestionnaire de partitions se doit de faire appel aux fonctions d’initialisation de ce disque et se doit de charger le MBR en mémoire :
/* init master drive and load MBR */
init_master();
load_mbr();Validation de la bibliothèque de gestion de volumes
Comme précédemment, il s’agit de valider votre travail avant de poursuivre les développements.
Le protocole suivant vérifie un minimum de cohérence dans votre implantation :
- créez une partition P1 encadrée d’une partition P0 et d’une partition P2 ;
- listez l’état de votre disque ;
- détruisez la partition P1 ;
- listez l’état de votre disque ;
- recréez la partition P1 ;
- listez à nouveau l’état de votre disque.
En particulier, vous pouvez ou non quitter et relancer le gestionnaire de volume entre chaque étape.
![]()
![]()
![]()