Conservatoire national des arts et métiers
Architectures des systèmes informatiques
CHAPITRE 6
Mémoires de masse
Année 2002-2003

Suite N°1...

6.2.2 Organisation des données et gestion des disques

Parmi les facteurs d'organisation, certains dépendent du jeu d'instructions, d'autres du système d'exploitation. Dans la suite, on fait référence au jeu d'instructions x86 et aux systèmes Unix, Linux et de Microsoft. La matière n'est pas parfaitement ordonnée, des notions comme le secteur seront utilisées avant que d'être expliquées. Le lecteur qui n'est tout de même pas un néophyte se reportera en tant que de besoin quelques alinéas au delà de sa lecture.

6.2.2.1 Des zones réservées

Un disque préparé pour un système x86 contient un premier secteur de 512 octets nommé enregistrement maître. Il est lu et écrit en mémoire par un programme nommé chargeur, «bootstrap» littéralement tire-botte, du BIOS résidant en mémoire morte ROM ou EPROM de l'ordinateur. L'enregistrement maître contient :

Le programme chargeur maître utilise une partie du jeu d'instructions x86 et trois interruptions du BIOS. Il nécessite un processeur adéquat et ne traite que du disque, il est indépendant du système d'exploitation. Son exécution choisit parmi les partitions celle qui doit être activée et lit et lance l'exécution de l'amorce de celle-ci. L'exécution de cette amorce charge en mémoire le système d'exploitation propre à  cette partition. Ainsi un même disque peut recevoir des systèmes d'exploitation quelconques.Des virus comme Brain, Stoned, Empire, Azusa ou Michelangelo infectent le chargeur maître ou l'amorce en les modifiant. On les supprime le plus souvent par rechargement du programme à partir d'une zone du système d'exploitation.

La table des partitions contient la description du découpage du disque physique en un ou plus quatre disques logiques. Ce découpage donne les possibilités suivantes :

Le mot partition désigne l'acte de découper, faire la partition d'un territoire,
ou le résultat de ce découpage, une partition du plan.
C'est un abus de langage que de l'employer ici pour désigner un des éléments obtenus qui est une part.
Détail des opérations de chargement.

Le lecteur familier avec le jeu d'instructions x86 comprendra aisément le fonctionnement du programme. Un autre lecteur peut se contenter des commentaires qui décrivent le travail fait à l'exécution.

L'enregistrement maîtren de 512 octets, est placé en cylindre 0, tête 0, secteur 0. Il est écit lors du formatage du disque et peut être rechargé par les systèmes d'exploitation, commade DOS Fdisk/mbr par exemple.

Au chargement, le BIOS résidant en mémoire ROM, fait le test de mise sous tension, charge ce secteur en mémoire à l'adresse 0000:7C00 et lance son exécution par chargement du compteur ordinal.
Curieusement l'exécution commence par recopier les 512 octets dansz une zone commençant en 0000:0600.

7C00 FA           CLI
7C01 33C0         XOR AX,AX    ; mise à zéro du registre AX
7C03 8ED0         MOV SS,AX    ; mise à zéro du registre SS par copie du registre AX
7C05 BC007C       MOV SP,7C00  ; haut de la pile en 0000:7C00
7C08 8BF4         MOV SI,SP    ; copie à partir d'ici...
7C0A 50           PUSH AX      ; empile [AX]
7C0B 07           POP ES       ; dépile dans ES
7C0C 50           PUSH AX      ; empile [AX]
7C0D 1F           POP DS       ; dépile en DS
7C0E FB           STI
7C0F FC           CLD
7C10 BF0006       MOV DI,0600 ; ...vers 0000:0600...
7C13 B90001       MOV CX,0100 ; de 256 mots de 16 bits soit 512 octets.
7C16 F2           REPNZ
7C17 A5           MOVSW
7C18 EA1D060000   JMP 0000:061D

À partir d'ici, l'exécution se poursuit aux nouvelles adresses commençant à 0000:0600.

Le programme va analyser le premier octet de chaque ligne de la table.
Cet octet vaut 80 pour la partition active, 00 pour les autres.

; recherche d'une adresse de partition chargeable

