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

13

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

Jordan Davis
fuente
1
"¿Por qué el recuento de sectores comienza en 1 ...?" - En realidad, se refiere al número de sector , no al recuento de sectores . Esos son dos parámetros distintos y diferentes utilizados en una solicitud de disco. El "índice de sector" también es una nomemclatura pobre para el número de sector, ya que existe una entidad distinta llamada índice en las unidades de disco.
aserrín

Respuestas:

8

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 utiliza hasta el día de hoy. Del estándar ECMA-107 , volumen y estructura de archivos de los cartuchos de disco para el intercambio de información (esto también se menciona en la especificación original ATA-1 ):

6.1.3 Número de sector lógico

Cada sector en un volumen se identificará mediante un Número de sector lógico. [...] Los números del sector lógico se asignarán en una secuencia ascendente, comenzando con 0, comenzando en el sector 1, pista 00, lado 0 , continuando en la pista 00, lado 1 (si FDC es grabable en ambos lados) y luego para rastrear 01, lado 0, etc.

Este problema se aborda en las especificaciones de algunos discos duros , donde se observa que una dirección CHS lógica dada difiere de la ubicación de la dirección CHS física . Esto se trata más detalladamente en el Manual de referencia de la interfaz ATA de Seagate , que contiene esta narrativa interesante:

5.1 Direccionamiento de bloque lógico

[...] se supone que los sectores en el 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 bloque lógico 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 sector 0 en CHS.

Por lo tanto, para el direccionamiento CHS lógico, aunque los primeros índices de cilindro / cabeza comienzan desde un desplazamiento basado en 0, y el primer índice del sector comienza desde 1 (por ejemplo, la dirección CHS mínima posible es 0/0/1), esto no cambia nada sobre La ubicación física de este sector. Piense en ello como el primer sector físico en el disco llamado "sector 1", que ocupa 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 la dirección lógica del sector en la dirección CHS 0/0/1 es cero ( 0x00).

Esto tiene mucho más sentido lógicamente (es decir, la dirección lógica "zeroth" es el primer sector físico ), 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 mapearlo a un físico sector), por lo que tiene sentido que LBA comience desde cero. De hecho, si traducimos la dirección CHS 0/0/1 a un LBA , el LBA resultante será 0x00000000(es por eso que 1 se resta del índice del sector en la mayoría de los cálculos de CHS a LBA, y por qué 1 se agrega al índice para LBA a los cálculos CHS).

Penetración
fuente
Calculo la respuesta a esta pregunta ya, pero supongo que la persona que dejé mis comentarios mostrando la respuesta la eliminó ... de todos modos, la razón por la que hice esta pregunta se debió al hecho de que todos y todo lo que leí publicaron básicamente su exacta palabras en su mayor parte. Esta respuesta de "es solo la forma en que lo hicieron ..." realmente me molestó porque la gente no solo construye algo y no lo usa solo porque no quiere usarlo ... esa lógica no funciona desde entonces en absoluto ...
Jordan Davis
1
Al revisar la historia de CHR / CHS / LBA, se encuentra que antes de CHR, que era de longitud variable usando MBBCCHHR, usaba zero sectorcódigos de error y bloques defectuosos, etc. la transición de agregar un controlador (firmware) a la unidad y el inicio de asociaciones de disco "lógicas" ... el controlador ahora es invisible pero se puede suponer que lo usa de la misma manera ... el término ahora se llama "Host Protected" zona" en.wikipedia.org/wiki/Fixed-block_architecture y en.wikipedia.org/wiki/Host_protected_area
Jordan Davis
@JordanDavis en la mayoría de los casos, el área protegida por el host está al final del disco, no comienza. De hecho, aunque la nomenclatura para el primer sector se devuelve como el valor 1, todavía no he encontrado ninguna información sobre por qué (aunque sospecho que puede tener algo que ver con que el sector 0esté reservado como un indicador de error). Me aseguraré de actualizarlo si encuentro algo.
Avance
El enlace de Wikipedia para la descripción general de la sección FBA, la lista es el registro cero como ECC pero eso suena bien, haré lo mismo si aparece.
Jordan Davis
@JordanDavis He agregado una recompensa por esta pregunta, ya que realmente me gustaría escuchar algunos comentarios de otros, especialmente en lo que respecta al aspecto del por qué ... Siéntase libre de mantener la pregunta abierta / sin respuesta por el momento para dar un posibilidad de otras respuestas.
Avance
8

He tratado de rastrear la historia de CHS y el fiasco de numeración del sector "comenzando con 1", que ha causado muchas complicaciones para los escritores de controladores de disco y ha dado lugar rápidamente a LBA .

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

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 el BIOS CP / M ha encontrado el documento Archivo de información CP / M: llamadas al sistema BDOS , en las que los números de sector comienzan con cero. La conclusión es que: el esquema CHS más antiguo en realidad usaba direcciones de sector basadas en cero .

Las direcciones de un sector se introdujeron por primera vez con el primer IBP / PC. El documento INT 13 - Diskette BIOS Services dice 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

Entonces, fue la IBM / PC la que, por una implementación de facto del BIOS, convirtió la numeración del sector de cero a uno.

