VII. Gestion des fichiers

VII.1. Définition

Un fichier est vu comme une suite d'articles ou d'enregistrements logiques d'un type donné qui ne peuvent être manipulés qu'à travers des opérations spécifiques. L'utilisateur n'est pas concerné par l'implantation des enregistrements, ni par la façon dont sont réalisées les opérations. Généralement, elles sont traduites par système d’exploitation en opérations élémentaires sur les mémoires.

On dispose généralement des opérations suivantes :

       fichiers : créer, ouvrir, fermer, détruire, pointer au début, renommer, copier dans un autre fichier, éditer le contenu,

       articles : lire, écrire, modifier, insérer, détruire, retrouver.

Un système de fichiers (SGF) est l'entité regroupant les fichiers mémorisés sur disque. Il contient les données des fichiers et un ensemble d'informations techniques.

VII.2. Le support physique

A l'écriture, la tête magnétise le support. C'est le défilement des points magnétisés qui permet de lire. Le courant d'air créé par le plateau en mouvement fait flotter la tête.

Figure 27. Tête et plateau.

Le disque tourne dans arrêt à vitesse constante. Un grain de poussière entre le disque et
la tête les détruit tous les deux. (Ex : un fragment de cendre de cigarette).

On empile plusieurs plateaux les uns au-dessus des autres. Les plateaux tournent à la même vitesse. Les têtes sont solidaires (une tête par face).

Figure 28. Pile de plusieurs plateaux.

VII.2.1. Formatage physique

Sur chaque face, on écrit sur des pistes concentriques. Les pistes au-dessus les unes des autres sont accessibles sans bouger les têtes de lecture. Elles forment un cylindre.

Figure 29. Le disque après formatage.

Les pistes sont divisées en secteurs. Le secteur est l'unité de lecture-écriture. Le formatage physique marque les positions des pistes et des secteurs.

VII.2.2. La taille du disque

Il suffit de connaître :

        La taille du secteur.

        Le nombre de secteurs par piste.

        Le nombre de pistes par cylindre.

        Le nombre de cylindres.

Taille d'une piste = taille d'un secteur x nombre de secteurs (clusters, blocs) par piste

Taille d'un cylindre = taille d'une piste x nombre de faces par cylindre

Taille d'un plateau = taille d'une piste x nombre de pistes / plateau

Taille du disque = taille d'1 cyl. x nbre de cyl = taille d'1 plat. x nbre de plat.

VII.2.3. Adresses sur le disque

Chaque secteur est repéré par ses coordonnées : (n° de cylindre, n° de face, n° de secteur).

La carte d'interface reçoit de l'ordinateur une commande (lire, ou écrire + données) et une adresse de secteur, et exécute l'opération sur un secteur entier.



Figure 30. Les numéros de secteurs.

Figure 31. Les numéros de faces.

Figure 32. Les numéros de cylindres.

Alors physiquement, un fichier est une suite de secteurs dont l'ordre est essentiel !

Figure 33. Exemple de répartition d’un fichier dans un disque.

 

VII.2.4. Les temps d'accès
Quand on demande à lire un secteur, la carte d'interface va

1.      Placer les têtes de lecture sur le bon cylindre.

2.      Attendre que le secteur cherché arrive sous la tête.

3.      Copier le secteur sur la carte d'interface.

4.      Envoyer les données de la carte à l'ordinateur.

VII.2.4.1. Temps de lecture d'un secteur

(Durée de 1 tour) / (Nombre de secteurs par piste).

Durée constante (ex : 0,5 ms)

Débit = le nombre d'octets lus par seconde

Si on lisait sans arrêt = le nombre d'octets qui passent sous la tête en 1 seconde.

Exemple:

Secteurs de 512 octets, 32 secteurs / piste, 7200 tours / mn

⇒ 16 Ko par piste, 120 tours / s

Débit = 1920 Ko/s = 1,875 Mo par seconde

