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 em 0,0,1 e não em 0,0,0 ?

    
por Jordan Davis 18.09.2015 / 20:50

3 respostas

8

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

    
por 22.09.2015 / 23:50
8

Eu tentei rastrear a história do CHS e do setor "começando com 1" fiasco numeração, que causou muitas complicações para os drivers de disco escritores e deu um rápido aumento para LBA .

O CHS remonta aos dias em que os computadores pessoais eram executados em disquetes e quando o BIOS foi inventado. Isso é o que Wikipedia diz:

The term BIOS (Basic Input/Output System) was invented by Gary Kildall and first appeared in the CP/M operating system in 1975, describing the machine-specific part of CP/M loaded during boot time that interfaces directly with the hardware.

Uma pesquisa no BIOS CP / M encontrou o documento Arquivo de informações do CP / M: chamadas do sistema BDOS , em que os números do setor começam com zero. A conclusão é que: o esquema CHS mais antigo realmente utilizava endereços do setor .

Endereços setoriais baseados em uma pessoa foram introduzidos pela primeira vez com o primeiro IBP / PC. O documento INT 13 - Diskette BIOS Services 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

Assim, foi o IBM / PC que, por uma implementação de facto do BIOS, se converteu numeração de setor de base zero para baseada em um.

Dos doze engenheiros da IBM designados para criar o IBM Personal Computer (modelo 5150), David J. Bradley desenvolveu o código para o seu BIOS. Então ele é o único que, entre todos os seus outros detalhes, decidiu sobre os parâmetros para o disco interrompe. Nós também devemos a esse cara, junto com Mel Hallerman, o famoso CTRL + ALT + DEL .

Então, a resposta à pergunta Por que a contagem do setor começa em 1 e não 0 em CHS é:
Porque David J. Bradley programou a BIOS dessa forma .

Quanto ao porquê ele fez dessa maneira, isso é melhor respondido por ele mesmo. Se eu tivesse que adivinhar, eu diria que ele deixou o setor zero como um endereçamento setor pelo qual o motorista poderia verificar se a cabeça estava à direita faixa.

Como os discos foram realmente projetados para não exigir tal mecanismo, e os engenheiros não estavam prontos para desperdiçar um setor por causa da BIOS, setor zero nunca passou a existir. Depois disso, os escritores-pilotos deixou com a necessidade de subtrair-um e adicionar-um para os endereços do setor para todos Chamadas de disco do BIOS.

    
por 26.09.2015 / 11:57
1

A primeira especificação em disquetes foi feita pela IBM com a aparência da IBM 3740. Ela define claramente que o primeiro setor é SETOR 1. Isto não é por acaso. É uma questão de numeração natural contra a numeração computacional.

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 há 135 alunos em uma sala de aula. Contar o número seria algo assim,

Um, dois, tres ... cento e trinta e quatro, cento e trinta e cinco.

E a representação numérica seria assim

1, 2, 3, ... 134, 135

Até agora concordamos, certo?

Bem, agora vamos colocar os dígitos que não são representados por 0. Seria assim:

001, 002, 003, ..., 015, 016, ..., 099, 100, ..., 133, 134, 135

Isso é o que acontece com CHS :

0,0,1 - 0,0,2 - 0,0,3 ...

É significativo que as linhas nas planilhas do Excel ou os campos auto-numéricos 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 do lado de 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. Um algoritmo que usa o número do setor para fazer seu cálculo seria mais simples se o primeiro setor fosse 1.

    
por 11.04.2017 / 21:47