Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
15/01/1996
< EIDE e Fast ATA X: >
< O Limite da Interface >

Como vimos semana passada, os registradores do microprocessador situado na interface dos drives ATA funcionam como uma espécie de caixa postal no diálogo entre BIOS e interface. Quando o BIOS deseja comunicar à interface o comando a ser executado e os setores, trilhas e faces a serem afetados por ele, escreve os dados nos registradores correspondentes para que a controladora da interface os leia. Da mesma forma, quando a controladora deseja comunicar ao BIOS que o comando foi executado com sucesso, ou que houve um erro, ou ainda prestar ao BIOS informações sobre o estado e as características do drive, escreve os códigos correspondentes nos registradores e espera que o BIOS os leia.

O padrão ATA usa 14 registradores. Que são de dois tipos: de comando e de controle. Estes últimos são quatro e se referem a características técnicas do hardware que não nos interessam e portanto os deixaremos de lado. Sobram, portanto, dez registradores de comando. Que na verdade são oito. Estranho? Que nada. Você já conhece alguns deles, como o Command Register, que guarda o código do comando a ser executado, e o Status Register, usado para informar se o comando foi ou não executado com sucesso. Raciocine: estes dois jamais serão usados ao mesmo tempo, já que o Command Register só é lido (pela interface) imediatamente antes de um comando ser executado e o Status Register só é lido (pelo BIOS) imediatamente depois. Então para que desperdiçar uma posição de memória? O sistema usa o mesmo registrador físico para cumprir estas duas funções lógicas. Da mesma forma nosso já conhecido Error Register só é lido pelo BIOS depois de um comando, enquanto o Features Register só é lido (pela interface) antes da execução do comando Set Features (que informa à interface se determinadas funções, como cache interno, devem ou não ser habilitadas). Portanto também eles podem compartilhar o mesmo registrador físico. Logo, nossos dez registradores de comando se reduzem a oito posições de memória. Todas elas de oito bits, com uma única exceção. Anote, porque isto é de importância fundamental.

Ja mencionamos quatro registradores lógicos e suas funções: Command, Features, Error e Status. Vejamos rapidamente quais são os seis restantes.

O Data Register serve de pouso para os dados: na leitura, a interface escreve nele os bytes lidos do disco para que daí sejam transferidos para a memória. E na gravação, o BIOS escreve nele os bytes a serem gravados no disco. Além disso, só tem função quando o drive é formatado. Este registro é a exceção mencionada lá em cima: é o único de 16 bits (para acelerar a transferência movendo dados de dois em dois bytes).

O Sector Count Register tem por função básica armazenar o número de setores a serem lidos ou gravados em uma operação de leitura e gravação de múltiplos setores.

Restam quatros setores. Cuja importãncia é fundamental já que determinam para todo o sempre a capacidade máxima dos drives que obedecem ao padrão ATA. São eles o Sector Number Register, que armazena o número do setor, o Drive/Head Register, que armazena ao mesmo tempo o número da cabeça e o do drive (já veremos como isso é possível), e dois registradores empregados em conjunto para armazenar o número do cilindro: Cylinder High e Cylinder Low Registers. Vejamos como eles são usados.

O Sector Number Register é o mais singelo: armazena o número do setor a ser acessado. Ora, como o maior número que cabe em uma posição de memória de oito bits é 255 e a numeração dos setores começa em 1 (não existe "setor zero"), o número máximo de setores que uma trilha (ou cilindro) de um drive ATA pode conter é 255. Mais que isso não "cabe" no registrador e portanto não pode ser usado por nenhum comando (ou seja, seria impossível ler ou gravar no "setor 256", por exemplo).

Os dois registradores Cylinder High e Cylinder Low funcionam juntos como uma única posição de memória de 16 bits, armazenando as duas metades (parte "alta" e parte "baixa") do número do cilindro a ser acessado. Seguindo o mesmo raciocínio, como o maior número que cabe em uma posição de memória de 16 bits é 65.535, o número máximo de cilindros (ou trilhas por face) que um disco rígido ATA pode conter é de 65.536 (sim, pois como vocês bem sabem, existe a trilha zero. Felizmente).

Finalmente, chegamos ao Drive/Head Register. Também uma posição de memória de oito bits. Onde os idealizadores do padrão ATA decidiram armazenar as informações bit a bit de uma forma muito estranha e, a meu ver, pouco inteligente. O sexto e o oitavo bits foram simplesmente ignorados: não servem para nada e devem conter o dígito "um". O sétimo bit, se contém "zero" informa à interface que está sendo usado o método convencional de endereçamento através do número do cilindro, cabeça e setor (CHS) e se contém "um", que está sendo usado o método alternativo denominado LBA (Logical Block Adressing) que examinaremos adiante. O quinto bit informa que o comando afetará o drive master se contiver "zero" ou o drive slave se contiver "um".

Sobram, portanto, apenas os quatro primeiros bits para armazenar o número da cabeça (ou de faces) do drive. Como o maior número que pode ser armazenado em quatro bits é 15, o número máximo de faces que um drive ATA pode conter é 16 (sim, a face zero existe; aliás, a inexplicável exceção é justamente a numeração dos setores, que por artes da bruxa da informática começa estupidamente do um e não do zero).

Pronto. Agora, já temos todas as informações necessárias para calcular o limite máximo teórico da capacidade de um disco que obedece ao padrão ATA. Pois como sabemos, os setores contêm sempre os mesmos 512 bytes. E sabemos ainda que o número máximo de setores por trilha é 255, de trilhas por face é 65536 e de faces por disco é 16. Basta então multiplicar tudo isto para determinar que a máxima capacidade admitida pelo padrão ATA é de cerca de 125,5 Gb (não esquecendo que 1 Gb contém 1024 Mb que por sua vez contém 1024 K que correspondem a 1024 bytes cada).

Então, conforme os limites estabelecidos por seus idealizadores, a capacidade máxima de um disco rígido ATA é de 125,5 Gb. Portanto, mais de 130 mil megabytes.

Como é que é? Então onde está o maldito limite de 504Mb?

Ah, meu amigo, se a informática fosse simples assim, onde estaria a graça?

B. Piropo