061D BEBE07     MOV SI,07BE ; met dans SI l'adresse du premier octet de la première ligne
0620 B304       MOV BL,04            ; pour 4 entrées au plus
0622 803C80     CMP BYTE PTR [SI],80 ; est ce la partition à charger ?
0625 740E       JZ 0635              ; si oui aller à 0635
0627 803C00     CMP BYTE PTR [SI],00 ; est ce une partition non chargeable
062A 751C       JNZ 0648             ; si non écriture du message table invalide
062C 83C610     ADD SI,+10           ; si oui, analyse de l'entrée suivante
062F FECB       DEC BL               ; mise à jour du compteur d'entrées
0631 75EF       JNZ 0622             ; les 4 lignes ont elles été analysées ?
0633 CD18       INT 18               ; si oui aucune des partitions n'est chargeable.

; si une partition chargeable est trouvée, poursuite de l'analyse de la table pour vérifier
; que cette partition est la seule

0635 8B14       MOV DX,[SI] ; sauvegarde en DX des deux premiers octets de l'entrée active
0637 8B4C02     MOV CX,[SI+02] ; sauvegarde en CX des deux octets suivants
063A 8BEE       MOV BP,SI   ; sauvegarde en BP des deux premiers octets de l'entrée active
063C 83C610     ADD SI,+10  ; chargement de l'adresse de l'entrée suivante
063F FECB       DEC BL      ; mise à jour du numéro d'entrée
0641 741A       JZ 065D     ; si c'est la dernière aller à 065D adresse du chargeur
0643 803C00     CMP BYTE PTR [SI],00 ; est-elle non chargeable ?
0646 74F4       JZ 063C     ; si oui, passer à la suivante.

; La table n'est pas valide, écriture d'un message d'erreur pointé par SI sous la forme d'une
; chaîne ASCII terminée par 00 et entrée en boucle infinie

0648 BE8B06     MOV SI,068B ; chargement de l'adresse du message «Invalid partition table»
064B AC         LODSB       ; charge dans AL l'octet pointé par SI et incrémente SI
064C 3C00       CMP AL,00   ; est-ce la fin du message ?
064E 740B       JZ 065B     ; si oui aller à 065B
0650 56         PUSH SI     ; sauvegarder SI le temps que l'interruption 10 s'exécute
0651 BB0700     MOV BX,0007 ; paramètre de l'interruption 10
0654 B40E       MOV AH,0E   ; paramètre de l'interruption 10
0656 CD10       INT 10      ; écriture à l'écran du caractère dans AL
0658 5E         POP SI      ; rechargement de SI
0659 EBF0       JMP 064B    ; retour à 064B
065B EBFE       JMP 065B    ; boucle infinie d'attente de rechargement

; La table est valide, une partition à charger a été détectée.
; Les deux premiers mots de la partition contiennent les numéros de lecteur/tête
; et de cylindre/secteur du premier secteur de la partition.
; Ces données ont été mises dans BX en 0635 et dans CX en 0637.

065D BF0500     MOV DI,0005 ; pour essayer 5 fois
0660 BB007C     MOV BX,7C00 ; chargement de l'adresse où l'amorce sera écrite
0663 B80102     MOV AX,0201 ; code de lecture d'un secteur pour l'interruption bios n° 13
0666 57         PUSH DI     ; sauvegarde de DI pendant l'exécution de l'interruption
0667 CD13       INT 13      ; lancement de l'interruption 13
0669 5F         POP DI      ; restitution de DI
066A 730C       JNB 0678    ; saut si l'interruption s'est bien exécutée
066C 33C0       XOR AX,AX   ; mise à zéro de AX
066E CD13       INT 13      ; ...relance
0670 4F         DEC DI      ; mise à jour du compteur d'essais
0671 75ED       JNZ 0660    ; lancement du nouvel essai
0673 BEA306     MOV SI,06A3 ; choix du message «Error loading operating system»
0676 EBD3       JMP 064B    ; lancement de l'écriture du message à l'écran

; Le secteur d'amorce a été mis en mémoire par l'interruption 13 en 0667,
; vérification de la validité de la totalité des opérations en vérifiant la signature AA55.

0678 BEC206     MOV SI,06C2             ; chargement de l'adresse du message «Missing operating ; system»
067B BFFE7D     MOV DI,07FE             ; chargement du dernier mot du secteur qui contient la signature
067E 813D55AA   CMP WORD PTR [DI],AA55  ; vérification de la signature
0682 75C7       JNZ 064B                ; la signature est invalide, labcer l'émission du message
0684 8BF5       MOV SI,BP               ; SI = BP = déplacement de l'entrée de la partition active
0686 EA007C0000 JMP 0000:7C00 ; saut à l'adresse de début du secteur d'amorce

