Les tuples du SHC peuvent être mappés sur des adresses LBA (Logical Block Addressing) en utilisant la formule suivante :
Où est l'adresse LBA, est le nombre de têtes sur le disque, est le nombre de secteurs par piste, et est l'adresse CHS.
La formule du numéro de secteur logique dans les normes ECMA-107 et ISO/IEC 9293:1994 (remplaçant la norme ISO 9293:1987) pour les systèmes de fichiers FAT correspond exactement à la formule LBA donnée ci-dessus : Logical Block Address et Logical Sector Number (LSN) sont des synonymes. La formule n'utilise pas le nombre de cylindres, mais nécessite le nombre de têtes et le nombre de secteurs par piste dans la géométrie du disque, car le même tuple CHS adresse différents numéros de secteurs logiques selon la géométrie. Exemples :
Pour la géométrie 1020 16 63 d'un disque avec 1028160 secteurs CHS 3 2 1 est LBA 3150=(3* 16+2)* 63
Pour la géométrie 1008 4 255 d'un disque avec 1028160 secteurs CHS 3 2 1 est LBA 3570=(3* 4+2)*255
Pour la géométrie 64 255 63 d'un disque avec 1028160 secteurs CHS 3 2 1 est LBA 48321=(3*255+2)* 63
Pour la géométrie 2142 15 32 d'un disque avec 1028160 secteurs CHS 3 2 1 est LBA 1504=(3* 15+2)* 32
Pour aider à visualiser le séquençage des secteurs dans un modèle LBA linéaire, notez que ;
Le premier secteur LBA est le secteur # zéro, le même secteur dans un modèle CHS est appelé secteur # un.
Tous les secteurs de chaque tête/piste sont comptés avant de passer à la tête/piste suivante.
Toutes les têtes/pistes d'un même cylindre sont comptées avant de passer au cylindre suivant.
La moitié extérieure d'un disque dur entier serait la première moitié du disque.
En 2002, la spécification ATA-6 a introduit une option d'adressage par bloc logique de 48 bits et a déclaré l'adressage CHS obsolète, tout en autorisant la mise en œuvre des traductions ATA-5. Sans surprise, la formule de traduction de CHS en LBA donnée ci-dessus correspond également à la dernière traduction CHS de l'ATA-5. Dans la spécification ATA-5, le support CHS était obligatoire jusqu'à 16 514 064 secteurs et facultatif pour les disques plus grands. La limite ATA-5 correspond à CHS 16383 16 63 ou à des capacités de disque équivalentes (16514064=16383×16×63=1032×254×63), et nécessite 24=14+4+6 bits (16383+1=214).
def chs(lba,C=1024,H=255,S=63) :
"""
lba' adresse linéairement le secteur, en indexant à partir de zéro.
'C', 'H', 'S' spécifient la géométrie - fixe pour un disque donné :
1 <= C <= 1024 (10 bits)
1 <= H <= 255 (8 bits) et non 256 à cause de la bizarrerie du WD1010
1 <= S <= 63 (6 Bits) et non 64 à cause de la bizarrerie du WD1010
Renvoie l'adresse sous forme de tuple c,h,s :
0 <= c <= 1023 (10 bits) modulo C
0 <= h <= 255 (8 bits) modulo H
1 <= s <= 63 (6 Bits) et non 64 à cause de la bizarrerie du WD1010
"""
si C<1 ou H<1 ou S<1 ou C>1024 ou H>255 ou S>63 :
raise ValueError, \N
"Géométrie (C,H,S) non valide : ({},{},{})". \
format(C,H,S)
t,s = divmod(lba,S) ; s+=1 # pistes, décalage de secteur
c,h = divmod(t,H)
if c>=C : raise ValueError, \
"Valeur lba non adressable : {} pour une géométrie de ({},{},{})". \
format(lba,C,H,S)
retourne (c,h,s)
def lba(c,h,s,C=1024,H=255,S=63) :
"""
C', 'H', 'S' spécifient la géométrie comme pour la fonction 'chs'.
c', 'h', 's' adresse un secteur dans cette géométrie.
"""
si C<1 ou H<1 ou S<1 ou C>1024 ou H>255 ou S>63 :
raise ValueError, \N
"Géométrie (C,H,S) non valide : ({},{},{})". \
format(C,H,S)
si c<0 ou h<0 ou s<1 ou c>=C ou h>=H ou s>S :
raise ValueError, \
"Valeur (c,h,s) non adressable : ({},{},{}) pour une géométrie ({},{},{})". \
format(c,h,s,C,H,S)
retourne (c*H+h)*S+(s-1)
Adressage de blocs logiques :
Formule : A = (c ⋅ Ntêtes + h) ⋅ Nsecteurs + (s - 1)
A - Adresse du bloc logique
Nheads - Nombre de têtes sur un disque têtes par disque
Nsecteurs - Nombre de secteurs sur une piste secteurs par piste
c,h,s - sont les numéros de cylindre, de tête, de secteur 24 bits au total (10+8+6)