Pourquoi l'adressage par numéro de secteur dans le SHC commence au secteur 1 et non à 0?


13

Avant l'introduction de LBA, pourquoi le CHS commence-t-il 0,0,1et non 0,0,0?


1
"Pourquoi le nombre de secteurs commence-t-il à 1 ..." - En fait, vous faites référence au numéro de secteur , pas au nombre de secteurs . Ce sont deux paramètres distincts et différents utilisés dans une demande de disque. "L'index de secteur" est également une nomenclature médiocre pour le numéro de secteur, car il existe une entité distincte appelée index dans les lecteurs de disque.
sciure de bois

Réponses:


8

Malheureusement, c'est exactement ainsi que le schéma d'adressage CHS, populaire à l'époque, a été implémenté et adopté. Cela a été adopté comme convention officielle pour les ordinateurs compatibles IBM dans les interruptions du BIOS utilisées pour l'accès au disque, expliquant pourquoi cette convention est utilisée à ce jour. D'après la norme ECMA-107 , structure de volume et de fichier des cartouches de disque pour l'échange d'informations (cela est également mentionné dans la spécification ATA-1 d'origine ):

6.1.3 Numéro de secteur logique

Chaque secteur d'un volume doit être identifié par un numéro de secteur logique. [...] Les numéros de secteurs logiques doivent être attribués dans un ordre croissant, commençant par 0, commençant au secteur 1, piste 00, face 0 , continuant sur la piste 00, face 1 (si le FDC est enregistrable des deux côtés), puis pour suivre 01, côté 0, etc.

Ce problème est résolu dans les spécifications de certains disques durs , où il est noté qu'une adresse CHS logique donnée diffère de l' emplacement de l' adresse CHS physique . Ceci est discuté plus en détail dans le manuel de référence de l'interface Seagate ATA , qui contient ce récit intéressant:

5.1 Adressage de bloc logique

[...] les secteurs sur l'entraînement sont supposés être cartographiés linéairement, avec un LBA 0 de cylindre 0 / culasse 0 / secteur 1.

[...] Pour tous les modes de traduction, C = 0, H = 0, S = 1 est équivalent à LBA = 0. Il n'est pas possible de calculer un CHS équivalent pour toutes les adresses de blocs logiques dans tous les modes de traduction car cette formule ne fonctionne que dans une seule direction. Cela est dû au fait que l'adressage CHS ne peut pas accéder au 1 / 256e de tous les secteurs possibles auxquels l'adressage de bloc logique peut accéder, car il n'y a pas de secteur 0 dans CHS.

