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

< Minhas Memórias >
< Parte VI: Expandir e Estender>


Não creio que existam dois termos mais confundidos e mal compreendidos no jargão da informática que memória estendida e expandida. Hoje, vamos fazer um esforço para jogar alguma luz sobre esse tema aparentemente confuso. Começando pela estendida, já nossa velha conhecida, que nada mais é que a memória cujos endereços se estendem acima de 1Mb. Nada mais simples.

E a memória expandida? Bem, ela nasceu no momento em que alguns fabricantes de hardware e produtores de software se deram conta de que o velho DOS se recusava a morrer e dar lugar a um sistema operacional capaz de explorar melhor as potencialidades das novas CPU. E tiveram então que marchar no sentido oposto ao que esperavam: buscar soluções que otimizassem o DOS nesse novo ambiente.

Os primeiros a perceberem a mudança foram Lotus, Intel e Microsoft ainda em 85, a menos de um ano do lançamento do AT. E juntaram seus esforços e suas iniciais para desenvolver o padrão LIM 3.0 de especificação de memória expandida (Expanded Memory Specification, ou EMS) - onde o 3.0 não significava que havia versões anteriores, mas apenas indicava a versão do DOS com a qual era compatível. Pouco mais tarde AST Research, Ashton-Tate e Quadram lançavam seu padrão próprio, o EEMS (Enhanced EMS, ou EMS melhorado). E como até mesmo concorrentes ferozes podem perceber que a padronização beneficia a todos, acabaram por juntá-los em um padrão único, que denominaram EMS 4.0. Que vigora até hoje em dia.

Eu sei que o que você quer de fato saber é como a coisa funciona e não sua genealogia. Mas ocorre que cada uma dessas evoluções teve suas características próprias. E como podemos dar apenas uma idéia global do processo, é importante mencionar que houve versões distintas, o que explica pequenas diferenças entre elas. E tornar claro que a mais atual é a EMS 4.0, compatível com a anterior. Mas vamos ao que interessa, afinal.

Imagine-se um arqueólogo. Você está explorando as virgens entranhas de uma pirâmide recém descoberta. E se aventura por seus misteriosos labirintos vencendo o medo e as trevas armado apenas com sua coragem e uma lanterna. Subitamente o corredor se alarga, transformando-se em vasto salão. Ao fundo, uma parede imensa, coberta de hieróglifos, conta um pedaço jamais revelado da história daquele povo. Mas a parede é grande demais para ser abrangida de uma só vez pelo foco da lanterna, que só consegue iluminar um quadrado de um centésimo da área da parede. Como fazer para ler toda a história e deslindar o milenar segredo?

Ora, direis, elementar meu caro Piropo. Mistério maior talvez seja essa curiosa lanterna de foco quadrado que inventaste: basta dirigi-la para o canto superior esquerdo da parede, ler o que lá está, e deslocar o foco da lanterna um "quadrado" para a direita. E após cem deslocamentos, toda a parede terá sido examinada. Simples, não?

E o que tem isso a ver com a memória expandida? Tudo. Pois é exatamente assim - ou quase - que ela funciona. Imagine que você tenha alguma memória adicional em sua máquina, em uma placa encaixada em um dos slots de seu micro, a placa de memória expandida. Digamos que ali você tenha 2Mb distribuídos em 32 conjuntos, ou "bancos", de 64K. E, também engastado nessa placa, um chip ROM onde está gravado um programa, o gerenciador de memória expandida, ou Expanded Memory Manager (EMM).

Agora vejamos: o DOS somente consegue "enxergar" o que está gravado nesses bancos de memória se a eles forem atribuídos endereços. E, sendo irreparavelmente míope, só vê o que está abaixo de 1Mb. Mas na placa existem 2Mb. É preciso, portanto, "enganar" o DOS, espremer aqueles 2Mb e enfiá-los no campo de visão do DOS.

Então a coisa funciona assim: o programa gerenciador de memória expandida procura um "buraco" de 64K que esteja livre nos endereços abaixo de 1Mb. Note que ali não é preciso haver, de fato, memória instalada nos bancos da placa mãe: apenas endereços livres. Quando acha, reserva esse bloco, ou "janela", para si mesmo, e rapidamente o "aponta" para o primeiro banco de 64K da placa de memória expandida, atribuindo a seu conteúdo aqueles endereços, que o DOS consegue "ver". As informações necessárias estão em outro banco? Tudo bem: o programa gerenciador rapidamente comuta esse banco com o anterior. Essa "janela" (que, tecnicamente, se chama "frame"), funciona como o foco da sua lanterna. Através dela o DOS pode ler todo o conteúdo da parede, digo, da placa de memória expandida. Que é escrutinada usando a comutação de bancos ("bank switching"), sempre pegando as informações gravadas em um banco e as exibindo em endereços que DOS pode acessar.

Dito assim, o processo parece complicado e lento. Mas funciona. E abre horizontes quase irrestritos (na verdade, em função da padronização adotada, a memória expandida está limitada a 32Mb). E, desde sua implantação, a técnica evoluiu bastante. Hoje, já não é imprescindível uma placa especial de memória expandida com seus bancos de memória e o programa gerenciador gravado em ROM: foram desenvolvidos drivers bastante versáteis capazes de transformar em memória expandida a memória estendida existente na placa mãe. Enquanto essa última facilidade somente é possível em um AT, as placas de memória expandida podem ser usadas mesmo em um XT (se você está pensando nisso, primeiro verifique se vale a pena: atualmente pode ser mais barato trocar o XT por um AT).

Pois é isso. Está claro que o processo foi descrito de forma muito simplificada para facilitar a compreensão. Na verdade, sendo o gerenciamento da memória o calcanhar de Aquiles do DOS e seu maior fator limitante, muito se tem feito para contornar suas restrições. E, eventualmente, as soluções acabam por introduzir complexidades imprevisíveis. Mas o importante é descobrir, na prática, que recursos estão disponíveis para aumentar as potencialidades de nossas máquinas.

E para isso ainda é preciso discutir alguns pontos interessantes.

E destrinchar duas regiões específicas da memória: os endereços que o sistema operacional desperdiça nos seis segmentos que reservou egoisticamente apenas para si mesmo, e uma área muito particular, o primeiro segmento acima de 1Mb. Para os quais se estão descobrindo utilidades novas e surpreendentes. Mas isso é papo para a próxima semana.

B. Piropo