; les messages d'eereur
0680                                  49 6E 76 61 6C Inval
0690 69 64 20 70 61 72 74 69-74 69 6F 6E 20 74 61 62 id partition tab
06A0 6C 65 00 45 72 72 6F 72-20 6C 6F 61 64 69 6E 67 le Error loading
06B0 20 6F 70 65 72 61 74 69-6E 67 20 73 79 73 74 65 operating syste
06C0 6D 00 4D 69 73 73 69 6E-67 20 6F 70 65 72 61 74 m Missing operat
06D0 69 6E 67 20 73 79 73 74-65 6D 00                ing system

; exemple de table de partitions valide close par la signature AA55 :

07B0 80 01 ..
07C0 01 00 06 3F 3F C4 3F 00-00 00 81 1E 0C 00 00 00 ...??.?.........
07D0 01 C5 05 3F 7F 47 C0 1E-0C 00 40 0F 08 00 00 00 ...?.G....@.....
07E0 41 48 82 3F 7F 53 00 2E-14 00 00 BD 00 00 00 00 AH.?.S..........
07F0 41 54 83 3F BF 0F 00 EB-14 00 00 91 0B 00 55 AA AT.?..........U.

En résumé, ce tout premier secteur a la structure suivante :
Déplacement Description Taille
000h Code exécutable  
1BEh Entrée de la 1ère partition 16 octets
1CEh Entrée de la 2ème partition 16 octets
1DEh Entrée de la 3ème partition 16 octets
1EEh Entrée de la 4ème partition 16 octets
1FEh Signature AA55h 2 octets

Un enregistrement de partition a la structure suivante :
 
Déplacement Description Taille
00h État courant 00h ou 80h  1 octet
01h n° de tête du début de la partition 1 octet
02h n° de cylindre et de secteur du début de la partition, dans un codage assez compliqué 2 octets
04h type de la partition, une liste existe 1 octet
05h n° de tête de fin de la partition  1 octet
06h n° de cylindre et de secteur de fin de la partition, dans un codage assez compliqué  2 octets
08h nombre de secteurs entre le chargeur maître
et le premier secteur de la partition
4 octets
0Ch nombre de secteurs dans la partition 4 octets

Dans la suite, on ne distinguera pas un disque physique d'un disque logique.

On donne ici la structure du début d'une partition de type FAT32 de Microsoft.

Le début est très semblable à celui de l'enregistrement maître d'un disque. Un secteur contient des données et
parfois un programme. S'il y a un programme, il est exécuté en absolu, au moins dans son début. Il fait le chargement en mémoire centrale du système d'exploitation ou au moins de son début et lui passe la main. S'il n'y a pas de programme, la partition n'est pas chargeable. Les données sont des paramètres pour le système d'exploitation. Ce secteur est suivi (immédiatement après ou non) par un secteur relatif au système de fichiers.

Aperçu sur les données du premier secteur d'une partition relative à système de Microsoft.
 
Déplacement Description Taille en octets
00h saut à la zone de code + non opération
03h nom OEM du système installé
0Bh nombre d'octets par secteur
0Dh nombre de secteurs par granule
0Eh secteurs réservés
10h nombre de copies de la FAT
11h nombre maximum d'entrées dans le répertoire principal
13h nombre de secteurs pour les anciens systèmes (moins de 32Mo) 
15h descripteur du médium F8h pour un disque fixe
16h nombre de secteurs par FAT (anciens systèmes)
18h nombre de secteurs par piste
1Ah nombre de têtes
1Ch nombre de secteurs cachés dans la partition
20H nombre de secteurs dans la partition
24h nombre de secteurs par FAT
28h drapeaux *
2Ah version de la FAT32, majeure ou mineure
2
2Ch numéro** du granule de début du répertoire racine
30h numéro** du secteur d'information sur le système de fichiers
32h numéro** du secteur de copie de réserve du secteur d'amorce
34h réservé
12
40h numéro logique de disque de la partition
41h inutilisé
42h signature : 29h
43h numéro de série de la partition
47h nom de volume de la partition
11
52h nom de FAT (FAT32)
5Ah code exécutable
420
1FEh signature : AA55h mentionnée plus haut
* ces drapeaux sont relatifs aux FAT miroirs. Les bits 0-4 désignent la FAT active. Le bit 7 à 0 signifie que le miroir ne fonctionne pas, à 1 il signifie que le miroir est actif,  toute écriture sera faite dans toutes les FAT.
** ces numéros sont repérés par rapport au début de la partition.6.2.2.2 Les zones utiles

