coller l étiquette ici DEUG MIAS2 - MODULE INFORMATIQUE (MIA10B) EXAMEN (SEPTEMBRE 1999) Durée : 2 heures Aucun document autorisé - Calculatrices interdites Les réponses doivent être brèves et justifiées Remarque : Ne pas dégrafer les différents documents qui vous sont remis. page 1
Partie B (Système) 5. QUESTIONS DE COURS (7 POINTS) 5.1. (2 points) Quels sont les éléments constituant le compte d un utilisateur sur un ordinateur? NB: 5 lignes max 5.2. (2 points) Qu est-ce qu une piste dans un disque? Qu est-ce qu un secteur dans un disque? NB: 5 lignes max 5.3. (3 points) Indiquez la différence entre un système multi-tâche préemptif et un système multitâche coopératif. NB: 8 lignes max page 2
6. PROBLèME (28 POINTS) On suppose que l on dispose d un disque amovible ZIP (environ 100 Mo) de 98 000 blocs (numérotés en décimal de 0 à 97 999). Chaque bloc permet de stocker 1 Ko. On suppose que les blocs sont chaînés entre eux. 6.1. (3 points) Combien de blocs seront nécessaires pour stocker les fichiers F1 (1100 octets), F2 (1010 octets) et F3.DAT(2035 octets). Pour stocker les fichiers sur le disque ZIP, on construit un catalogue qui apparaît sous la forme d une table décrivant la liste des fichiers contenus dans un répertoire racine appelé /. Chaque entrée de la table contient les informations suivantes : le nom du fichier (27 caractères maximum), le type du fichier (répertoire ou fichier), codé sur un caractère (R ou F), le numéro du premier bloc contenant le fichier (codage sur 4 octets). Si c est un fichier, on y trouvera le contenu de ce fichier (blocs chaînés entre eux). Si c est un répertoire, on y trouvera un catalogue. On considère que le bloc 0 décrit le contenu du répertoire racine du disque ZIP. 6.2. (2 points) Combien d octets faut-il dans le bloc pour stocker une entrée du catalogue? 6.3. (3 points) Combien d entrées peut-on stocker dans un bloc? Dans la suite de ce sujet, on utilisera la constante E pour caractériser cette valeur. page 3
Pour pouvoir stocker plus de E fichiers dans le répertoire racine, on utilise la technique suivante: Si le catalogue dépasse un bloc, le type de la dernière entrée de fichier ( qui n a pas de nom) est caractérisée par le caractère C. Le numéro indiqué correspond alors à celui du bloc dans lequel la suite de la table est stockée, Le même procédé est utilisé lorsque le stockage du catalogue dépasse 2, 3, N blocs sur le disque, Le type de fichier de la dernière entrée est caractérisé par le caractère X. Aucun nom ou numéro de bloc n est spécifié. Considérons la définition des procédures telles qu indiquées ci dessous: procedure LOAD_BLOC (NUM : ENTIER_32; var B : BLOC_TYPE); Charge dans la variable B le contenu du bloc disque numéro NUM. procedure GET_CATALOG_ENTRY (B : BLOC_TYPE; var N : CHAINE_27; var T : CARACTERE; var N : ENTIER_32); Charge la prochaine entrée du bloc transmis en paramètre et la décortique en trois parties: le nom sur 27 caractères, le type sur un caractère et le numéro de bloc associé sur un entier 32 bits. Par prochaine, on entend l entrée qui se situe après la dernière entrée lue. Cette primitive provoque un arrêt sur système si on tente de lire la E+1ème entrée d un bloc. Considérons la procédure suivante du système d exploitation (en pseudo-pascal) : procedure XXX is NOMF : CHAINE_27; TYPF : CARACTERE; NBLF : ENTIER_32; BLOC : BLOC_TYPE; begin LOAD_BLOC (0, BLOC); TYPF := ; while TYPF /= X do begin GET_CATALOG_ENTRY (BLOC, NOMF, TYPF, NBLF); if TYPF = C then LOAD_BLOC (NBLF, BLOC); if TYPF = F then WRITE_LN ( fichier, NOMF); if TYPF = R WRITE_LN ( repertoire, NOMF); end; end XXX; 6.4. (3 points) Que fait cette procédure? à quelle commande Unix pourriez-vous l associer? page 4
On souhaite écrire une fonction indiquant si un nom de fichier ou de répertoire est référencé dans le catalogue d un répertoire quelconque. Le premier paramètre est constitué du numéro du premier bloc contenant ce catalogue du répertoire que l on examine et le second du nom de fichier recherché. La fonction indique au moyen d un booléen si le nom de fichier est référencé ou non. La fonction possède l en-tête suivant : function FIND_IN_DIRECTORY (NUM : ENTIER_32; NAM : CHAINE_32) return BOOLEAN; 6.5. (6 points) Donnez l algorithme de la fonction FIND_IN_DIRECTORY. NB: Vous pouvez vous inspirer de celui de la procédure XXX. page 5
Considérons maintenant la structure arborescente définie dans la figure ci-dessous. Les répertoires sont indiqués par des cercles blancs et les fichiers indiqués au moyen de cercles noirs. Les flèches indiquent ce que contient un répertoire. / f1 titi toto f1 f2 f3 f4 On considère ce qui suit : Les fichiers contiennent une chaîne de caractères décrivant leur chemin absolu, Le catalogue du répertoire racine ( / ) est celui indiqué dans la question suivante, les données des fichiers f1, f2, f3 et f4 se trouvent respectivement dans les blocs 12, 14, 22 et 27. 6.6. (6 points) Remplissez les tables ci-dessous en vous inspirant de ce qui a été fait pour le répertoire racine (bloc 0). numéro de bloc: 0 -> / numéro de bloc: ->f1 f1, F, 10 titi, D, 30 toto, D, 31,X,0 numéro de bloc: -> titi numéro de bloc: -> f1 (dans titi) numéro de bloc: -> f2 numéro de bloc: -> toto numéro de bloc: -> f3 numéro de bloc: -> f4 page 6
On souhaite désormais construire la fonction FIND_FROM_ROOT qui indique si le nom d un fichier se trouve dans l arborescence partant d un répertoire donné. Cette fonction parcours récursivement les répertoires inclus dans le répertoire transmis jusqu à ce qu elle trouve une entrée qui corresponde (fichier ou répertoire) à ce qui a été transmis. Le format de cette fonction est indiqué ci après. Le premier paramètre correspond au numéro de bloc dans lequel on trouve le catalogue du répertoire qui tiendra lieu de racine, le second paramètre donne le nom du fichier que l on recherche. La fonction rend le numéro du premier bloc disque du fichier ou du répertoire ainsi trouvé. Par convention, la valeur -1 signifie que l on a rien trouvé function FIND_FROM_DIR (NUM : ENTIER_32; NAM : CHAINE_32) return ENTIER_32; 6.7. (5 points) Donnez l algorithme de la fonction FIND_FROM_ROOT. NB: Vous pouvez vous inspirer de ceux de la procédure XXX et de la fonction FIND_IN_DIRECTORY. page 7