3.3. Fichiers séquentiels à longueur variable

On désire créer sur disque un fichier séquentiel d’enregistrements logiques, dont la taille est variable, parmi trois tailles possibles :
65% des enregistrements font 200 octets,
25% des enregistrements font 280 octets,
10% des enregistrements font 360 octets.
Les secteurs du disque font 1024 octets, le temps d’accès à s secteurs consécutifs est 8+s millisecondes, pourvu que la suite des opérations permette de négliger les mouvements de bras.
A– Déterminer la taille moyenne des enregistrements du fichier.
B– Donner la structure de bloc physique permettant le regroupement de plusieurs enregistrements logiques.
C– Étant données les caractéristiques du disque, quelle taille de bloc physique vous paraît judicieuse? En déduire l’occupation d’espace disque.
D– À votre avis, quelles sont les conditions qui permettent de négliger les mouvements de bras? Sont-elles remplies ici, et si oui, quel est le temps moyen de lecture ou d’écriture par enregistrements logique?
Solution de l’exercice 3.3

3.3.1. Question A

Si on prend 100 enregistrements, 65 ont une longueur de 200, 25 une longueur de 280 et 10 ont une longueur de 360, le total est donc de 23600, soit une longueur moyenne de 236.

3.3.2. Question B

Nous pouvons reprendre le raisonnement déjà vu dans l’exercice précédent, mais cette fois les enregistrements sont de longueur variable, et il faut connaître la taille de chacun. Le choix d’un caractère spécial comme séparateur n’est pas en général acceptable, car cela implique de l’interdire dans les enregistrements eux-mêmes, ce qui est une contrainte pour l’utilisateur. L’autre solution est de faire précéder chaque enregistrement de sa taille. Dans beaucoup de systèmes, la structure est définie de façon standard et complète, pour permettre de prendre en compte d'une part les enregistrements de taille variable, les blocs de taille variable, ainsi que les opérations de lecture arrière. Une certaine redondance est présente, pour permettre des contrôles. La structure d'un bloc physique pourrait être la suivante:
	numéro_bloc  2 octets
	long_bloc	  2 octets
		long_enrg		   2 octets
		enregistrement	   p octets	   n fois
		long_enrg		   2 octets
	long_bloc	  2 octets
	numéro_bloc  2 octets
La taille moyenne d’un bloc physique est donc 8 + 240 n.

3.3.3. Question C

Un bloc physique doit occuper un nombre entier de secteurs de 1024 octets. On peut donc étudier combien il est possible de mettre d’enregistrements dans 1, 2, 3 ou 4 secteurs. D’après la question précédente, si s est le nombre de secteur occupés par le bloc physique, n = (1024 s – 8) div 240. Le tableau donne les différents cas :
s
n
Taille bloc
Perte en %
1
4
968
5,5
2
8
1928
5,9
3
12
2888
6,0
4
17
4088
0,2
Si on cherche à optimiser la place disque, il semble bien que des blocs physiques de 4 secteurs donnent le minimum de perte. Notons que le nombre d’enregistrements par bloc est un nombre moyen, mais que plus ce nombre augmente, plus la répartition entre les tailles d’enregistrements se rapprocheront de la répartition de l’ensemble du fichier, ce qui milite également pour des blocs de 4 secteurs.

3.3.4. Question D

Si l’allocation des blocs physiques est contiguë et que l’on fait un parcours séquentiel des enregistrements du fichier, il n’y aura pas de mouvement de bras entre deux lectures ou écritures de blocs physiques, et ils peuvent donc être négligés. Dans ce cas, la lecture d’un bloc demandera, pour des blocs de 4 secteurs, 8 + 4 = 12 ms. Notons que ceci veut dire une moyenne de 0,7 ms par enregistrement logique du fichier.