Les zones utiles du disque, éventuellement logique, ainsi lancé sont définies par le système d'exploitation. Elles valent pour la totalité du disque logique, elles ont :

6.2.2.2.1 La structure élémentaire a une unité, le secteur universellement adopté. La taille et le détail des secteurs relèvent aujourd'hui du contrôleur du disque en liaison avec le système d'exploitation. Cette situation est un héritage de l'histoire. D'autres structures seraient possibles comme on le verra dans le chapitre 17, les informaticiens ne feraient alors que suivre ce qui a été fait en matière de transmissions dans l'espace avec les normes IEEE 802.X.
Un secteur est une zone de longueur fixe, constituée de deux parties : une zone de repérage ou en-tête et une zone de contenu. Elles correspondent respectivement à l'en-tête (header) et au corps d'une trame ou encore à la suscription et au contenu d'un courrier. Ordinairement chaque zone est close par un mot de 16 bits, code cyclique de redondance ou CRC pour «cyclic redundancy code», calculé sur la totalité des octets de la zone et normalisé. Il est utilisé pour détecter des erreurs. La tendance actuelle est de remplacer le CRC par un code de Reed-Solomon, il consomme plus de place et demande plus de capacités dans le contrôleur du disque mais est susceptible de corriger des erreurs ce que le CRC ne fait pas. Une zone commence par des octets de synchronisation et est encadrée par des marques de début et de fin comme on le voit sur l'exemple plus loin.

L'en-tête, propre à chaque système d'exploitation contient :

Le contenu a une taille fixe : 128 octets dans CP/M pour les microordinateurs à 8 bits (années 1970), 256 puis 512 octets dans DOS, OS/2, Windows, sauf variantes prises dans le paramétrage des systèmes d'exploitation. La taille va jusqu'à 4096 octets dans des Cray comme elle l'était dans certaines machines de Tandon sous MSDOS. Des propositions ont été faites récemment pour combiner détection des erreurs et secteurs de 4096 octets. Les secteurs sont créés par écriture et vérification dans une opération de formatage dite parfois de haut niveau pour la distinguer du formatage de bas niveau mentionné plus haut. Lors du formatage de haut niveau, les secteurs reconnus défectueux sont marqués dans leur en-tête et dans au moins un autre repère. Selon les systèmes d'exploitation, un secteur ou un groupement de secteurs défectueux peut être ou non remplacé par un équivalant pris dans une réserve. Cet équivalant portera les repères de celui qu'il remplace. La piste a elle-même une structure entre les secteurs.

Exemple de structure physique d'une piste, système de Microsoft, codage MFM (modulation de fréquence modifiée), 17 secteurs par piste, repérage CHS cylindre-tête-secteur :La partie utile de la piste a un repère unique nommé index constitué de la fin de la piste et de son début :
Fonction Nombre d'octets Contenu 
s'il est fixe
Signification
Début de piste postindex
16
4Eh attente
Début de secteur
13
00h  présynchronisation
En-tête 1 A1h synchronisation de l'en-tête
../.. 1 FEh début d'en-tête
../.. 2 numéro de cylindre, (au plus 65536)
../.. 1 numéro de tête, (au plus 256)
../.. 1 numéro de secteur
../.. 2 CRC et fin d'en-tête
Séparateur 3 00h séparateur d'en-tête et de données
Début des Données 13 00h présynchronisation
../.. 1 A1h synchronisation
../.. 1 F8h début du corps des données
Données 512 données
../.. 2 CRC et fin du corps des données
Séparateur 3 00h récrits à chaque écriture
Séparateur 15 00h espace entre secteurs
Fin de piste préindex 693 4Eh fin de piste

Un secteur occupe 571 octets pour 512 octets utiles,
Une piste de 17 secteurs contient 10416 octets dont 8704 octets utiles.

Les octets de présynchronisation ont un rôle de remplissage. Par la rotation, ils fabriquent un délai. Ce délai est utilisé par le contrôleur pour la mise en état actif de ses circuits et la synchronisation de l'horloge de lecture par rapport à la vitesse de défilement de la piste (la vitesse de rotation est supposée fixe pendant le défilement d'un secteur).

La taille du secteur est un compromis entre :

