Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
22/01/1996
< EIDE e Fast ATA XI: >
< O Limite de 504 Mb >

Semana passada vimos que a capacidade máxima de um drive que obedece ao padrão ATA é de cerca de 125,5 Gb. Então porque tanto alarido sobre o tal limite de de 504 Mb dos drives IDE?

Bem, é que discutimos apenas a forma pela qual o BIOS e a interface se entendem para executar um acesso ao disco. E o limite de 125,5 Gb deve-se às características dos registradores do microprocessador da controladora do drive onde são armazenados os parâmetros do comando a ser executado. Mas o BIOS nada mais faz que atender à uma solicitação de acesso a disco emitida pelo sistema operacional. E como o sistema operacional solicita ao BIOS que execute um acesso a disco?

Do ponto de vista técnico, o BIOS é uma parte do próprio sistema operacional. Mais especificamente, é o conjunto de rotinas destinadas a acessar diretamente o hardware (não se esqueça que esta concepção data da época da interface ST-506/412, quando o BIOS acessava efetivamente o disco rígido sem a intermediação da interface ATA). E o DOS, o sistema operacional original do PC, baseia-se no conceito de interrupções: para solicitar um "serviço", primeiro preenche-se os registradores da CPU com os parâmetros necessários à execução da tarefa e em seguida aciona-se uma interrupção, ou seja, avisa-se à CPU que deve interromper o que está fazendo para atender à solicitação. As interrupções são numeradas, cada uma englobando uma série de "serviços" correlatos. A interrupção que agrupa os "serviços" de acesso a disco (coisas como ler ou gravar dados em um setor do disco, formatar trilhas, informar características do drive, etc.) é a interrupção de número 19. Como os programadores em geral se referem às interrupções usando seu número expresso no sistema numérico hexadecimal (de base 16), ela é mais conhecida como Int 13h.

A partir do 386, as CPU dos micros da linha PC passaram a ter registradores de 32 bits. Mas na CPU do primeiro PC cabiam apenas 16 bits. Assim como na do AT. Por isso qualquer sistema operacional que pretenda manter a chamada compatibilidade retroativa (backward compatibility) com toda a linha PC deve limitar-se a usar apenas 16 bits dos registradores da CPU. Mesmo quando roda em um Pentium de 64 bits.

Pois bem: praticamente todos os serviços da Int 13h usam apenas dois registradores de 16 bits da CPU para armazenar (ou, no jargão dos programadores, "passar") os parâmetros de suas rotinas. E sempre da mesma forma. Uma forma, para dizer o mínimo, bastante peculiar: um registrador é dividido irmamente pelo número da cabeça e pelo número do drive, oito bits para cada um (coisa muito estranha, já que o resto das rotinas somente oferece suporte para dois discos rígidos e em oito bits cabem números que vão até 255), enquanto no outro espremem-se o número da trilha (ou cilindro) e o número do setor. E espremem-se de uma forma desigual: dez bits para o número do cilindro, seis para o do setor. Ou seja: também o BIOS limita a capacidade dos drives que suporta. E como no padrão ATA, o limite é determinado pela forma como as rotinas da Int 13h usam registradores. Que, no caso do BIOS, são os da CPU.

Que limite será esse? Fácil: dez bits para cilindros significa um máximo de 1024 cilindros (ou trilhas por face). Oito bits para cabeças, um máximo de 256 cabeças (ou faces por disco). E finalmente seis bits para setores deveriam significar um máximo de 64 setores por trilha, mas como a numeração dos setores inexplicavelmente começa em um e não em zero, significam de fato 63 setores por trilha. Pronto: para obter a capacidade máxima teórica de um drive suportado pelo BIOS multiplique tudo isso para ter o número de setores e depois multiplique o resultado pelos 512 bytes de cada setor, chegando a 8064 Mb, quase oito Gb (1 Gb é igual a 1024 Mb, pois não?).

Oito gigabytes? Mas então cadê o limite de 504Mb?

Pare um pouco e pense no processo como um todo, e não apenas em suas etapas. Imagine que o sistema operacional quer ler um certo setor do disco rígido. Primeiro ele preenche os registradores da CPU com os parâmetros referentes ao serviço solicitado: número do cilindro, da cabeça e do setor. Depois, aciona o BIOS via Int 13h. Que, por sua vez, aciona a interface - que recebe os mesmos parâmetros da Int 13h e os escreve nos registradores do microprocessador da controladora. Percebeu onde está o limite?

Isso mesmo: como os parâmetros transitam dos registradores da CPU para os do microprocessador da placa controladora, precisam caber tanto nos primeiros quanto nos últimos. Ou seja: cada parâmetro deve obedecer tanto ao limite imposto pelo BIOS quanto ao limite imposto pelo padrão ATA. E para obedecer a ambos ele terá forçosamente que obedecer ao mais restritivo.

Agora examinemos cada parâmetro. Conforme o padrão ATA, que armazena seu número em dois registradores de oito bits, os cilindros, não podem exceder a 65536. Já segundo o BIOS, que guarda o número de cilindros em apenas dez bits, não podem passar de 1024. Para obedecer a ambas restrições, o limite deve ser 1024.

Raciocínio idêntico aplicado ao número de cabeças, 256 segundo o BIOS que armazena seu número em um registrador de oito bits, 16 segundo o padrão ATA que emprega apenas quatro bits para este fim, leva a um máximo de 16 cabeças.

Já os setores por trilha, cuja numeração começa sempre em um, podem ser 255 de acordo com o padrão ATA, que armazena seu número em um registrador de oito bits. Mas segundo o BIOS, que usa apenas seis bits de parte de um registrador para o número de setores, não podem passar de 63. Vale, portanto, o menor: 63.

Agora sim: 63 setores por cilindro, 1024 cilindros por face, 16 faces por disco. Multiplique tudo isto para chegar ao total de setores e multiplique novamente o resultado por 512 bytes por setor para chegar ao limite efetivo. O resultado final é 528.482.304 bytes. Pouco mais de 528 milhões de bytes. O que faz muita gente, bem ou mal intencionadamente, dizer que o limite é de 528 Mb. Mas que, para quem sabe que megabytes são múltiplos de 1024 e não de 1000, são mesmo 504 Mb.

Pronto: taí o limite de 504 Mb. Mais adiante veremos como a indústria conseguiu contorná-lo.

B. Piropo