Por que o endereçamento de número de setor no CHS começa no setor 1 e não 0?

13

Antes da introdução do LBA, por que o CHS começa 0,0,1e não 0,0,0?

Jordan Davis
fonte
1
"Por que a contagem do setor começa em 1 ..." - Na verdade, você está se referindo ao número do setor , não à contagem do setor . Esses são dois parâmetros distintos e diferentes usados ​​em uma solicitação de disco. O "índice do setor" também é uma fraca nomemclatura para o número do setor, pois existe uma entidade distinta chamada índice em unidades de disco.
sawdust

Respostas:

8

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).

Avanço
fonte
Eu já descobri a resposta para esta pergunta, mas acho que a pessoa que deixei nos meus comentários exibindo a resposta a excluiu ... de qualquer forma, a razão pela qual eu fiz essa pergunta foi devido ao fato de que todos e tudo o que li postaram basicamente o seu exato palavras para a maior parte. Essa resposta de "é do jeito que eles fizeram ..." realmente me incomodou porque as pessoas não apenas constroem algo e não o usam apenas porque não querem usá-lo ... que a lógica não faz desde em tudo ...
Jordan Davis
1
Analisando o histórico do CHR / CHS / LBA, você descobriu que antes do CHR, que era de tamanho variável usando MBBCCHHR, usava zero sectorcó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
Jordan Davis
@JordanDavis Na maioria dos casos, a área protegida pelo host está no final do disco, não começando. De fato, enquanto a nomenclatura para o primeiro setor é retornada como valor 1, ainda não encontrei nenhuma informação sobre o motivo (embora eu suspeite que possa ter algo a ver com o setor 0ser reservado como sinalizador de erro). Certificarei que você será atualizado se encontrar alguma coisa.
Break
O link da Wikipedia para a visão geral da seção FBA, sendo a lista o zero registro como ECC, mas isso soa bem, farei o mesmo se algum deles aparecer.
Jordan Davis
@JordanDavis Adicionei uma recompensa a essa questão, pois eu realmente gostaria de ouvir algumas opiniões de outras pessoas - especialmente no que diz respeito ao porquê . Sinta-se à vontade para manter a pergunta em aberto / sem resposta por enquanto. chance de outras respostas.
Revelação
8

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.

harrymc
fonte
"Eu diria que ele deixou o setor zero como um setor de endereçamento ..." - palpite ilógico. Cada setor possui um registro de identificação que inclui o endereço do cilindro / cabeçote / setor. O controlador de disco não precisa esperar o Índice aparecer para validar que a busca foi concluída no cilindro correto; o próximo setor que gira sob a cabeça é lido para verificação.
sawdust
"CH = número do cilindro (0 a 1023 dec.)" - O IBM PC BIOS original usa CH para o número "track". CH é um registo de 8 bits, de modo que o valor máximo é única 255.
serradura
"Tentei traçar a história do CHS ... e dei origem rápida ao LBA" - Para ficar claro, todas essas discussões sobre o "LBA" pertencem apenas às interfaces de disco do PC, especialmente à especificação ATAPI. Caso contrário, o CHS e o LBA podem coexistir. Por exemplo, escrevi alguns sistemas de arquivos que usavam LBA internamente, mas converti o endereçamento em CHS para executar a E / S de disco real pela interface do controlador. "o esquema CHS mais antigo realmente usou endereços de setor baseados em zero." - Verdade, mas isso aconteceu muito antes do CP / M.
sawdust
@sawdust: Tudo o que fiz foi citar documentos da IBM, que podem até ser anteriores à atribuição de registros para a interface do BIOS do PC. É claro que Bradley se enganou ou foi mal direcionado ao definir o setor 0 como um endereço reservado, mas não podemos ter certeza do motivo, pois isso nunca aconteceu. Pode ser que ele não estivesse ciente de que a parte do endereço do setor também continha o número da faixa. Ou talvez esse setor de reposição fosse uma propriedade de disquetes que foram transportadas para a interface geral do BIOS de Bradley. Sabemos apenas que o IBM / PC BIOS foi responsável por essa alteração no CHS.
harrymc
Como sempre nesses assuntos, a Lista de interrupções de Ralph Brown fornece informações valiosas. Embora seja verdade o que @sawdust escreveu sobre o CH ser um registrador de oito bits, não foi assim que o CX foi usado. Em vez disso, foi CX-bit enchido tanto com o número do cilindro e o sector número (mas esta extensão, aparentemente, só é aplicado a discos rígidos, disquetes não; para disquetes, CL realizado o número de sector e CH realizado o número do cilindro). Compare, por exemplo, a interface especificada para os parâmetros de entrada Int 13 / AH = 02h, BIOS - DISCO - LEIA SETOR (S) NA MEMÓRIA .
um CVn
1

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.

APO69
fonte
Sua reservado para motorista - I / O firmware interface, mesmo em disco SSD dia moderna ou o flash tem espaço reservado para operações de I / O para ler / escrever / copiar / formato etc ..
Jordan Davis
Dê uma olhada em This
yass
Sim, mas não o SETOR 0, mas o CILINDRO 0. A partir da primeira especificação (IBM 3740), o cilindro 0 é chamado "o cilindro do Índice" e armazena vários dados especificados em "INDEX CYLINDER LAYOUT". Nos discos modernos, esse cilindro geralmente é designado como "NÚMERO DO CILINDRO -1", sim "-1" e é acessível apenas pelo controlador. Não há nada para explicar por que o setor 0 não foi usado e, embora possamos vê-lo em alguns sistemas operacionais como o CP / M, ele é virtual, pois o hardware ainda é fabricado de acordo com o IBM 3740. Em outras palavras, o primeiro setor é SETOR 1. Por quê? "
NÚMERO