Antes da introdução do LBA, por que o CHS começa 0,0,1
e não 0,0,0
?
Antes da introdução do LBA, por que o CHS começa 0,0,1
e não 0,0,0
?
Respostas:
Infelizmente, é assim que o esquema de endereçamento CHS, popular na época, foi implementado e adotado. Isso foi adotado como a convenção oficial para computadores compatíveis com IBM nas interrupções do BIOS usadas para acesso ao disco, explicando por que essa convenção é usada até hoje. A partir do ECMA-107 Padrão , volume e da estrutura do arquivo de cartuchos de disco para Information Interchange (este também é mencionado no original especificação ATA-1 ):
6.1.3 Número do setor lógico
Cada setor em um volume deve ser identificado por um número de setor lógico. [...] Os números do setor lógico devem ser atribuídos em uma seqüência ascendente, começando com 0, começando no setor 1, faixa 00, lado 0 , continuando na faixa 00, lado 1 (se FDC for gravável em ambos os lados) e depois para rastrear 01, lado 0, etc.
Esse problema foi solucionado nas especificações de alguns discos rígidos , onde se observa que um determinado endereço CHS lógico difere do local físico do endereço CHS . Isso será discutido mais detalhadamente no Manual de referência da interface ATA da Seagate , que contém esta narrativa interessante:
5.1 Endereçamento de bloco lógico
[...] presume-se que os setores no inversor sejam mapeados linearmente, com um LBA 0 do cilindro 0 / cabeça 0 / setor 1.
[...] Para todos os modos de tradução, C = 0, H = 0, S = 1 é equivalente a LBA = 0. Não é possível calcular um CHS equivalente para todos os endereços de bloco lógico em todos os modos de conversão, porque essa fórmula funciona apenas em uma direção. Isso ocorre porque o endereçamento CHS não pode acessar 1/25 de todos os setores possíveis que o endereçamento de bloco lógico pode acessar, já que não há setor 0 no CHS.
Assim, para o endereçamento lógico do CHS, embora os primeiros índices do cilindro / cabeçote iniciem com um deslocamento baseado em 0 e o primeiro índice do setor inicie com 1 (por exemplo, o endereço CHS mínimo possível é 0/0/1), isso não muda nada sobre a localização física desse setor. Pense nele como o primeiro setor físico do disco chamado "setor 1", ocupando CHS 0/0/1. De fato, o "primeiro" elemento na maioria das linguagens de programação é baseado em 0; portanto, o endereço lógico do setor no endereço CHS 0/0/1 é zero ( 0x00
).
Isso faz muito mais sentido logicamente (ou seja, o endereço lógico "zeroth" é o primeiro setor físico ), pois podemos endereçar o dispositivo de disco como qualquer outro dispositivo de memória (já que cada setor tem um endereço linear exclusivo para mapeá-lo para um físico). setor), por isso faz sentido para o LBA começar do zero. De fato, se convertermos o endereço CHS 0/0/1 em um LBA , o LBA resultante será 0x00000000
(é por isso que 1 é subtraído do índice do setor na maioria dos cálculos de CHS para LBA e por que 1 é adicionado ao índice para LBA cálculos de CHS).
zero sector
códigos de erro e blocos defeituosos, etc .... transição para o CHS e "arquitetura de bloco fixo" a transição da adição de um controlador (firmware) à unidade e o início das associações de disco "lógicas" ... o controlador agora está invisível, mas você pode assumir que o usa da mesma maneira ... o termo agora é chamado de "Host protegido Área " en.wikipedia.org/wiki/Fixed-block_architecture e en.wikipedia.org/wiki/Host_protected_area
1
, ainda não encontrei nenhuma informação sobre o motivo (embora eu suspeite que possa ter algo a ver com o setor 0
ser reservado como sinalizador de erro). Certificarei que você será atualizado se encontrar alguma coisa.
Tentei traçar a história do CHS e o fiasco de numeração do setor "começando com 1", que causou muitas complicações para os gravadores de drivers de disco e deu origem rápida ao LBA .
O CHS remonta aos dias em que os computadores pessoais rodavam em disquetes e quando o BIOS foi inventado. Isto é o que a Wikipedia diz:
O termo BIOS (Sistema Básico de Entrada / Saída) foi inventado por Gary Kildall e apareceu pela primeira vez no sistema operacional CP / M em 1975, descrevendo a parte específica do computador do CP / M carregada durante o tempo de inicialização que faz interface diretamente com o hardware.
Uma pesquisa no BIOS do CP / M encontrou o arquivo de informações do documento CP / M: Chamadas do sistema BDOS , nas quais os números do setor começam com zero. A conclusão é que: o esquema CHS mais antigo realmente usou endereços de setor baseados em zero .
Endereços de setor baseados em um foram introduzidos pela primeira vez com o primeiro IBP / PC. O documento INT 13 - Serviços de BIOS de disquete diz especificamente:
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
Portanto, foi o IBM / PC que, por uma implementação de fato do BIOS, converteu a numeração de setor de zero para uma baseada.
Dos doze engenheiros da IBM designados para criar o IBM Personal Computer (modelo 5150), David J. Bradley desenvolveu o código para seu BIOS. Então, foi ele quem, entre todos os outros detalhes, decidiu os parâmetros para as interrupções do disco. Também devemos a esse cara, juntamente com Mel Hallerman, o famoso CTRL+ ALT+ DEL.
Portanto, a resposta para a pergunta
Por que a contagem do setor começa em 1 e não em 0 no CHS é:
Porque David J. Bradley programou o BIOS dessa maneira .
Quanto ao motivo pelo qual ele fez dessa maneira, isso é melhor respondido por ele mesmo. Se eu tivesse que adivinhar, diria que ele deixou o setor zero como um setor de endereçamento pelo qual o motorista podia verificar se a cabeça estava no caminho certo.
Como os discos foram realmente projetados para não exigir esse mecanismo, e os engenheiros não estavam prontos para desperdiçar um setor por causa do BIOS, o setor zero nunca veio a existir. Posteriormente, os gravadores de driver ficaram com a necessidade de subtrair um e adicionar um aos endereços do setor para todas as chamadas de disco do BIOS.
A primeira especificação em disquetes foi feita pela IBM com a aparência do IBM 3740 e não menciona que existem setores reservados para o sistema. A única reserva para o sistema é a faixa 00, que armazena apenas os "Rótulos do conjunto de dados" que identificam o tipo de informação armazenada nas faixas 01 a 76. Ele define claramente que o primeiro setor é o SETOR 1. Isso não é uma coincidência, mas uma questão de numeração natural contra a numeração do computador.
Podemos observar que quando um humano começa a contar qualquer coisa, ele não começa com zero, mas com um. Por exemplo, imagine que haja 135 alunos na sala de aula. Contar o número seria algo assim: Um, dois, três ... cento e trinta e quatro, cento e trinta e cinco.
Sua representação numérica seria assim: 1, 2, 3, ... 134, 135 Até agora concordamos, certo?
Agora, vamos colocar os dígitos que não são representados por serem 0. Seria assim: 001, 002, 003, ..., 015, 016, ..., 099, 100, ..., 133, 134, 135
É o que acontece com o CHS : 0,0,1 - 0,0,2 - 0,0,3 ...
É significativo que as linhas nas planilhas do Excel ou os campos numéricos automáticos em um banco de dados iniciem por 1 e não por 0 e ninguém tenha dito nada sobre isso.
David J. Bradley agendou o BIOS dessa maneira?
Sim, mas ele não estava de fora.
Definitivamente, não há razão técnica para o uso do SECTOR 0, a menos que esteja reservado e oculto aos usuários por outros motivos. Em princípio, tudo indica que é uma questão de numeração natural.
GA21-9152-2 Arquivo nº 3740-00,15
IBM 3740 Data Entry System
página 12
INICIALIZAÇÃO DO DISCO
... Cada disco contém duas faixas sobressalentes para substituir quaisquer faixas irregulares. Além disso, o recurso de inicialização fornece um meio de alterar a sequência do endereço do setor no disquete. Normalmente, a sequência de setores está em ordem numérica (1, 2, 3, ... 25,26) .
página 24
ROTULAGEM DE DADOS NO DISCO
Durante a inicialização, o rótulo do conjunto de dados é gravado magneticamente na faixa de índice (faixa 00) do disquete. O objetivo principal deste rótulo é mostrar o local do conjunto de dados no disquete
Isso foi em 1973. Ele gravou dados em um disquete de 8 ". O IBM PC 5150 nasceu em 12 de agosto de 1981 ... e não podemos esquecer que eles precisavam manter alguma compatibilidade com os dispositivos anteriores.
Definitivamente não havia razão técnica.