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.