¿Por qué el direccionamiento del número de sector en CHS comienza en el sector 1 y no en el 0?

¿Por qué el direccionamiento del número de sector en CHS comienza en el sector 1 y no en el 0?

Antes de que se introdujera LBA, ¿por qué CHS comienza en 0,0,1y no en 0,0,0?

Respuesta1

Desafortunadamente, así es como se implementó y adoptó el esquema de direccionamiento CHS, popular en ese momento. Esto se adoptó como la convención oficial para las computadoras compatibles con IBM en las interrupciones del BIOS utilizadas para el acceso al disco, lo que explica por qué esta convención se usa hasta el día de hoy. Dela norma ECMA-107, Volumen y estructura de archivos de cartuchos de disco para intercambio de información(Esto también se menciona en el original.Especificación ATA-1):

6.1.3 Número de sector lógico

Cada sector de un volumen se identificará mediante un número de sector lógico. [...]Los números de sector lógico se asignarán en secuencia ascendente, comenzando con 0, comenzando en el sector 1, pista 00, lado 0., continuando por la pista 00, cara 1 (si FDC se puede grabar en ambas caras) y luego hasta la pista 01, cara 0, etc.

Esta cuestión se aborda en las especificaciones dealgunos discos duros, donde se observa que un determinadoCHS lógicodirección difiere de ladirección física CHSubicación. Esto se analiza más a fondo en elManual de referencia de la interfaz ATA de Seagate, que contiene esta interesante narrativa:

5.1 Direccionamiento de bloques lógicos

[...] se supone que los sectores del variador están mapeados linealmente, con un LBA 0 de cilindro 0/cabeza 0/sector 1.

[...] Para todos los modos de traducción, C=0, H=0, S=1 es equivalente a LBA=0.No es posible calcular un CHS equivalente para todas las direcciones de bloques lógicos en todos los modos de traducción porque esta fórmula solo funciona en una dirección. Esto se debe a que el direccionamiento CHS no puede acceder a 1/256 de todos los sectores posibles a los que puede acceder el direccionamiento de bloque lógico, ya que no hay ningún sector 0 en CHS.

Por lo tanto, para el direccionamiento lógico de CHS, aunque los primeros índices de cilindro/culata comienzan desde un desplazamiento basado en 0, y el primer índicesectorEl índice comienza desde1(por ejemplo, la dirección CHS mínima posible es 0/0/1), esto no cambia nada sobre lafísicoUbicación de este sector. Piensa en ello como el primero.físicosector del disco denominándose "sector 1", ocupando CHS 0/0/1. De hecho, el "primer" elemento en la mayoría de los lenguajes de programación está basado en 0, por lo que ellógicodirección del sector en CHS dirección 0/0/1 escero( 0x00).

Esto tiene mucho más sentido lógicamente (es decir, el "cero"lógicola dirección es la primerafísicosector), ya que podemos abordar el dispositivo de disco como cualquier otro dispositivo de memoria (ya que cada sector tiene una dirección lineal única para asignarlo a un sector físico), por lo que tiene sentido que LBA comience desde cero. De hecho, si nosotrostraducir la dirección CHS 0/0/1 a un LBA, el LBA resultante será 0x00000000(esta es la razón por la que se resta 1 del índice del sector en la mayoría de los cálculos de CHS a LBA, y por qué se suma 1 al índice para los cálculos de LBA a CHS).

Respuesta2

He tratado de rastrear la historia deCHSy el fiasco de la numeración de sectores "comenzando con 1", que ha causado muchas complicaciones a los escritores de controladores de disco y dio lugar rápidamente aLBBA.

CHS se remonta a los días en que las computadoras personales funcionaban con disquetes y cuando se inventó el BIOS. Esto es lo queWikipediadice :

El término BIOS (sistema básico de entrada/salida) fue inventado por Gary Kildall y apareció por primera vez en el sistema operativo CP/M en 1975, describiendo la parte específica de la máquina de CP/M cargada durante el tiempo de arranque que interactúa directamente con el hardware.

Una investigación sobre la BIOS CP/M ha encontrado el documento Archivo de información CP/M: llamadas al sistema BDOS, en el que los números del sector comienzan con cero. La conclusión es que:El primer esquema CHS en realidad usaba direcciones de sector de base cero..

