Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
18/03/1996
< EIDE e Fast ATA XIX: >
< CHS Padrão e Estendido >

Antes de seguir adiante, abordemos uma questão crucial do ponto de vista prático: como saber se um BIOS é Enhanced? Infelizmente não há maneira fácil. Mas há boas indicações. Por exemplo: BIOS recentes, datados deste ano ou do último trimestre de 95 (a data aparece na tela durante o boot) muito provavelmente são enhanced. Por outro lado, BIOS anteriores a 1994 definitivamente não são. Independentemente da data, se nas telas do Setup referentes aos parâmetros de disco rígido aparece alguma coisa semelhante a "LBA" (de Logical Block Adressing, que discutiremos adiante), "ECHS" (de "Enhanced" ou "Extended" CHS) ou até mesmo uma indicação vaga, como "Large", o BIOS é Enhanced. Finalmente, um dado mais preciso porém não infalível: BIOS AMI mais recentes que 25/07/94, BIOS Phoenix a partir da versão 4.03 e BIOS MR BIOS de versões 1.40 e posteriores provavelmente são Enhanced. Mas para ter certeza mesmo, a Western Digital desenvolveu um utilitário que investiga o sistema em busca de uma EDTP (havendo EDTP, definitivamente o BIOS é Enhanced,). Chama-se Chkbios.Com e pode ser encontrado (e "baixado" via FTP anônimo) no site da Western Digital (ftp://ftp.wdc.com). Agora, ao trabalho.

Os BIOS Enhanced em geral suportam três tipos de tradução. O primeiro, denominado CHS padrão (que em geral corresponde às opções "standard CHS" ou "Normal" do setup), não utiliza nenhuma tradução adicional além da interna, normalmente usada pela interface ATA para permitir a gravação em multizonas. Ou seja: selecionada esta opção, o BIOS se comporta como se fosse "normal" (não enhanced). Ela serve apenas para os casos, hoje cada vez mais raros, em que mesmo dispondo de um BIOS Enhanced, não são usados discos IDE com capacidade superior a 504 Mb. Ou seja, situações em que qualquer passo adicional de tradução é desnecessário. Uma opção útil, sem dúvida. Mas se estiver usando discos com capacidade superior a 504Mb, cuidado com ela! Porque quando é selecionada, o BIOS "esquece" que é enhanced e não enxerga nem um mísero setor além dos primeiros 504 Mb. Portanto, fique atento. Se seu BIOS é Enhanced e apesar disto não consegue se entender com discos de grande capacidade, verifique se esta opção não está selecionada no setup.

O segundo tipo de tradução, denominado "CHS estendido" (que em geral corresponde às opções "extended CHS" ou "Large" do setup), inclui um passo adicional de tradução executada pelo próprio BIOS. A coisa funciona assim: quando se usa esta opção, além da geometria física, há ainda duas geometrias adicionais convivendo harmoniosamente na mesma máquina: uma "lógica", outra "traduzida". Evidentemente, o número total de setores de todas elas é idêntico, já que necessariamente devem corresponder á mesma capacidade. A "física", cujo número de setores nas trilhas internas e externas é diferente, é usada exclusivamente pela interface ATA para se comunicar diretamente com o disco. A "lógica" é a geometria fornecida ao setup (ao se entrar com as características do drive) e usada pelo BIOS para se comunicar com a interface ATA. E a "traduzida" é usada pelo BIOS para se comunicar com o resto do sistema. Quando o BIOS recebe uma solicitação de acesso a disco via Int 13h, "mostra" ao solicitante a geometria traduzida, reconhecida pela Int 13 porque obedece às restrições do BIOS "normal" (1024 cilindros, 63 setores por trilha e 256 cabeças). Mas quando este mesmo BIOS repassa a solicitação para a interface ATA, traduz os dados referentes a cilindro, face e setor para a geometria lógica e fornece números que aderem às restrições do velho padrão ATA (65536 cilindros, 255 setores por trilha e 16 cabeças). Desta forma, ambas as restrições são obedecidas, mas cada uma a seu tempo, jamais simultaneamente. O que eleva a capacidade máxima teórica dos drives EIDE para o limite correspondente à menor das duas capacidades, ou seja, a fixada pelo BIOS: 1024 cilindros, 63 setores por trilha e 256 cabeças. O que, usando os 512 bytes por setor, corresponde a pouco menos de oito Gigabytes (seriam exatos 8 Gb caso o número máximo de setores por trilha fosse 64 e não 63). Note que enquanto for obrigatório manter compatibilidade com a velha Int 13h do vetusto DOS, este último limite é intransponível: seja qual for o artifício usado, discos IDE que aceitem as solicitações de acesso via Int 13h jamais poderão armazenar mais que oito Gb.

Em geral a tradução externa, executada pelo BIOS, é feita de uma forma mais que singela: mantem-se-se o número de setores por trilha nas duas geometrias, mas multiplica-se o número de cilindros e divide-se o número de cabeças pelo mesmo múltiplo de dois. Parece complicado? Então vamos esclarecer.

Tomemos como exemplo os discos de "540 Mb". Ultrapassam ligeiramente o máximo admitido pelo padrão ATA (sua capacidade real é de 516 Mb, mas como isto corresponde a pouco mais que 540 milhões de bytes, são conhecidos por discos de "540 Mb"). Excedem somente um pouquinho, mas o suficiente para obrigar um passo adicional de tradução. Eu tive um destes, o Quantum Pro LPS 540. Sua geometria lógica, fornecida ao setup, corresponde a 59 setores por trilha, 16 cabeças e 1120 cilindros. Que adere ao padrão ATA mas não é aceita pela Int 13h por exceder o limite de 1024 cilindros. Por isto, sempre que atende uma solicitação da Int 13h, o BIOS "traduz" os dados, multiplicando o número da cabeça por dois e dividindo o do cilindro também por dois. Assim, a geometria traduzida corresponde aos mesmos 59 setores por trilha, mas a um máximo de 560 cilindros e 32 cabeças. Que viola o padrão ATA pelo excessivo número de cabeças mas obedece aos limites do BIOS "normal". Como neste momento o BIOS não está se entendendo com a interface ATA, mas com a Int 13h, a coisa funciona. E assim, bancando o intérprete, falando uma lingua ao conversar com a interface ATA e outra ao se entender com a Int 13h, o BIOS enhanced consegue contornar engenhosamente a limitação de 504 Mb do padrão ATA.

Semana que vem veremos outra forma, ainda mais engenhosa: o LBA.

B. Piropo