Compromis signifie que les choix sont contingents et dépendent
des habitudes;
des impératifs de compatibilité;
de la technique du moment.
Le compromis est parfois impossible ou bancal. Cela a conduit Microsoft à dissocier les deux notions d'entité d'accès, le secteur et d'entité d'allocation, le granule. Un granule est un groupe «cluster» de secteurs constitué de quelques secteurs consécutifs, 2, 4, 8 ou plus, considérés comme une entité non dissociable pour l'allocation d'espace à un fichier. Un fichier est constitué d'un nombre entier de granules. Le repérage en est allégé, il suffit de repérer le granule. La perte d'espace en fin de fichier en est augmentée, on perd en moyenne un demi granule pour chaque fichiers, ce qui est beaucoup en pourcentage les très petits fichiers. La lecture et l'écriture sont toujours faites par secteur.

6.2.2.2.2 La structure de machine symbolique ou structure englobante. Dans tous les systèmes on trouve des outils de repérage et de gestion intermédiaires entre les secteurs ou structure granulaire et les fichiers qui sont toujours considérés comme des suites de bits ou d'octets (on dit parfois des flots). Ces outils ont partout le même nom système de fichiers (file system). Il en est ici comme dans une mémoire segmentée gérée par pagination. Les segments ont des contenus homogènes, homologues des fichiers. La gestion des pages les applique sur la mémoire réelle ou virtuelle.

Le granule de Microsoft n'a pas de réalité physique propre car il ne fait pas l'objet d'une écriture spécifique. Son existence est construite par le système d'exploitation. À ce titre il est le correspondant direct de la page. Le granule de 4, 8, 16, 32, 64 secteurs est donc une structure intermédiaire comme la page vis-à-vis du mot.
Vis-à-vis de la festion de la mémoire, le granule du disque est 
l'homologue de la page de mémoire
et aussi de l'incrément minimum de taille du segment de mémoire
Le système de fichiers applique les fichiers sur la structure formée par les granules ou les secteurs. Leurs noms sont : FS (file system) pour MSDOS, les Unix et Linux; HPFS (high performance file system) pour OS/2, qui est lu et écrit par Windows NT, et lu seulement par Linux; NTFS (NT file system) pour Windows NT (ne pas confondre NTFS et NFS). Le système de fichiers est constitué de deux groupes d'information, organisés selon plusieurs techniques.Le premier groupe est relatif aux fichiers. Le fichier est une unité de conservation de l'information, il est nécessaire de l'identifier par un nom et de lui attribuer des caractéristiques : localisation et attributs. On dit parfois indentificateur du fichier.
 
Le fichier du disque est l'homologue du segment de mémoire

On trouvera donc systématiquement, formant un enregistrement, souvent nommé entrée du répertoire :

Ces enregistrements peuvent être organisés :

.en liste unique, elle n'est plus utilisée;
.en listes multiples selon les utilisateurs (MVS d'IBM);
.en arbre, c'est la cas le plus fréquent (les Unix, MSDOS, Windows, MacOs, etc.).
 
L'identificateur du fichier du disque est 
l'homologue du descripteur du segment de mémoire

Exemple : L'identificateur dans les systèmes de Microsoft.

Un répertoire est un fichier constitué d'entrées de 32 octets chacune. Il sert à repérer des fichiers ou un autre répertoire. Au départ, un fichier était nommé à l'aide de 8+3 caractères. Les 32 octets contenaient le nom du fichier (11 octets), ses attributs ("D", "R", "H", "S", "A", sur 1 octet), sa taille en octets sur 4 octets, donc 32 bits, limitant la taille à 232 octets), sa date de création (2 octets), le n° du 1er granule sur 4 octets, ...

Des «noms longs» jusqu'à 255 caractères, utilisables à partir de Windows 95, ont nécessité une refonte des entrées compatible avec l'ancien système (sauf pour Windows NT qui utilise un autre système).

La structure d'une entrée de répertoire avant Windows 95 était :

 
Zône Taille
en octets
Remarques
Nom de fichier
Extension
Attributs N° du bit  Signification
lecture seule
fichier caché
fichier système
nom de volume
sous-répertoire
archive
réservé
réservé
Reservé 10 
Heure
Date
1er granule
Taille
Total 32
Pour les noms longs, la structure est très différente, ils ont : L'entrée du nom court est la même que précédemment après transformation du nom long en nom court sur 8 caractères comme suit : les 6 premiers caractères au plus du nom sont pris après élimination des blancs, des caractères typographiques et des chiffres. Ces 6 caractères sont suivis du ~ et d'un numéro d'ordre qui tient compte des autres entrées enregistrées dont le nom court a les mêmes 6 premiers caractères. Si l'extension est de 3 caractères au plus, elle est conservée, sinon elle est limitée à 3 et le nom court a la forme d'un transformé.Cette entrée de nom court est PRÉCÉDÉE et non suivie d'autant d'entrées de nom long qu'il est nécessaire pour stocker ses caractères selon le tableau suivant :
 
Données
nom long
Taille 
(octets)
Remarques
N° d'entrée 1
Nom de fichier 10 UNICODE=5 caractères
Attributs 1 toujours 0x0F
Checksum 2
Suite du nom 12 UNICODE=6 caractères
Réservé 2
Suite du nom 4 UNICODE=2 caractères
Total 32
Une entrée de nom long contient donc au plus 5+6+2 =  13 caractères utiles.Les attributs du fichier sont portés par l'entrée de nom court. L'attribut des entrées de stockage du nom long sont toutes du type 4 derniers bits à 1, équivalent de volume, système, caché, lecture seule, soit 0x0F.

ATTENTION, il ne faut surtout pas utiliser un outil de tri de noms de fichiers dans un répertoire comme l'ancien DS pour  «directory sort» des utilitaires de Norton. Un tel tri rendra le répertoire inutilisable.

Enfin, alors que le nom court est en code ANSI, le nom long est codé en UNICODE à 16 bits (2 octets par caractère).

Le 1er octet d'une entrée de nom long contient son n° d'ordre, 0x01, 0x02, ..., celui de la dernière entrée a le bit 6 forcé à 1.

Application au nom de fichier : «Une nouvelle organisation de la société sera.txt»

48 caractères au total, le point et les espaces compris. Il faudra 4 entrées de nom long, 52=4x13 étant l'entier multiple de 13 immédiatement supérieur à 48.

Windows a déterminé comme nom court : "UNENOU~1.TXT"

Dans le répertoire contenant ce fichier, on trouve ceci :

00000100 44 73 00 65 00 72 00 61 00 2E 00 0F 00 8C 74 00 Ds.e.r.a......t. 
00000110 78 00 74 00 00 00 00 00 00 00 00 00 FF FF FF FF .x.t..............
00000120 03 64 00 65 00 20 00 6C 00 61 00 0F 00 8C 73 00 .d.e. .l.a....s. 
00000130 6F 00 63 00 69 00 82 00 74 00 00 00 82 00 20 00 o.c.i.é.t...é. .
00000140 02 6F 00 72 00 67 00 61 00 6E 00 0F 00 8C 69 00 .o.r.g.a.n....i. 
00000150 73 00 61 00 74 00 69 00 6F 00 00 00 6E 00 20 00 s.a.t.i.o...n. .
00000160 01 55 00 6E 00 65 00 20 00 6E 00 0F 00 8C 6F 00 .U.n.e. .n....o. 
00000170 75 00 76 00 65 00 6C 00 6C 00 00 00 65 00 20 00 u.v.e.l.l...e. .
00000180 55 4E 45 4E 4F 55 7E 21 54 58 54 20 00 27 25 8C UNENOU~1TXT .'%.
00000190 26 2A 26 2A 00 00 45 8C 26 2A FC 0A 33 00 00 00 &*&*..E.&*..3...


Il y a 4 entrées pour le nom long et une entrée pour le nom court.

En 0x0100, la 4ème et dernière entrée de nom long :
puisque dernière elle est repérée par le 1er octet égal à 0x40 auquel on ajoute 4 pour quatrième
étant une entrée de nom long, son attribut en 0x10B vaut 0x0F
texte en unicode «sera.txt»
En 0x0120, la 3ème entrée de nom long :
est repérée par le 1er octet égal à 0x03 pour troisième
étant une entrée de nom long, son attribut en 0x10B vaut 0x0F
texte en unicode «de la société »
En 0x0140, la 2ème entrée de nom long :
est repérée par le 1er octet égal à 0x02 pour deuxième
étant une entrée de nom long, son attribut en 0x10B vaut 0x0F
texte en unicode «organisation »
En 0x0160, la 1ère entrée de nom long :
est repérée par le 1er octet égal à 0x01 pour première
étant une entrée de nom long, son attribut en 0x10B vaut 0x0F
texte en unicode "Une nouvelle "

En 0x0180, l'entrée principale du nom court :
contient le texte ANSI «UNENOU~1.TXT»
nous avons mis son attribut à archive 0x20
le point séparateur n'est pas écrit dans un nom court.

Belle complexité !

Le second groupe lie les fichiers aux granules ou aux secteurs. Il s'agit de trouver dans l'ordre qui reconstitue la suite de bits ou flot, tous les granules d'un même fichier. Les techniques sont :

Chaque granule contient une zone réservée. Dans cette zone se trouve l'adresse du granule suivant, ce qui rompt l'homogénéité des contenus des secteurs. L'adresse du premier granule doit se trouver dans l'identificateur du fichier. Cette méthode est lourde car il faut lire chaque granule pour connaître l'adresse du suivant. Chaque fichier se voit attribuer une table de longueur fixe. Elle contient la liste ordonnée des adresses de granules successifs. La longueur de la table limite la taille des fichiers. La dernière ligne contient éventuellement un pointeur vers une table suivante qui contiendra une liste d'extension de granules, et ainsi de suite.Cette technique était utilisée dans CP/M. Cette technique est plus rapide que la précédente. Son inconvénient est double : la nécessité d'accéder à une table au moins pour chaque fichier et l'inhomogénéïté des tables de fichiers dont le nombre est variable.

On présente ci-dessous deux grands types de structures symboliques, celui de MSDOS et de ses successeurs et celui d'Unix. Ce choix couvre une très grande partie de l'existant.

Les granules du disque sont repérés dans une table nommée FAT (file allocation table) expression toujours traduite de façon fautive par table d'allocation des fichiers, au lieu de table d'allocation (des granules) AUX fichiers. Selon les supports, la zone affectée à un granule a 12 bits, 16 bits ou 32 bits.

Cette zone contient, exemple pris dans la FAT16 :
- soit une parmi trois valeurs particulières pour indiquer que le granule :

.est libre, 0000H,
.contient un ou plusieurs secteurs inutilisables, FFF7H,
.est le dernier d'un fichier, FFF8H ou FFFFH;
- soit le numéro du granule suivant du même fichier.

Si le granule était nommé page, la table d'allocation serait dite table des pages.

La FAT12, zone de 12 bits, repère au plus 4092 granules, soit pour des granules de 4 secteurs ou 2 ko, 8 Mo au plus. Ce format est utilisé pour les disquettes. Il était le seul format du très ancien DOS1.

La FAT16, zone de 16 bits, repère au plus 65531 granules, soit :
sans granules, 32 Mo au plus;
pour des granules de 4 secteurs, 2 ko, 128 Mo au plus;
pour des granules de 8 secteurs, 4 ko, 256 Mo au plus;
pour des granules de 16 secteurs, 8 ko, 1 Go au plus;
pour des granules de 32 secteurs, 16 ko, 2 Go au plus.

La FAT32, zone de 32 bits, repère au plus 4 milliards de granules.
La table ci-dessous fait la comparaison entre les volumes de disques et la taille des granules par défaut dans Windows.
Taille du disque Taille du granule FAT16 Taille du granule FAT32 Taille du granule NTFS
7Mo – 16Mo 2Ko Non géré 512 bytes
17Mo – 32Mo
512 bytes
Non géré
512 bytes
33Mo – 64Mo
1Ko
512 bytes
512 bytes
65Mo – 128Mo
2Ko
1Ko
512 bytes
129Mo – 256Mo
4Ko
2Ko
512 bytes
257Mo – 512Mo
8Ko
4Ko
512 bytes
513Mo – 1Go
16Ko
4Ko
1Ko
1Go – 2Go
32Ko
4Ko
2Ko
2Go – 4Go
64Ko
4Ko
4Ko
4Go – 8Go
Non géré
4Ko
4Ko
8Go – 16Go
Non géré
8Ko
4Ko
16Go – 32Go
Non géré
16Ko
4Ko
32Go – 2To
Non géré
Non géré
4Ko

La table des granules du disque est 
l'homologue de la table des pages de mémoire

Remarque : L'efficacité demande que la FAT réside en mémoire.

Les répertoires organisés en arborescence, contiennent les enregistrements relatifs aux fichiers. Ils sont une description minimale du fichier accompagnée d'informations de service :

.nom du fichier;
.longueur en octets;
.numéro du premier granule utilisé, (les suivants sont trouvés dans la table FAT);
.date et heure de dernière mise à jour;
.attributs : lecture ou lecture-écriture, visible ou caché, archive ou non, etc..
.éventuellement une extension du nom.

On peut très utilement remarquer ici que :

Un disque comme la mémoire centrale ou tout autre support a une structure propre, celle de la machine physique. Il est destiné à recevoir des contenus dont la structure est définie dans la machine symbolique.

Il faut donc traiter séparément :

.la gestion des éléments physiques du disque, secteurs ou granules;
.la gestion des contenus ou fichiers ou programmes;
.l'organisation en secteurs de longueur fixe, indépendants des contenus est proche de la pagination d'une
 mémoire,;structure englobante des mots de mémoire;
.l'organisation des contenus, fichiers de longueur quelconque et dont le contenu est homogène et toujours supposé
 parfaitement ordonné, est proche de la segmentation de la mémoire.

Le ou les répertoires contiennent des entrées, enregistrements de taille fixe contenant les renseignements nécessaires à la gestion d'un fichier. La correspondance avec les segments en mémoire centrale est forte. Tout d'abord le fichier est une suite de données non structurées commençant à 0. L'entrée du répertoire est attachée à un fichier comme le descripteur est attaché de segment.

Les Unix se rattachent à deux branches principales : Système V d'ATT et BSD de Berkeley Software Development. Les différences sont peu visibles pour les utilisateurs mais leurs systèmes de fichiers sont incompatibles bien qu'ayant la même structure. Une norme incompatible avec les deux premiers systèmes a été définie par l'OSF (Open System Fundation).Un secteur nommé bloc de 512 à 4096 octets suivant les systèmes contient la première table. La structure est composée de trois entités:

.le super bloc qui contient le nombre de blocs, le nombre de nœuds d'index ou i-nodes (i pour index, node pour nœud), une table de i-nodes libres et le début de la structure de chaînage des blocs libres;
.le fichier des i-nodes;
.le fichier de données, fichier régulier, répertoire, etc.

Un fichier de données est décrit par :

.l'identificateur du propriétaire;
.le type du fichier, régulier, répertoire, caractères, spécial, tube;
.un jeu de 9 bits (rwx)p(rwx)g(rwx)a de droits d'accès en lecture (r), écriture (w), exécution (x), respectivement du propriétaire p, du groupe g, des autres a;

.un jeu de dernières dates d'accès au fichier;
.la dernière date de modification de l'i-node;
.un compteur de références qui compte le nombre de fois où ce fichier est lié à un nom symbolique dans un répertoire;
.la taille;
.la table du contenu ou table d'index ou nœud, qui donne son nom «index node» en abrégé i-node à la totalité du descripteur.

Le fichier est manipulé en utilisant son numéro d'i-node et non pas le nom symbolique donné par l'utilisateur. La correspondance est faite dans un tableau qui a le rôle de répertoire. Il contient la suite de triplets :

(taille de l'entrée, n° d'i-node, nom symbolique relatif)

Le vrai repère est le numéro d'i-node, le nom symbolique est attaché à un seul i-node mais le même i-node peut avoir plusieurs noms symboliques qui ne sont que des noms externes.

Un système de fichiers est un disque virtuel créé par le responsable du système. Un disque peut être partitionné en plusieurs systèmes. Un système de fichiers peut être réparti sur plusieurs disques (pas toujours). L'utilisateur ne voit donc que ces disques virtuels.

Le super bloc contient des informations sur l'espace utilisé dans le disque, la liste des i-nodes utilisés, noms internes des fichiers sous la forme d'entiers et des informations sur les fichiers réguliers.

À chaque i-node correspond une table de granules et, si besoin est, une suite de tables dont l'accès est fait par adressage indirect (pointeur).

6.2.3 Résumé des caractéristiques des supports de mémoire (supports spatiaux)

O() est mis pour «de l'ordre de» et UGM pour unité de gestion de la mémoire.
Type/propriétés Registre Cache L1 cache L2 Mémoire 
«centrale» 
Cache 
du disque
Disque
Emplacement interne au
processeur
interne au processeur entre processeur 
et mémoire
contrôleur
Technique bascules SRAM SRAM DRAM DRAM magnétique
Capacité O(octet) O(10 ko) O(1 Mo) O(10 Mo) O(Mo) O(Go)
Taille du granule bit/octet/mot O(10 o) O(100 o) O( ko) O(10ko) O(10 ko)
Temps d'accès O(ns) ~5ns ~25 ns ~100 ns ~200 ns O(ms)
Débit O(Go/s) O(Go/s) O(Go/s) O(100) Mo/s O(100 Mo/s) O(1 Mo/s)
Gestionnaire programme matériel matériel UGM/système matériel système

Questionnaire

Conservatoire national des arts et métiers
Architectures des systèmes informatiques
CHAPITRE 6
Mémoires de masse
Année 2002-2003