Infelizmente, é exatamente assim que o esquema de endereçamento da CHS, popular na época, foi implementado e adotado em uso. 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. De o Padrão ECMA-107 , Volume e estrutura do arquivo de cartuchos de disco para troca de informações (isso também é mencionado no original especificação ATA-1 ):
6.1.3 Logical Sector Number
Each sector on a volume shall be identified by a Logical Sector Number. [...] The Logical Sector Numbers shall be assigned in an ascending sequence, beginning with 0, starting at sector 1, track 00, side 0, continuing onto track 00, side 1 (if FDC is recordable on both sides) and then to track 01, side 0, etc.
Esse problema é abordado nas especificações para alguns discos rígidos , onde se observa que um determinado endereço CHS difere do local endereço físico CHS . Isso é discutido em mais detalhes no Manual de referência da interface Seagate ATA , que contém esta narrativa interessante:
5.1 Logical block addressing
[...] the sectors on the drive are assumed to be linearly mapped, with an LBA 0 of cylinder 0 / head 0 / sector 1.
[...] For all translation modes, C=0, H=0, S=1 is equivalent to LBA=0. It is not possible to compute an equivalent CHS for all logical block addresses in all translation modes because this formula only works in one direction. This is because CHS addressing can’t access 1/256th of all of the possible sectors that logical block addressing can access, since there is no sector 0 in CHS.
Assim, para o endereçamento lógico de CHS, embora os primeiros índices de cabeçote / cilindro comecem com um deslocamento baseado em 0, e o primeiro índice de setor comece de 1 (por exemplo, o mínimo possível endereço CHS é 0/0/1), isso não muda nada sobre a localização física deste setor. Pense nisso como o primeiro setor físico no disco que está sendo chamado de "setor 1", ocupando CHS 0/0/1. De fato, o "primeiro" elemento na maioria das linguagens de programação é baseado em 0, então o endereço lógico do setor no endereço 0/0/1 do CHS é zero ( 0x00
).
Isso faz muito mais sentido logicamente (ou seja, o endereço "em zeroth" lógico sendo o primeiro setor físico ), pois podemos endereçar o dispositivo de disco como qualquer outro dispositivo de memória (como cada setor tem um endereço linear exclusivo para mapeá-lo para um setor físico), assim, por que faz sentido para o LBA começar do zero. De fato, se nós traduzirmos 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 porque 1 é adicionado ao índice para os cálculos de LBA para CHS).