
Antes da introdução do LBA, por que o CHS começa em 0,0,1
e não 0,0,0
?
Responder1
Infelizmente, foi assim que o esquema de endereçamento CHS, popular na época, foi implementado e adotado. Esta foi adotada como convenção oficial para computadores compatíveis com IBM nas interrupções do BIOS usadas para acesso ao disco, explicando por que esta convenção é usada até hoje. Deo padrão ECMA-107, Volume e estrutura de arquivos de cartuchos de disco para intercâmbio de informações(isso também é mencionado no originalEspecificação ATA-1):
6.1.3 Número do Setor Lógico
Cada setor de um volume será identificado por um Número de Setor Lógico. [...]Os Números do Setor Lógico serão atribuídos em sequência crescente, começando com 0, iniciando no setor 1, faixa 00, lado 0, continuando na trilha 00, lado 1 (se FDC for gravável em ambos os lados) e depois na trilha 01, lado 0, etc.
Esta questão é abordada nas especificações paraalguns discos rígidos, onde se nota que um dadoCHS lógicoendereço difere doendereço CHS físicolocalização. Isto é discutido mais detalhadamente noManual de referência da interface Seagate ATA, que contém esta interessante narrativa:
5.1 Endereçamento de bloco lógico
[...] os setores no drive são considerados mapeados linearmente, com um LBA 0 do cilindro 0 / cabeçote 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 blocos lógicos em todos os modos de tradução porque esta fórmula funciona apenas em uma direção. Isso ocorre porque o endereçamento CHS não pode acessar 1/256 de todos os setores possíveis que o endereçamento de bloco lógico pode acessar, uma vez que não há setor 0 no CHS.
Assim, para o endereçamento lógico CHS, embora os primeiros índices de cilindro/cabeçote comecem a partir de um deslocamento baseado em 0, e o primeirosetoro índice começa em1(por exemplo, o endereço CHS mínimo possível é 0/0/1), isso não muda nada nofísicolocalização deste setor. Pense nisso como o primeirofísicosetor do disco sendo denominado "setor 1", ocupando CHS 0/0/1. Na verdade, o “primeiro” elemento na maioria das linguagens de programação é baseado em 0, então ológicoendereço do setor no endereço CHS 0/0/1 ézero( 0x00
).
Isso faz muito mais sentido logicamente (ou seja, o "zero"lógicoendereço sendo o primeirofísicosetor), já que 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 setor físico), por isso faz sentido que o LBA comece do zero. Na verdade, se nóstraduza o endereço CHS 0/0/1 para 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 isso que 1 é adicionado ao índice para cálculos de LBA para CHS).
Responder2
Tentei traçar a históriaCHSe o fiasco da numeração de setores "começando com 1", que causou muitas complicações para os gravadores de drivers de disco e deu origem rápida aLBA.
CHS remonta à época em que os computadores pessoais funcionavam em disquetes e quando o BIOS foi inventado. Isso é o queWikipédiadiz :
O termo BIOS (Basic Input/Output System) foi inventado por Gary Kildall e apareceu pela primeira vez no sistema operacional CP/M em 1975, descrevendo a parte específica da máquina do CP/M carregada durante o tempo de inicialização que faz interface diretamente com o hardware.
Uma pesquisa no BIOS CP/M encontrou o documento Arquivo de informações CP/M: chamadas do sistema BDOS, em que os números dos setores começam com zero. A conclusão é que:o esquema CHS mais antigo realmente usava endereços de setor baseados em zero.
Os endereços de setor de base única foram introduzidos pela primeira vez com o primeiro IBP/PC. O documento INT 13 - Serviços de BIOS de disquetediz 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 meio de uma implementação de fato do BIOS, converteu a numeração de setores de base zero para base um.
Dos doze engenheiros da IBM designados para criar o IBM Personal Computer (modelo 5150),David J. Bradleydesenvolveu o código para seu BIOS. Então foi ele quem, entre todos os seus detalhes, decidiu os parâmetros das interrupções do disco. Também devemos a esse cara junto com Mel Hallerman o famoso CTRL+ ALT+ DEL.
Entãoa respostapara 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 forma.
Quanto ao motivo pelo qual ele fez isso dessa maneira, a melhor resposta é feita por ele mesmo. Se eu tivesse que adivinhar, diria que ele deixou o setor zero como setor de endereçamento pelo qual o motorista poderia verificar se o cabeçote estava no caminho certo.
Como os discos foram realmente projetados para não exigirem tal mecanismo, e os engenheiros não estavam dispostos a desperdiçar um setor por causa do BIOS, o setor zero nunca existiu. Depois disso, os gravadores de driver tiveram a necessidade de subtrair um e adicionar um aos endereços de setor para todas as chamadas de disco do BIOS.
Responder3
A primeira especificação em disquetes foi feita pela IBM com o surgimento do IBM 3740 e não menciona que existem setores reservados para o sistema. A única reserva do sistema é a trilha 00, que armazena apenas os “Data Set Labels” que identificam o tipo de informação armazenada nas trilhas 01 a 76. Define claramente que o primeiro setor é o SETOR 1. Isso não é uma coincidência, mas sim um questão da numeração natural versus a numeração do computador.
Podemos observar que quando um humano começa a contar qualquer coisa, não começa com zero, mas com um. Por exemplo, imagine que há 135 alunos numa 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é aí estamos de acordo, certo?
Agora vamos colocar os dígitos que não são representados por 0. Ficaria assim: 001, 002, 003, ..., 015, 016, ..., 099, 100, ..., 133, 134, 135
Isto é o que acontece comCHS:0,0,1 - 0,0,2 - 0,0,3...
É significativo que as linhas nas planilhas do Excel ou nos campos numéricos automáticos de um banco de dados comecem por 1 e não por 0 e ninguém tenha dito nada sobre isso.
David J. Bradley programou o BIOS dessa forma?
Sim, mas ele não estava lá fora.
Definitivamente, não há razão técnica para que o SECTOR 0 não possa ser usado, a menos que seja reservado e oculto dos 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 trilhas sobressalentes para substituir quaisquer trilhas 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
ETIQUETAGEM DE DADOS NO DISQUETE
Durante a inicialização, o rótulo do conjunto de dados é gravado magneticamente na trilha de índice (faixa 00) do disquete. O objetivo principal desta etiqueta é mostrar a localização do conjunto de dados no disquete
Isso foi em 1973. Gravava dados em um disquete de 8". O IBM PC 5150 nasceu em 12 de agosto de 1981... e não podemos esquecer que eles tiveram que manter alguma compatibilidade com os dispositivos anteriores.
Definitivamente não havia razão técnica.