Lecture d'un secteur = 1 / (120 x 32) = 2,5x10-4 s

VII.2.4.2. Attendre un secteur

Au mieux : attente nulle

Au pire : un tour

Temps de latence = durée moyenne d'attente = demi durée d'un tour

Ex : 4 ms

VII.2.4.3. Changer de piste

Au plus près : la piste voisine ⇒ temps de déplacement minimal

Au plus loin : du cylindre intérieur au cylindre extérieur ⇒ temps de déplacement maximal

En général, entre les deux ⇒ temps de déplacement moyen

Ex : 9,5 ms

Alors, pour lire un fichier dans l'ordre et si les secteurs sont n'importe comment sur le disque, à chaque secteur il faut :

1.      Placer les têtes (durée = temps de déplacement moyen)

2.      Attendre le secteur (durée = temps de latence)

3.      Lire (durée fixe)

VII.2.5. Formatage logique

On divise le disque en partitions formées de cylindres consécutifs

Chaque partition est utilisée par le système comme un disque

        Un peu moins de déplacement de têtes.

        On peut mettre un système par partition (double boot).

VII.3. Organisation de l'espace disque

Il existe deux stratégies pour stocker un fichier de n octets sur disque :

1.      allouer des secteurs contigus totalisant une capacité d'au-moins n octets. Avec deux inconvénients:

o   le dernier secteur a toutes chances d'être sous-utilisé et ainsi, on gaspille de la place. Le pourcentage de place perdue est d'autant plus grand que la taille moyenne des fichiers est faible, ce qui est la réalité

o   si le fichier est agrandi, il faudra déplacer le fichier pour trouver un nouvel ensemble de secteurs consécutifs de taille suffisante

2.      diviser le fichier en blocs de taille fixe, insécables, que système d’exploitation alloue de façon non nécessairement contigüe à des secteurs.

Un bloc est défini comme une zone de mémoire secondaire contenant la quantité d'information qui peut être lue ou écrite par un périphérique en une seule opération. La taille d'un bloc est donc attachée à un périphérique d'E/S et fixée par le matériel. Cependant, si système d’exploitation n'a pas le choix de la taille d'un bloc, il peut grouper plusieurs article dans un même bloc (packing).

Pour des blocs de taille 1 Ko, le taux de remplissage du disque est excellent, mais la vitesse de transfert des données est modeste (délai de rotation du disque et de recherche importants par rapport au temps de transfert lui-même). Au-delà de 1 Ko, le taux de remplissage se dégrade, mais la vitesse de transfert s'améliore.

VII.4. Gestion des blocs libres

Dès qu'on a choisi une taille de blocs (souvent 1/2 Ko à 2 Ko), on doit trouver un moyen de mémoriser les blocs libres. Les deux techniques les plus répandues sont les suivantes :

        table de bits : on gère une table comportant autant de bits que de blocs sur le disque. A chaque bloc du disque, correspond un bit dans la table, positionné à 1 si le bloc est occupé, à 0 si le bloc est libre (ou vice versa). Par exemple, un disque de 300 Mo, organisé en blocs de 1 Ko, sera géré par une table de 300 Kbits qui occupera 38 des 307.200 blocs

        liste chaînée de n° des blocs : par exemple, un disque de 300 Mo, organisé en blocs de 1 Ko : supposons que chaque bloc soit adressé par 4 octets. Chaque bloc de la liste pourra contenir 255 adresses de blocs libres. La liste comprendra donc au plus 307.200/255 = 1205 blocs. Cette solution mobilise beaucoup plus de place que la précédente.

Figure 34. Liste chaînée de n° des blocs.

On peut imaginer deux variantes de cette dernière solution :

        une liste chaînée de blocs : chaque bloc libre pointe sur le bloc libre suivant,

        une liste chaînée de zones libres : chaque bloc de début d'une série de blocs libres (zone libre) contient la taille de la zone et pointe sur le premier bloc de la zone libre suivante.