De los doce ingenieros de IBM asignados para crear la Computadora personal IBM (modelo 5150), David J. Bradley desarrolló el código para su BIOS. Entonces él es quien, entre todos sus otros detalles, decidió los parámetros para las interrupciones del disco. También le debemos a este tipo junto con Mel Hallerman el famoso CTRL+ ALT+ DEL.

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

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

Como los discos se diseñaron realmente para no requerir ese mecanismo, y los ingenieros no estaban listos para desperdiciar un sector debido a la BIOS, el sector cero nunca llegó a existir. A partir de entonces, los escritores de controladores se quedaron con la necesidad de restar uno y agregar uno a las direcciones de sector para todas las llamadas al disco BIOS.

harrymc
fuente
"Diría que dejó el sector cero como sector de direccionamiento ..." - Supongo ilógico. Cada sector tiene un registro de identificación que incluye la dirección del cilindro / cabeza / sector. El controlador de disco no tiene que esperar a que aparezca el índice para validar que la búsqueda se haya completado en el cilindro correcto; el siguiente sector que gira debajo de la cabeza se lee para su verificación.
aserrín
"CH = número de cilindro (0-1023 dec.)" : El BIOS de PC de IBM original usa CH para el número de "pista". CH es un registro de 8 bits, por lo que el valor máximo es solo 255.
aserrín
"Traté de rastrear la historia de CHS ... y di un rápido ascenso a LBA" . Para ser claros, todas estas discusiones sobre "LBA" solo se refieren a las interfaces de disco de PC, especialmente la especificación ATAPI. De lo contrario, CHS y LBA pueden coexistir. Por ejemplo, he escrito algunos sistemas de archivos que usaban LBA internamente, pero convertía el direccionamiento a CHS para realizar la E / S de disco real según la interfaz del controlador. "El esquema CHS más antiguo en realidad usaba direcciones de sector basadas en cero". - Cierto, pero eso sucedió mucho antes de CP / M.
aserrín
@sawdust: Todo lo que hice fue citar documentos de IBM, lo que incluso podría ser anterior a la asignación de registros para la interfaz BIOS de la PC. Está claro que Bradley se equivocó o dirigió mal al establecer el sector 0 como una dirección reservada, pero no podemos estar seguros de para qué, ya que nunca sucedió. Es posible que no supiera que la parte de dirección del sector también contenía el número de pista. O tal vez este sector de repuesto era una propiedad de los disquetes que se transfirieron a la interfaz general de BIOS de Bradley. Solo sabemos que el BIOS de IBM / PC fue responsable de este cambio en CHS.
harrymc
Como siempre en estos asuntos, la lista de interrupciones de Ralph Brown proporciona información invaluable. Si bien es cierto lo que escribió @sawdust acerca de que CH es un registro de ocho bits, no es así como se utilizó CX. En su lugar, CX fue bit-rellena con tanto el número de cilindro y sector número (pero esta extensión aparentemente sólo se aplica a los discos duros, disquetes no; para disquetes, CL llevó a cabo el número de sector y CH llevó a cabo el número de cilindro). Compare, por ejemplo, la interfaz especificada para Int 13 / AH = 02h, BIOS - DISCO - LEER SECTOR (S) EN los parámetros de entrada de MEMORIA .
un CVn
1

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

Podemos observar que cuando un humano comienza a contar algo, no comienza con cero sino con uno. Por ejemplo, imagine 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 ahora estamos de acuerdo, ¿verdad?

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

Esto es lo que sucede con CHS : 0,0,1 - 0,0,2 - 0,0,3 ...

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

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

Sí, pero no estaba fuera de juego.

Definitivamente no existe una razón técnica por la cual SECTOR 0 no se pueda usar a menos que esté reservado y oculto a los usuarios por otras razones. En principio, todo apunta a que es una cuestión de numeración natural.

GA21-9152-2 Archivo Nº 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 la dirección del sector en el disquete. Normalmente, la secuencia de sectores está en orden numérico (1, 2, 3, ... 25,26)
.

página 24
ETIQUETADO DE DATOS EN EL DISCO
Durante la inicialización, la etiqueta del conjunto de datos para un conjunto de datos se graba magnéticamente en la pista de í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. Grabó datos en un disquete de 8 ". La PC 5150 de IBM nació el 12 de agosto de 1981 ... y no podemos olvidar que tuvieron que mantener cierta compatibilidad con los dispositivos anteriores.

Definitivamente no había ninguna razón técnica.

APO69
fuente
Está reservado para el controlador: la interfaz de firmware de E / S, incluso en los discos SSD o flash modernos, tiene espacio reservado para las operaciones de E / S para leer / escribir / copiar / formatear, etc.
Jordan Davis
Echa un vistazo a esto
yass
Sí, pero no SECTOR 0 sino CILINDRO 0. Desde la primera especificación (IBM 3740) el cilindro 0 se llama "el cilindro índice" y almacena múltiples datos especificados en el "DISEÑO DE CILINDRO ÍNDICE". En los discos modernos, este cilindro generalmente se asigna como "NÚMERO DE CILINDRO -1", sí "-1", y solo es accesible por el controlador. No hay nada que explique por qué el sector 0 no se ha utilizado y, aunque podemos verlo en algunos sistemas operativos como CP / M, es virtual ya que el hardware todavía se fabrica de acuerdo con IBM 3740. En otras palabras, el primer sector es SECTOR 1. ¿Por qué? "NUMERACIÓN NATURAL"
APO69