Antes de que se introdujera LBA, ¿por qué CHS comienza en 0,0,1
y no 0,0,0
?
Antes de que se introdujera LBA, ¿por qué CHS comienza en 0,0,1
y no 0,0,0
?
Respuestas:
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).
zero sector
có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
1
, todavía no he encontrado ninguna información sobre por qué (aunque sospecho que puede tener algo que ver con que el sector 0
esté reservado como un indicador de error). Me aseguraré de actualizarlo si encuentro algo.
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.
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.