quinta-feira, 5 de março de 2015

As barreiras de 504 MB e 8 GB

Um grande problema que enfrentamos ao tentar instalar um disco rígido moderno numa placa mãe mais antiga, são as limitações quanto à capacidade do disco. Na época dos 486s o limite era quanto a discos rígidos maiores que 504 MB (528 MB na notação decimal utilizada pelos fabricantes) e, nas placas mãe produzidas até pouco tempo atrás, existe uma nova limitação, agora para discos rígidos maiores que 7.88 GB (8.4 GB pela notação decimal).

Estas limitações surgiram devido à falta de visão das pessoas que desenvolveram o padrão IDE e as instruções INT 13h do BIOS, as responsáveis pelo acesso à disco, desenvolvidas para serem usadas pelo PC AT, mas que acabaram sendo perpetuadas até os dias de hoje. Naquela época, discos rígidos com mais de 504 MB pareciam uma realidade muito distante, e o homem que viria a tornar-se o presidente da Microsoft e o empresário mais rido do mundo, acreditava piamente que ninguém um dia viria a precisar de mais de 640 KB de memória RAM.

A divisão do disco em clusters, usando um sistema de arquivos qualquer, visa o suporte por parte do sistema operativo. Num nível mais baixo, porém, é preciso aceder individualmente aos sectores do disco rígido e, para isso, é preciso que cada sector tenha um endereço único.

O padrão IDE reserva 16 bits para o endereçamento dos cilindros (65,536 combinações), 4 bits para o endereçamento das cabeças de leitura (16 combinações), 8 bits para o sector (256 combinações), o que permite endereçar 256 milhões de sectores. Como cada sector tem sempre 512 bytes, temos suporte a discos rígidos de até 128 GB.

Porém, o BIOS possui outras limitações para o acesso a discos (serviço chamado de INT 13h), reservando 10 bits para o endereçamento de cilindros (1,024 combinações), 8 bits para as cabeças de leitura (256) e 6 bits para o sector (63 combinações pois o endereço 0 é reservado), o que permite endereçar 1.61 milhões de sectores e consequentemente discos de até 7.88 GB.

Como é preciso usar tanto a interface IDE quanto as instruções INT 13h do BIOS, acabamos por juntar suas limitações. A interface IDE reserva 16 bits para o endereçamento dos cilindros, porém o BIOS só utiliza 10 destes bits. O BIOS por sua vez reserva 8 bits para o endereçamento das cabeças de leitura, porém só pode utilizar 4 por limitações da Interface. A capacidade de endereçamento então acaba sendo nivelada por baixo, combinando as limitações de ambos os padrões, permitindo endereçar discos de no máximo 504 MB, limite para a maioria dos computadores 486 ou inferiores. Este método de endereçamento é chamado de Normal ou CHS (cilindro, cabeça de leitura e sector). Veja a representação na tabela:


Esta configuração é apenas lógica, o modo como o BIOS enxerga o disco rígido, não tem nada a ver com a geometria física do disco rígido, que diz respeito apenas à placa lógica do disco rígido. Um disco de 504 MB, por exemplo, jamais teria 16 cabeças de leitura, tão pouco teria apenas 63 sectores por cilindro. A placa lógica neste caso encarrega-se de converter os endereços lógicos do BIOS para os endereços físicos reais.

Na época do 286, onde eram usados discos rígidos de no máximo 20 ou 40 MB, este limite não incomodava ninguém; mas a partir do momento em que passamos a ter discos rígidos de 800 MB, 1 GB, 1.2 GB, etc. alguma coisa precisava ser feita.

A primeira solução foi o Extended CHS ou modo Large. Este padrão continua com as mesmas limitações da interface IDE e do INT 13, mas usa um pequeno truque para burlar suas limitações.

O BIOS possui mais endereços para as cabeças de leitura (256 contra 16), porém, a interface IDE possui mais endereços para os cilindros (65,536 contra 1024). Usando o modo Large passamos a utilizar um tradutor, um pequeno programa integrado ao BIOS encarregado de converter endereços. A conversão é feita usando um simples factor multiplicativo: a interface IDE permite mais endereços para o cilindro, mas ao mesmo tempo permite menos endereços para a cabeça de leitura, podemos então aplicar a tradução de endereços dividindo o número de endereços do cilindro e multiplicando os endereços para cabeças de leitura pelo mesmo número. Podem ser usados os números 2, 4, 8 e 16.

Se por exemplo, instalássemos um drive com uma geometria lógica de 3,068 cilindros, 16 cabeças e 63 sectores, usando o factor 4 passaríamos a ter 3,086 / 4 = 767 cilindros, 16 x 4 = 64 cabeças e 63 sectores, veja que agora temos endereços dentro dos limites do BIOS e por isso podemos utilizar os 1.5 GB do disco sem problemas:


O modo Large nunca foi muito utilizado, pois logo depois surgiu uma solução bem melhor para o problema, conhecida como modo LBA, contração de Logical Block Addressing ou endereçamento lógico de blocos.

A ideia é a seguinte: o padrão IDE reserva 16 bits para o endereçamento do cilindro, 4 bits para o endereçamento da cabeça de leitura e mais 8 bits para o sector, totalizando 28 bits de endereçamento. O modo LBA abandona o endereçamento CHS, com endereços independentes para cilindros, cabeças e sectores, passando a adoptar um endereço único. Os sectores passam então a receber endereços sequenciais, 0, 1, 2, 3, 4 etc. assim como os clusters no sistema FAT. Os 28 bits de endereçamento permitem então 228 milhões de endereços, o que corresponde a discos rígidos de até 137 GB.

Claro que para usar o LBA é preciso que o disco rígido suporte este modo de endereçamento.

Felizmente, praticamente todos os discos rígidos acima de 504 MB e todos os discos rígidos actuais suportam o LBA.

Na verdade, o modo Large só deve ser usado nos raríssimos casos de discos rígidos com mais de 504 MB, que por ventura não suportem o LBA.

Veja que para endereçar os 137 GB permitidos pelo LBA, é preciso abandonar o uso das instruções INT 13h, o que significa desenvolver novas instruções de acesso ao disco para o BIOS.

Acontece que as placas mãe fabricadas há até pouco tempo atrás, apesar de incluírem suporte ao LBA, continuam utilizando as velhas instruções INT 13h para aceder ao disco rígido. Como no caso anterior, temos então que nivelar por baixo, ficando condicionados à limitação de 7.88 GB (8.4 GB pela notação decimal) imposta pelas velhas instruções. Esta lista inclui todas as placas Socket 7 antigas, para Pentium e MMX, as placas para 486 que eventualmente suportem LBA e, infelizmente uma grande parte das placas slot 1 e super 7 modernas. O mesmo pesadelo da época dos 504 MB da época dos 486s voltou em sua versão contemporânea, na forma do novo limite de 7.88 GB.

Como o problema é apenas das instruções do BIOS, é possível corrigi-lo através de um upgrade de BIOS, fazendo com que a placa mãe passe a suportar discos rígidos de até 137 GB. Veja que neste caso, você depende unicamente do suporte do fabricante. Se existe um upgrade disponível então é só utilizá-lo, caso contrário, não existe o que fazer a não ser trocar a placa mãe. Novamente recomendo o Win’s BIOS Page, http://www.ping.be/bios como ponto de partida para localizar os arquivos de actualização.

in Manual de Hardware Completo
de Carlos E Marimoto

Sem comentários: