Logical block addressing

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

Le LBA, ou Logical Block Addressing (« Adressage par bloc logique », en anglais) est historiquement un moyen d’adresser les secteurs d’un disque dur. Cette méthode d’adressage a ensuite été généralisée à un grand nombre de médias de stockage.

Cet adressage permet de désigner d’une façon unique un secteur d’un disque (la plus petite unité de données transférable (en lecture ou en écriture) par ce dernier). La taille d’un secteur est le plus souvent 512 octets mais certains supports (disques optiques ou opto-magnétiques en émulation de disque dur en particulier) emploient d’autres valeurs comme 1 024 octets ou 2 048 octets.

Histoire[modifier | modifier le code]

Les BIOS des anciens ordinateurs personnels permettaient seulement l’adressage en CHS des disques durs. Vers mi-1994 les plus gros disques durs IDE vendus avaient une capacité de plus de Gio (même si Windows 95 ne supportait que des partitions FAT16 de Gio maximum) pendant que les plus gros disques durs SCSI proposaient des capacités de l’ordre de Gio. L’adressage par CHS devenait trop limitatif et devait être remplacé.

Deux stratagèmes furent employés à cette époque pour permettre d’accéder à la capacité maximale des disques, le premier fut appelé ECHS pour (Enhanced CHS en anglais, soit « Cylindre/Tête/Secteur amélioré » en français). L’autre stratagème fut de masquer totalement la géométrie du disque aux programmes qui l’utilisent.

L’adresse CHS — bien qu’elle ait une réalité physique pour le disque dur — n’est en effet presque jamais utile ni au BIOS, ni au système d’exploitation, ni même aux programmes qu’il exécute. En outre, le modèle d’adresse CHS ne convient bien qu’aux disques durs (pas aux bandes magnétiques ou clefs USB par exemple).

C’est la norme SCSI qui a introduit en premier l’emploi des adresses LBA.

Adresse LBA[modifier | modifier le code]

L’adresse LBA d’un secteur de données est simplement un numéro unique pris dans l’intervalle [ 0 ... N [N est le nombre total de secteurs du support. Comme 0 est le numéro du tout premier secteur de données c’est N - 1 le numéro du dernier (et non pas N qui est le nombre total de secteurs).

Cet adressage a toujours été le seul disponible sur les périphériques SCSI (disques durs, unités de bandes magnétiques, lecteur de CD-ROM, etc.). Ainsi, la géométrie physique (nombre de plateaux, nombre de cylindres, etc.) est masquée. Les BIOS intégrés aux contrôleurs SCSI incluent donc des algorithmes de conversion entre les adresses CHS employées par MS-DOS ou Windows et les adresses LBA des disques (voir la section Conversion LBA / CHS).

Deux versions d’adresse LBA ont existé sur les disques durs IDE, une première version utilisant 28 bits pour coder l’adresse et permettant de gérer des disques d’une capacité maximale de 128 Gio soit 137,438953 Go et une seconde plus récente (en 2002 dans la norme ATA/ATAPI-6) utilisant 48 bits et qui permet de gérer des disques d’une capacité maximale de 128 Pio.

Plusieurs versions d’adresse LBA pour SCSI ont également existé, la première (disponible depuis l’origine SASI (en) en 1979) utilise 21 bits, la deuxième (disponible depuis 1987 mais normalisée avec SCSI-2 en 1994) utilise 32 bits, la dernière (vers 2000) emploie 64 bits et permet de gérer des disques d’une capacité allant jusqu’à 8 388 608 Pio.

Conversions LBA / CHS[modifier | modifier le code]

Pour un disque possédant NT têtes par cylindre et NS secteurs par piste (voir Cylindre/Tête/Secteur pour une définition précise de ces quantités), la conversion d’une adresse LBA A vers CHS s’obtient de la façon suivante (dans ces formules, le symbole % représente l’opération modulo et ÷ une division sans décimales ni reste) :

S = ( A % NS ) + 1
H = ( A - S + 1 ) / NS % NT
C = ( A - S + 1 ) / NS ÷ NT

ou encore en n’utilisant que des divisions sans décimales :

C = A ÷ NT ÷ NS
H = ( A - ( C × NT × NS ) ) ÷ NS
S = 1 + A - ( C × NT × NS ) - H × NS 

de la dernière ligne se déduit logiquement la conversion inverse d’une adresse C / H / S vers LBA :

A = ( C × NT × NS ) + ( H × NS ) + S - 1

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]