Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
29/07/1991

< Minhas Memórias > < Parte II: Os Endereços >


Como vimos há uma semana, um técnico de manutenção de micros e um programador encaram o termo "memória" de forma bastante diversa: para o técnico, "memória" é um componente físico, uma peça do circuito de nossos micros. Para o programador, é um conjunto organizado de endereços, um componente lógico do sistema. Já discutimos a memória como é vista pelo técnico. Hoje, vamos encarar a coisa do ponto de vista do programador.

Pois acontece que, sob o aspecto de sua organização lógica, em um PC nem todo bloco de endereços de memória é igual. E nem todos podem ser usados pelos programas. Porquê as diferenças?

Bem, parte delas se deve à CPU escolhida para o primeiro PC, o chip 8088 da Intel. E parte a decisões arbitrárias tomadas pela Microsoft, que desenvolveu o DOS especialmente para aquele PC.

Vocês sabem que o 8088 tem registros de endereços de 16 bits e pode, através de uma engenhosa combinação de registros, "enxergar" um campo contínuo de endereçamento de 1 Mb, pois não? Sabem sim, pois isso já foi repetido aqui mesmo até quase a exaustão. Então porquê repeti-lo ainda mais uma vez? Porquê essa é a causa da mais grave limitação do DOS, um mal que milhões de usuários têm lastimado, milhares de programadores têm amaldiçoado e centenas de softhouses têm tentado contornar nesses últimos dez anos: o exíguo limite de memória que o DOS dedica a programas.

Pois, já que a CPU da máquina para qual ele estava sendo desenvolvido somente enxergava um campo de 1Mb, era desnecessário que o DOS pudesse acessar mais que isso. Faz sentido, pois não? Ao menos, nos tempos em que 64K era o máximo de memória da maioria das máquinas, fazia. Então, já que o campo de endereços estava fixado, restava apenas distribuir esse mais de bilhão de bytes, destinando um punhado deles para cada tarefa do sistema.

Mas antes, vamos lembrar um ponto importante sobre acesso à memória dos PC: o campo de endereços que pode ser contido em um registro de 16 bits tem uma extensão de 64Kbytes. Por isso sua memória é composta por "segmentos" de 64K cada um. E um Mb, como é fácil de se perceber, contém 16 desses segmentos.

Bem, então vamos ver como eles foram distribuídos. E começar pelos situados nos endereços mais altos. Dois deles, a partir do endereço 896K, foram destinados à ROM BIOS. Lembra? O código para gerenciamento de dispositivos de entrada e saída que vem gravado em um chip ROM de sua máquina. Achou muito? E, de fato, é. Um possante 386 usa apenas um desses dois segmentos. Um XT nem chega a meio. Então para que separar dois segmentos inteiros para este fim e usar tão pouco? Bem, há duas razões: a primeira é que os PC da IBM trazem também gravado em ROM, e ocupando esse trecho, todo um interpretador BASIC. E a segunda foi meramente previsão para o futuro, imaginando que mais serviços seriam incorporados à ROM BIOS. E lá se foram dois segmentos.

Os dois que ficam logo abaixo, entre os endereços 768K e 896K, foram destinados a tudo o mais que não fosse programas, vídeo ou ROM BIOS. Desses 128K, a quarta parte, começando no endereço 768K, foi alocada para o controle de discos. O restante raramente é usado. E mais dois segmentos se foram.

Logo abaixo, dois segmentos inteiros se destinam a armazenar informações exibidas no vídeo. Esse ponto é interessante, e merece uma abordagem mais detalhada, que será feita adiante. Por enquanto vamos chamar aos dois segmentos situados entre os endereços 640K e 768K de memória de vídeo e lembrar que eles foram destinados a esse fim. E lá se foram mais dois segmentos inalcançáveis pelos nossos programas.

Como vocês vêem, os criadores do DOS foram extremamente generosos ao distribuir memória para uso do sistema: seis segmentos ao todo, dos quais mesmo hoje menos da metade é efetivamente usada. Porquê tanta generosidade? Porquê mesmo assim ainda sobravam dez segmentos. Como naquela época as máquinas mais soberbas tinham um décimo disso, pensou-se que dava e sobrava. Que ingenuidade...

Pois é. Os programas ficaram, então, com o que restou, os dez primeiros segmentos, dos endereços 0K a 640K. Ou quase. Na verdade os primeiros 1024 bytes são usados para armazenar endereços de rotinas importantes para o DOS, os chamados "vetores de interrupção". E uma parte dos restantes 639K é usada pelo próprio DOS, que também é um programa. E pelos diversos gerenciadores de dispositivos. Dependendo da versão do DOS e do número de penduricalhos a exigir drivers que você usa em sua máquina, quase 100K podem ser consumidos. Sobram, portanto, efetivamente, pouco mais de 540K. E os programas hoje em dia gastam isso em um piscar de olhos...

Bem, e aqui vou compartilhar com vocês um problema que, até entendê-lo, me deixava deveras encafifado: onde fica essa memória? Quero dizer, fisicamente: em que chips? Pois se um endereço de memória contém uma informação, é preciso que haja um dispositivo físico para armazená-la. Onde ficam? Bem, os dados e código dos primeiros 640K, os dez segmentos para uso dos programas, são armazenados nos chips de memória RAM que formam os bancos de memória da placa mãe. Esse é fácil. E o resto? A memória de vídeo também tem que ser RAM: ela é alterada a toda hora. Mas essa não fica na placa mãe: são chips RAM espetados na placa controladora de vídeo. E a ROM BIOS? Ah, esses são chips ROM que também ficam na placa mãe. Finalmente, a memória destinada ao código de controle de discos fica em um chip ROM engastado na placa controladora de discos. Assim como os demais programas gravados em ROM usados por dispositivos específicos: modems, scanners, faxes e mais o que for: chips de memória ROM em suas respectivas placas. Portanto, pode-se encontrar "memória" tanto nos bancos a ela destinados na placa mãe como em chips RAM e ROM espalhados pela placa mãe e pelas diversas placas controladoras espetadas nos slots. Como a cada um deles corresponde um trecho específico de endereços, o sistema jamais se confunde. Simples, não?

Pois é isso. E já acabou? Que nada. Isso foi só o princípio. Muito ainda há que falar sobre memória. Pontos importantes nem sequer afloraram. E vamos falar sobre todos eles. Com calma.

Como? Eu ainda não expliquei porquê perdi 64K de memória quando vendi meu XTzinho e mudei para o AT? Ah, é que para isso é preciso falar um pouco sobre memória de vídeo. O que faremos semana que vem. Afinal, vocês esperaram tantos meses para descobrir quem matou Odete Roitman que bem podem esperar só mais uma semanazinha para aclarar mais um mistério...

B. Piropo