Ainsi, pour l'adressage CHS logique, bien que les premiers indices de cylindre / culasse commencent à partir d'un décalage basé sur 0 et que le premier index de secteur commence à 1 (par exemple, l'adresse CHS minimale possible est 0/0/1), cela ne change rien l' emplacement physique de ce secteur. Considérez-le comme le premier secteur physique du disque appelé "secteur 1", occupant CHS 0/0/1. En effet, le "premier" élément dans la plupart des langages de programmation est basé sur 0, donc l' adresse logique du secteur à l'adresse CHS 0/0/1 est zéro ( 0x00).

Cela a beaucoup plus de sens sur le plan logique (à savoir, l' adresse logique "zéro" étant le premier secteur physique ), car nous pouvons adresser le périphérique de disque comme n'importe quel autre périphérique de mémoire (car chaque secteur a une adresse linéaire unique pour le mapper à un physique). secteur), c'est pourquoi il est logique que LBA commence à zéro. En effet, si nous traduisons l'adresse CHS 0/0/1 en LBA , le LBA résultant sera 0x00000000(c'est pourquoi 1 est soustrait de l'indice de secteur dans la plupart des calculs CHS en LBA, et pourquoi 1 est ajouté à l'index pour LBA aux calculs du SHC).


Je trouve déjà la réponse à cette question, mais je suppose que la personne à qui j'ai laissé mes commentaires affichant la réponse l'a supprimée ... de toute façon, la raison pour laquelle j'ai posé cette question était due au fait que tout le monde et tout ce que j'ai lu ont posté votre fondamentalement votre exact mots pour la plupart. Cette réponse de "c'est juste la façon dont ils l'ont fait ..." m'a vraiment ennuyé parce que les gens ne construisent pas simplement quelque chose et ne l'utilisent pas simplement parce qu'ils ne veulent pas l'utiliser ... cette logique ne fait pas depuis du tout ...
Jordan Davis

1
En parcourant l'histoire de CHR / CHS / LBA, vous constatez qu'avant CHR, qui était de longueur variable en utilisant MBBCCHHR, utilisait les zero sectorcodes d'erreur et les mauvais blocs, etc. la transition de l'ajout d'un contrôleur (firmware) au lecteur et le début des associations de disques "logiques" ... le contrôleur est maintenant invisible mais vous pouvez supposer qu'il l'utilise de la même manière ... le terme est maintenant appelé "Host Protected" Zone " en.wikipedia.org/wiki/Fixed-block_architecture et en.wikipedia.org/wiki/Host_protected_area
Jordan Davis

@JordanDavis dans la plupart des cas, la zone protégée par l'hôte se trouve à la fin du disque, pas au début. En effet, alors que la nomenclature du premier secteur est renvoyée en tant que valeur 1, je n'ai toujours pas trouvé d'informations sur la raison (même si je soupçonne que cela peut avoir quelque chose à voir avec le secteur 0réservé comme indicateur d'erreur). Je serai sûr de vous mettre à jour si je tombe sur quelque chose.
Percée le

Le lien Wikipédia pour l'aperçu de la section FBA, la liste étant l'enregistrement zéro en tant qu'ECC, mais cela sonne bien, je ferai de même si l'un ou l'autre apparaît.
Jordan Davis

@JordanDavis J'ai ajouté une prime à cette question, car j'aimerais vraiment entendre les commentaires des autres - en particulier en ce qui concerne le pourquoi . N'hésitez pas à laisser la question ouverte / sans réponse pour le moment chance pour d'autres réponses.
Percée du

8

J'ai essayé de retracer l'histoire de CHS et le fiasco de numérotation de secteur "commençant par 1", qui a causé de nombreuses complications pour les auteurs de pilotes de disque et a donné lieu rapidement à LBA .

CHS remonte à l'époque où les ordinateurs personnels fonctionnaient sur disquettes et à l'époque où le BIOS a été inventé. Voici ce que dit Wikipedia :

Le terme BIOS (Basic Input / Output System) a été inventé par Gary Kildall et est apparu pour la première fois dans le système d'exploitation CP / M en 1975, décrivant la partie spécifique à la machine de CP / M chargée pendant le démarrage qui s'interface directement avec le matériel.

Une recherche sur le BIOS CP / M a trouvé le document archive d'informations CP / M: appels système BDOS , dans lequel les numéros de secteur commencent par zéro. La conclusion est la suivante: le premier schéma CHS utilisait en fait des adresses de secteur à base zéro .

Les adresses sectorielles à base unique ont été introduites pour la première fois avec le premier IBP / PC. Le document INT 13 - Diskette BIOS Services dit spécifiquement:

Most disk BIOS calls use the following parameter scheme:

    AH = function request number
    AL = number of sectors  (1-128 dec.)
    CH = cylinder number  (0-1023 dec.)
    CL = sector number  (1-17 dec.)    <--------!!!
    DH = head number  (0-15 dec.)
    DL = drive number (0=A:, 1=2nd floppy, 80h=drive 0, 81h=drive 1)
    DL = drive number (0=A:, 1=2nd floppy, 80h=C:, 81h=D:)
         Note that some programming references use (0-3) as the
         drive number which represents diskettes only.
    ES:BX = address of user buffer

C'est donc l'IBM / PC qui, par une implémentation de facto du BIOS, a converti la numérotation des secteurs de base zéro à base unique.

Parmi les douze ingénieurs IBM affectés à la création de l'ordinateur personnel IBM (modèle 5150), David J. Bradley a développé le code de son BIOS. C'est donc lui qui, parmi tous ses autres détails, a décidé des paramètres des interruptions de disque. On doit aussi à ce mec avec Mel Hallerman le fameux CTRL+ ALT+ DEL.

Ainsi, la réponse à la question Pourquoi le nombre de secteurs commence-t-il à 1 et non à 0 dans CHS est:
Parce que David J. Bradley a programmé le BIOS de cette façon .

Quant à savoir pourquoi il l'a fait de cette façon, il vaut mieux lui-même répondre. Si je devais deviner, je dirais qu'il a quitté le secteur zéro en tant que secteur d'adressage par lequel le conducteur pouvait vérifier que la tête était sur la bonne voie.

Comme les disques ont été conçus pour ne pas nécessiter un tel mécanisme et que les ingénieurs n'étaient pas prêts à gaspiller un secteur à cause du BIOS, le secteur zéro n'a jamais vu le jour. Par la suite, les rédacteurs de pilotes se sont retrouvés avec la nécessité de soustraire un et d'ajouter un aux adresses de secteur pour tous les appels de disque BIOS.


"Je dirais qu'il a quitté le secteur zéro comme secteur d'adressage ..." - Devinette illogique. Chaque secteur a un enregistrement d'identification qui comprend l'adresse du cylindre / culasse / secteur. Le contrôleur de disque n'a pas à attendre l'index pour valider que la recherche s'est terminée sur le bon cylindre; le tout prochain secteur qui tourne sous la tête est lu pour vérification.
sciure de bois

"CH = numéro de cylindre (0-1023 déc.)" - Le BIOS IBM PC d'origine utilise CH pour le numéro de "piste". CH est un registre à 8 bits, donc la valeur maximale n'est que de 255.
sciure de bois

"J'ai essayé de retracer l'histoire de CHS ... et j'ai rapidement donné naissance à LBA" - Pour être clair, toutes ces discussions sur "LBA" ne concernent que les interfaces de disque PC, en particulier la spécification ATAPI. Sinon, CHS et LBA peuvent coexister. EG J'ai écrit quelques systèmes de fichiers qui utilisaient LBA en interne, mais j'ai converti l'adressage en CHS pour effectuer les E / S de disque réelles par l'interface du contrôleur. "le premier schéma CHS utilisait en fait des adresses de secteur à base zéro." - C'est vrai, mais c'est arrivé bien avant CP / M.
sciure de bois

@sawdust: Tout ce que j'ai fait, c'est de citer des documents IBM, qui pourraient même être antérieurs à l'attribution de registres pour l'interface BIOS du PC. Il est clair que Bradley s'est trompé ou a été mal dirigé en définissant le secteur 0 en tant qu'adresse réservée, mais nous ne pouvons pas savoir à quoi bon, car cela ne s'est jamais produit. Il se peut qu'il ne sache pas que la partie adresse du secteur contenait également le numéro de piste. Ou peut-être que ce secteur de rechange était une propriété des disquettes qui a été transférée dans l'interface BIOS générale de Bradley. Nous savons seulement que le BIOS IBM / PC était responsable de ce changement dans CHS.
harrymc

Comme toujours dans ces domaines, la liste d'interruptions de Ralph Brown fournit des informations précieuses. S'il est vrai que @sawdust a écrit à propos de CH comme un registre à huit bits, ce n'est pas ainsi que CX a été utilisé. Au lieu de cela, CX était bourré de bits à la fois avec le numéro de cylindre et le numéro de secteur (mais cette extension ne s'appliquait apparemment qu'aux disques durs, pas aux disquettes; pour les disquettes, CL détenait le numéro de secteur et CH détenait le numéro de cylindre). Comparez par exemple l'interface spécifiée pour Int 13 / AH = 02h, paramètres d'entrée BIOS - DISK - READ SECTOR (S) INTO MEMORY .
un CVn du

1

La première spécification sur les disquettes a été faite par IBM avec l'apparition de l'IBM 3740 et ne mentionne pas qu'il existe des secteurs réservés au système. La seule réservation pour le système est la piste 00, qui ne stocke que les "Data Set Labels" qui identifient le type d'informations stockées dans les pistes 01 à 76. Elle définit clairement que le premier secteur est le SECTEUR 1. Ce n'est pas une coïncidence mais une question de numération naturelle par rapport à la numérotation de l'ordinateur.

Nous pouvons observer que lorsqu'un humain commence à compter quoi que ce soit, il ne commence pas par zéro mais un. Par exemple, imaginez qu'il y a 135 élèves dans une classe. Compter le nombre serait quelque chose comme ça: un, deux, trois ... cent trente quatre, cent trente cinq.

Sa représentation numérique serait donc: 1, 2, 3, ... 134, 135 Jusqu'à présent, nous sommes d'accord, non?

Maintenant, mettons les chiffres qui ne sont pas représentés par 0. Cela ressemblerait à ceci: 001, 002, 003, ..., 015, 016, ..., 099, 100, ..., 133, 134, 135

C'est ce qui se passe avec CHS : 0,0,1 - 0,0,2 - 0,0,3 ...

Il est significatif que les lignes des feuilles Excel ou les champs auto-numériques d'une base de données commencent par 1 et non par 0 et personne n'a rien dit à ce sujet.

David J. Bradley a-t-il programmé le BIOS de cette façon?

Oui, mais il n'était pas en dehors.

Il n'y a certainement aucune raison technique pour laquelle SECTOR 0 ne peut pas être utilisé sauf s'il est réservé et caché aux utilisateurs pour d'autres raisons. En principe, tout indique qu'il s'agit d'une numérotation naturelle.

GA21-9152-2 No de dossier 3740-00,15
IBM 3740 Data Entry System

page 12
INITIALISATION DES DISQUES
... Chaque disque contient deux pistes de rechange pour remplacer les pistes irrégulières. De plus, la fonction d'initialisation fournit un moyen de modifier la séquence d'adresse de secteur sur la disquette. Normalement, la séquence des secteurs est dans l'ordre numérique (1, 2, 3, ... 25,26)
.

page 24
ÉTIQUETAGE DES DONNÉES SUR LA DISKETTE
Pendant l'initialisation, l'étiquette de l'ensemble de données d'un ensemble de données est enregistrée magnétiquement sur la piste d'index (piste 00) de la disquette. Le but principal de cette étiquette est de montrer l'emplacement de l'ensemble de données sur la disquette

C'était en 1973. Il enregistrait des données sur une disquette 8 ". L'IBM PC 5150 est né le 12 août 1981 ... et nous ne pouvons pas oublier qu'ils devaient maintenir une certaine compatibilité avec les appareils précédents.

Il n'y avait définitivement aucune raison technique.


Son réservé pour le pilote - L'interface du firmware d'E / S, même dans le disque SSD ou le flash moderne, a réservé un espace pour les opérations d'E / S pour lire / écrire / copier / formater etc.
Jordan Davis

Jetez un oeil à This
yass

Oui, mais pas SECTEUR 0 mais CYLINDRE 0. A partir de la première spécification (IBM 3740), le cylindre 0 est appelé "le cylindre Index" et stocke plusieurs données spécifiées dans "LA DISPOSITION DES CYLINDRES INDEX". Sur les disques modernes, ce cylindre est généralement attribué à "CYLINDER NUMBER -1", oui "-1", et n'est accessible que par le contrôleur. Il n'y a rien pour expliquer pourquoi le secteur 0 n'a pas été utilisé et bien que nous puissions le voir dans certains systèmes d'exploitation comme CP / M, il est virtuel puisque le matériel est toujours fabriqué selon IBM 3740. En d'autres termes, le premier secteur est SECTEUR 1. Pourquoi? "NUMÉROTATION NATURELLE"
APO69
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.