Las direcciones de sector de base única se introdujeron por primera vez con el primer IBP/PC. El documento INT 13 - Servicios de BIOS de disquetedice específicamente:

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

Así que fue IBM/PC quien, mediante una implementación de facto del BIOS, convirtió la numeración de sectores de base cero a base uno.

De los doce ingenieros de IBM asignados para crear la computadora personal IBM (modelo 5150),David J. Bradleydesarrolló el código para su BIOS. Entonces él es quien, entre todos los demás detalles, decidió los parámetros para las interrupciones del disco. A este chico también le debemos junto con Mel Hallerman el famoso CTRL++ .ALTDEL

Entoncesla respuestaa la pregunta ¿Por qué el recuento del sector comienza en 1 y no en 0 en CHS?es :
Porque David J. Bradley programó el BIOS de esa manera.

En cuanto a por qué lo hizo de esta manera, es mejor que lo responda él mismo. Si tuviera que adivinar, diría que dejó el sector cero como sector de direccionamiento mediante el cual el conductor podía comprobar que la cabeza estaba en el camino correcto.

Como los discos en realidad fueron diseñados para no requerir tal mecanismo, y los ingenieros no estaban dispuestos a desperdiciar un sector debido al BIOS, el sector cero nunca llegó a existir. A partir de entonces, los escritores de controladores se vieron obligados a restar uno y sumar uno a las direcciones de sector para todas las llamadas de disco BIOS.

Respuesta3

La primera especificación en disquetes fue realizada por IBM con la aparición del IBM 3740 y no menciona que existan sectores reservados para el sistema. La única reserva del sistema es la pista 00, que almacena sólo las "Etiquetas del conjunto de datos" que identifican el tipo de información almacenada en las pistas 01 a 76. Define claramente que el primer sector es el SECTOR 1. Esto no es una coincidencia sino una cuestión de numeración natural frente a la numeración del ordenador.

Podemos observar que cuando un humano comienza a contar algo, no comienza con cero sino con uno. Por ejemplo, imaginemos que hay 135 estudiantes en un salón de clases. Contar el número sería algo así: Uno, dos, tres… ciento treinta y cuatro, ciento treinta y cinco.

Su representación numérica sería así: 1, 2, 3,... 134, 135 Hasta aquí estamos de acuerdo, ¿no?

Ahora pongamos los dígitos que no están representados por ser 0. Quedaría así: 001, 002, 003,..., 015, 016,..., 099, 100,..., 133, 134, 135.

Esto es lo que pasa conCHS:0,0,1 - 0,0,2 - 0,0,3...

Es significativo que las filas en las hojas de Excel o los campos autonuméricos de una base de datos empiezan por 1 y no por 0 y nadie ha dicho nada al respecto.

¿David J. Bradley programó el BIOS de esa manera?

Sí, pero él no estaba afuera.

Definitivamente no existe ninguna razón técnica por la que el SECTOR 0 no pueda usarse a menos que esté reservado y oculto a los usuarios por otros motivos. En principio todo apunta a que se trata de una cuestión de numeración natural.

GA21-9152-2 Archivo No. 3740-00,15
Sistema de entrada de datos IBM 3740

página 12
INICIALIZACIÓN DEL DISCO
...Cada disco contiene dos pistas de repuesto para reemplazar cualquier pista irregular. Además, la función de inicialización proporciona un medio para alterar la secuencia de direcciones de sector en el disquete. Normalmente, la secuencia de sectores es en orden numérico (1, 2, 3,... 25,26)
.

página 24
ETIQUETADO DE DATOS EN EL DISQUETE
Durante la inicialización, la etiqueta del conjunto de datos para un conjunto de datos se graba magnéticamente en la pista índice (pista 00) del disquete. El objetivo principal de esta etiqueta es mostrar la ubicación del conjunto de datos en el disquete.

Esto fue en 1973. Grababa datos en un disquete de 8". El IBM PC 5150 nació el 12 de agosto de 1981... y no podemos olvidar que debían mantener cierta compatibilidad con los dispositivos anteriores.

Definitivamente no hubo ninguna razón técnica.

información relacionada