Home » Artigos arquivados » 1997 – Gerenciamento de memória no MS-DOS

1997 – Gerenciamento de memória no MS-DOS

Autor: Laércio Vasconcelos
Dezembro/1997

Muitos softwares administrativos, financeiros e comerciais foram escritos na linguagem CLIPPER e operam em ambiente MS-DOS, mesmo em computadores com Windows. Para que esses programas funcionem é preciso fazer configurações relativas ao gerenciamento de memória, como mostramos nesse artigo.

Ainda não estamos livres do MS-DOS

Se você já é usuário de micros há muitos anos, provavelmente sabe utilizar bem os comandos do MS-DOS. Talvez você se sinta até um pouco triste com a extinção do MS-DOS decretada pelo Windows 95. Por outro lado, se você usa PCs há pouco tempo, é possível que conheça muito mais o Windows 3.1 e o Windows 95 que o próprio MS-DOS. Teoricamente o Windows 95 veio para tornar o uso do PC mais fácil, sem que o usuário precise memorizar e digitar comandos. Imagine a simples operação de cópia de um arquivo de uma pasta para outra. É muito mais fácil ver um arquivo de uma pasta representado na tela por uma pequena figura (ícone) e arrastá-lo para outra pasta, ao invés de usar comandos do MS-DOS como COPY C:\RELAT\OUT96 D:\BACKUP.

Muitos usuários ainda precisarão usar o MS-DOS por muito tempo. Este é por exemplo o caso de usuários de computadores com configurações modestas que não podem executar o Windows 95, como os velhos micros XT e 286. PCs baseados no microprocessador 386 podem executar o Windows 95, mas com limitações em termos de velocidade. Estes praticamente não têm escolha, e forçosamente estarão utilizando o MS-DOS. Existem ainda aqueles usuários que, mesmo com micros mais potentes, ainda são obrigados a usar a dupla MS-DOS / Windows 3.1. São por exemplo, usuários de micros de empresas que já possuem diversos sistemas implantados e ainda não fizeram um esforço para migrar para o Windows 95. Todos esses usuários ainda estão envolvidos com o MS-DOS, mas a princípio não têm razão alguma para estar lendo este livro.

Neste capítulo, queremos nos dirigir a usuários de micros com o Windows 95, mas que ainda precisam usar programas do MS-DOS. Podemos dividir esses usuários em duas categorias:

Usuários de jogos
Usuários de aplicativos antigos feitos para o MS-DOS

Realmente, a maioria dos jogos, mesmo os mais sofisticados e mais modernos, são feitos para serem executados sob o MS-DOS. A razão disso é que no ambiente MS-DOS, os jogos podem fazer acesso direto à memória de vídeo, sem ter que obedecer convenções do sistema operacional, e desta forma permitem animações muito mais rápidas, o que é indispensável para os jogos de ação. Com a implantação de novas tecnologias, como as placas SVGA tridimensionais e drivers de vídeo chamados Direct Draw (que permite que programas do Windows também façam acesso direto à memória de vídeo), teremos jogos de ação próprios para o Windows 95. A própria Microsoft está fazendo esforços no sentido de lançar jogos para o Windows 95 (como o MS Fury), além de dar suporte a produtoras de jogos para que façam o mesmo. Mesmo com todos esses esforços, mais de 90% dos jogos existentes ainda são executados em ambiente MS-DOS.

Para não dizer que o MS-DOS dentro do Windows 95 é usado apenas para jogos, devemos lembrar que muitas empresas desenvolveram (ou contrataram outras empresas para tal) sistemas para uso interno que são executados em ambiente MS-DOS. Tratam-se de programas específicos, feitos sob medida para a empresa. Não é possível encontrar programas semelhantes à venda, em versões para Windows 95, e por isso, as empresas precisam desenvolver (ou contratar os serviços para tal) essas novas versões. Devido ao custo de desenvolvimento e implantação desses programas, muitas empresas optam por continuar utilizando as versões antigas, principalmente quando funcionam bem.

Este capítulo destina-se ao fornecimento de informações que permitam usar, da forma mais eficiente possível, programas para MS-DOS a partir do Windows 95.

As três formas de obter o Prompt do MS-DOS

No Windows 95, o Prompt do MS-DOS pode ser obtido em três modalidades diferentes:

Prompt em conjunto com o Windows 95
Prompt em execução exclusiva
Prompt do modo de segurança

Provavelmente a primeira dessas três modalidades será adequada para você executar a maioria dos seus programas para MS-DOS. É ativado através do comando “Prompt do MS-DOS”, que pode ser obtido a partir do botão Iniciar da barra de tarefas, como vemos na figura 1.

Uma das vantagens em usar o Prompt do MS-DOS desta forma é que seu uso pode ser simultâneo com outros programas do Windows 95. Podemos, por exemplo, executá-lo em uma janela, como vemos na figura 2.

ART19-01

Figura 1 – Ativando o Prompt do MS-DOS no Windows 95.

Nesta modalidade, podemos até mesmo executar duas instâncias do Prompt do MS-DOS simultaneamente. É como se estivéssemos usando ao mesmo tempo, dois computadores baseados no MS-DOS. Para isto, basta usar novamente o comando Prompt do MS-DOS. Não importa se o Prompt do MS-DOS será executado uma ou mais vezes ao mesmo tempo, a sua “tela” pode ser apresentada de duas formas:

Em uma janela
Em tela cheia

A execução em uma janela permite usar um programa para MS-DOS ao mesmo tempo em que estamos visualizando outras janelas. Infelizmente, nem todos os programas para MS-DOS podem ser executados desta forma. Programas que operam em modo texto quase sempre podem ser executados em uma janela, mas os programas que usam modos gráficos em geral requerem o uso exclusivo da placa de vídeo, e neste caso, precisam operar em “tela cheia”. A tela do Windows 95 desaparece e é exibida a tela do programa para MS-DOS em questão. A placa de vídeo fica inteiramente à disposição deste programa. Em tela cheia todos os programas para MS-DOS funcionam, mas em uma janela, apenas os programas que operam em modo texto e alguns poucos programas que usam modos gráficos VGA, porém sem fazer acesso direto à memória de vídeo.

Podemos facilmente fazer com que uma janela do MS-DOS passe a ocupar a tela inteira, e vice-versa. Basta teclar ALT-ENTER. Podemos manter diversos programas para MS-DOS operando em tela cheia simultaneamente, mas nesse caso, obviamente apenas um deles poderá ser exibido de cada vez. Basta usar ALT-TAB para selecionar o programa desejado, e ALT-ENTER para que o programa selecionado ocupe a tela cheia. Depois que todos os aplicativos para MS-DOS estiverem programados para ocupar a tela inteira, basta teclar ALT-TAB para selecionar o aplicativo desejado.

ART19-02

Figura 2 – Execução do Prompt do MS-DOS em uma janela

O Windows 3.1 também permitia usar programas para MS-DOS desta forma, mas nem todos eles funcionavam, principalmente os jogos. Você não deve ter conseguido jogar DOOM 2 a partir do Prompt do MS-DOS no Windows 3.1, mas isto é permitido no Windows 95. Enquanto a maioria dos jogos para MS-DOS não podiam ser executados sob o Windows 3.1, mesmo em tela cheia, a maioria deles podem ser executados no Windows 95, apesar de quase todos precisarem operar em tela cheia. A figura 3 mostra dois casos raros de programas (na verdade são jogos) que operam em modo gráfico mas podem ser exibidos em janelas do Windows 95: Prince of Persia e SkyRoads. Esses programas têm esta característica porque em nenhum instante fazem acesso direto à placa de vídeo a nível de hardware. Todos os comandos gráficos são solicitados ao BIOS. O Windows 95, por sua vez, intercepta as chamadas ao BIOS e converte os pixels, modos gráficos e cores em pixels da sua interface gráfica.

Não importa se um determinado programa para MS-DOS não funciona em uma janela. Basta executá-lo em tela cheia. Aliás, quando tentamos usar um programa como este a partir de uma janela, o próprio Windows 95 avisa que o programa não pode operar em uma janela e faz a passagem para o modo de tela cheia.

Quando o Prompt do MS-DOS é executado a partir do ambiente gráfico do Windows 95, seja em uma janela, seja em tela cheia, ele não está sozinho na memória. Todos os outros programas para Windows 95 que estiverem em execução, inclusive o próprio Windows 95, estarão ocupando espaço na memória e tempo do microprocessador (mesmo que seja uma porcentagem muito pequena deste tempo).

ART19-03

Figura 3 – Programas de MS-DOS que podem ser exibidos em janelas do Windows 95.

Existe uma segunda forma de executar o Prompt do MS-DOS, na qual todos os recursos do computador ficam disponíveis para o aplicativo do MS-DOS em uso. Nem o Windows 95, nem seus programas, estarão ocupando parte da memória RAM e nem tempo do microprocessador. Este é o chamado “Modo MS-DOS”. O computador comporta-se exatamente da mesma forma como se comportava quando executávamos um boot com o velho MS-DOS versão 6.xx (e anteriores).

Uma das formas de ativar o modo MS-DOS é através do comando Desligar, obtido a partir do botão Iniciar da barra de tarefas. Ao ser usado o comando Desligar, é apresentado o quadro de desligamento, visto na figura 4. Neste quadro, selecionamos a opção “Reiniciar o computador em modo MS-DOS”.

A partir daí, o uso do computador será totalmente voltado para o ambiente MS-DOS. Não será possível, por exemplo, usar comandos como ALT ENTER ou ALT TAB, como fazemos no uso do Prompt do MS-DOS dentro do Windows 95. Se quisermos voltar ao Windows 95, basta teclar EXIT.

ART19-04

Figura 4 – Quadro de desligamento.

Podemos ainda ativar o modo MS-DOS a partir do boot. Quando for apresentada, durante o boot, a mensagem “Iniciando o Windows 95”, pressionamos a tecla F8, e será apresentado um menu com várias opções de modalidades de boot, como vemos na figura 5. Escolhemos então a opção “Somente Prompt”.

Menu de Inicialização do Windows 95 da Microsoft
================================================
 
1. Normal
2. Conectado (\BOOTLOG.TXT)
3. Modo de segurança
4. Modo de segurança com suporte a rede
5. Confirmação passo-a-passo
6. Somente prompt
7. Somente prompt do modo de segurança
8. Versão anterior do MS-DOS
 
Digite uma opção: 1

Figura 5 – Menu de Inicialização do Windows 95.

Nesta modalidade de boot, serão processados os arquivos CONFIG.SYS e AUTOEXEC.BAT, assim como ocorre no boot normal do Windows 95. A diferença é que este tipo de boot não carregará o ambiente gráfico do Windows 95, ficando restrito apenas ao Prompt do MS-DOS. Se quisermos, depois de realizar um boot deste tipo, ativar o Windows 95 na íntegra, basta teclar WIN.

O modo MS-DOS ativado pelo quadro de desligamento é idêntico ao que é ativado a partir de um boot com a opção “Somente Prompt”. A diferença está na forma usada para voltar ou ativar o Windows (comandos EXIT e WIN, respectivamente). Apesar do modo MS-DOS dar ao aplicativo o acesso total ao uso da memória e do microprocessador, existem restrições sérias em seu uso. Por exemplo, usuários do MS-DOS estão acostumados com o carregamento de vários programas nos arquivos AUTOEXEC.BAT e CONFIG.SYS, como o cache de disco SMARTDRV e os drivers que dão acesso ao drive de CD-ROM. No Windows 95, tanto a cache como os drivers que dão acesso ao drive de CD-ROM, além de diversos outros drivers, não são carregados nos arquivos CONFIG.SYS e AUTOEXEC.BAT. Os antigos drivers usados no MS-DOS 6 e no Windows 3.1 operam com 16 bits, na memória convencional ou na memória superior (UMB). O Windows 95 possui drivers equivalentes para praticamente todos os comandos usados nos arquivos CONFIG.SYS e AUTOEXEC.BAT. Esses drivers operam com 32 bits, são bem mais eficientes, e são carregados na memória XMS, não ocupando assim espaço na memória convencional e/ou na memória superior. É por isso que no Prompt do MS-DOS ativado pelo Windows 95 podemos ter uma quantidade de memória convencional livre jamais alcançada pelos métodos do MS-DOS 5 e 6. A desvantagem é que esses drivers de 32 bits não estão acessíveis quando operamos no modo MS-DOS. Estão acessíveis sim, quando usamos o comando Prompt do MS-DOS a partir do Windows 95.

Deve ser bem entendida a diferença entre Prompt do MS-DOS e modo MS-DOS. Como já foi explicado, o Prompt do MS-DOS é ativado pelo método da figura 1. Quando usamos este método, o Windows 95 e todos os seus drivers de 32 bits (ou drivers de modo protegido) estão presentes na memória, inclusive o cache de disco do Windows 95 e os drivers que dão acesso ao drive de CD-ROM. Já o modo MS-DOS, ativado pelos métodos das figuras 4 e 5, conta apenas com os drivers que são ativados pelos arquivos CONFIG.SYS e AUTOEXEC.BAT (drivers de 16 bits, ou de modo real).

Quando queremos usar o modo MS-DOS e ainda assim ter acesso ao drive de CD-ROM, cache de disco e outros recursos, temos que inicializar programas apropriados nos arquivos CONFIG.SYS e AUTOEXEC.BAT.

Além do Prompt do MS-DOS e do modo MS-DOS, existe ainda um terceiro método de executar aplicativos do MS-DOS. Trata-se do chamado “Prompt do modo de segurança”, conhecido também como “boot limpo”. Neste tipo de boot, não são processados os arquivos CONFIG.SYS e AUTOEXEC.BAT, nem tampouco é carregado o ambiente gráfico do Windows 95. Usamos este tipo de boot em situações muito particulares, como por exemplo, para executar programas que fazem um check-up no hardware, como o Checkit e o Norton Diagnostics.

Os usuários do MS-DOS 6 conhecem muito bem o boot limpo, obtido pelo pressionamento da tecla F5 no instante em que é apresentada a mensagem “Iniciando o MS-DOS”. Para obtê-lo no Windows 95, pressionamos a tecla F8, o que faz com que seja apresentado o menu da figura 5. Selecionamos então a opção “Somente Prompt do modo de segurança”.

Depois que utilizarmos os aplicativos para MS-DOS desejados a partir do Prompt do modo de segurança, não podemos digitar WIN para entrar no Windows 95. Para executar o Windows 95, será preciso realizar um novo boot.

Como vimos, existem três modalidades de execução de aplicativos do MS-DOS no Windows 95. A seguir resumimos cada uma delas, e em que situações devem ser usadas:

Prompt do MS-DOS

Devemos usar este método sempre que possível, e ele funcionará para praticamente todos os aplicativos para MS-DOS. O Prompt do MS-DOS é ativado a partir do menu Programas do botão Iniciar da barra de tarefas. Nesta modalidade, todos os recursos do Windows 95 e do hardware do computador estarão disponíveis para o aplicativo do MS-DOS a ser utilizado. Certos programas para MS-DOS exigem muita memória, ou exigem uma grande fração dos recursos do computador, como é o caso dos jogos. Nesse caso, devemos evitar o uso de referido aplicativo para MS-DOS em conjunto com aplicativos para Windows 95. Desta forma, teremos a maior parcela dos recursos do computador disponíveis para o aplicativo de MS-DOS.

Modo MS-DOS

Alguns programas, sobretudo jogos, não funcionam através do Prompt do MS-DOS que é ativado a partir do Windows 95. Isto ocorre com determinados jogos que exigem muita memória e exclusividade no uso do microprocessador. Nesses casos, devemos sair do Windows 95 e executar o Modo MS-DOS. Neste modo, o Windows 95 é totalmente removido da memória, que fica com apenas o núcleo do MS-DOS, similar ao que ocorria nas versões 6 e anteriores deste velho sistema operacional. Podemos ativar o modo MS-DOS de duas formas. Uma delas é pelo comando “Reiniciar o computador em modo MS-DOS”, no quadro de desligamento (obtido com o comando Desligar). O outro modo é usando a tecla F8 no boot, e escolhendo a opção “Somente Prompt”. No modo MS-DOS, qualquer aplicativo executado tem ao seu dispor toda a memória e 100% do tempo do microprocessador. Entretanto, drivers de modo protegido não estarão disponíveis. Caso seja necessário algum tipo de driver (por exemplo, os que fazem o controle da placa de som e do drive de CD-ROM), devem ser carregados pelos arquivos CONFIG.SYS e AUTOEXEC.BAT.

Prompt do modo de segurança

Esta modalidade é usada quando queremos executar programas de diagnóstico, ou seja, programas que fazem uma checagem no funcionamento do PC a nível de hardware. Podemos obtê-lo pelo pressionamento da tecla F8 durante o boot, e selecionando no menu que é apresentado, a opção “Somente Prompt do modo de segurança”. Podemos também ativá-lo pelo pressionamento de Shift F5 durante o boot.

Agora que as três modalidades de execução do MS-DOS estão apresentadas, passemos a discutir detalhadamente cada uma delas.

Usando o comando Prompt do MS-DOS

Não seria errado afirmar que este método pode ser usado por praticamente todos os aplicativos para MS-DOS, exceto para alguns jogos, e exceto em computadores com pouca memória. Por exemplo, determinados jogos exigem 8 MB para serem executados. Em um computador com 8 MB, ao executarmos o Prompt do MS-DOS, teremos uma quantidade de memória livre insuficiente, já que uma parte é consumida pelo Windows 95. Para executar jogos como este, precisamos ter mais memória (Ex: 16 MB), ou então executar o jogo no modo MS-DOS.

No que diz respeito ao uso da placa de vídeo, os aplicativos para MS-DOS executados desta forma podem operar em duas modalidades: em janela ou em tela cheia. Existem determinadas restrições ao uso dessas modalidades. Por exemplo, a maioria dos programas para MS-DOS que operam em modo gráfico precisam operar necessariamente em tela cheia. Já os programas que operam em modo texto podem funcionar perfeitamente, tanto em uma janela como em tela cheia. Podemos então classificar os aplicativos para MS-DOS em três categorias:

1) Aplicativos que operam em modo texto

Esses programas podem ser usados, tanto em tela cheia, como em uma janela. Para comutar entre o uso de uma janela e o uso de tela cheia, basta usar a combinação de teclas ALT ENTER. Podem ocorrer raríssimos casos de programas que, mesmo em modo texto, fazem acessos diretos à placa de vídeo, através de comandos de hardware. Nesse caso, ao tentarmos executar o aplicativo em uma janela, o Windows 95 automaticamente detectará que o programa precisa operar em tela cheia, e fará a comutação para este modo.

2) Aplicativos gráficos que acessam a placa de vídeo através do BIOS

Tratam-se de programas gráficos “bem comportados”, que utilizam os modos gráficos VGA (640×480 com 16 cores ou 320×200 com 16 ou 256 cores), sem fazer acessos diretos ao hardware da placa de vídeo. São raros os programas que recaem nesta categoria, mesmo porque, o acesso através do BIOS é muito mais lento (o que dificulta o uso de animações rápidas) que o acesso direto ao hardware da placa de vídeo. A figura 3 mostra dois exemplos de programas gráficos que recaem nesta categoria. No caso de jogos, não vale a execução em uma janela, pois a velocidade de execução será baixa para obter a animação adequada.

3) Aplicativos gráficos que fazem acesso direto à placa de vídeo

Praticamente todos os programas gráficos recaem nesta categoria. Podem ser executados exclusivamente em tela cheia. Durante a sua execução, podemos a qualquer momento teclar ALT TAB para ativar outros aplicativos que estejam em execução simultânea. Entretanto, esta prática não é nada recomendável, pois ao voltarmos para o aplicativo gráfico de MS-DOS, nem sempre o conteúdo da tela será restaurado corretamente. Se tentarmos usar ALT ENTER para comutar o aplicativo para uma janela, o Windows 95 apresentará uma mensagem informando que o aplicativo não pode ser executado neste modo. Quando comandamos a partir do Prompt do MS-DOS em uma janela, a execução de um aplicativo gráfico que exija o modo de tela cheia, o Windows 95 informará que a execução só pode ser feita nesta modalidade, e comutará automaticamente para tela cheia.

Resumindo, praticamente qualquer aplicativo de MS-DOS pode ser executado sob o Windows 95, no modo de tela cheia. Para evitar problemas, podemos utilizar este modo como default. Por outro, lado, apenas alguns aplicativos podem ser executados em uma janela. Isto inclui quase todos os programas que operam em modo texto, e alguns poucos programas que operam em modos gráficos.

Seria muito bom se todos os programas para MS-DOS pudessem ser executados nesta modalidade. Infelizemente, muitos não o podem, e uma das principais razões que causam este impedimento é o uso da memória. Portanto, o usuário de Windows 95 que deseja utilizar programas para MS-DOS deve conhecer técnicas de gerenciamento de memória.

Memória Convencional, Estendida, XMS e HMA

Todos os programas necessitam de memória para serem executados. Em última análise, esta memória consiste em RAM. A princípio, um computador com uma quantidade razoável de memória RAM estará apto a executar a maioria dos programas. É claro que sempre existirão alguns programas muito sofisticados que exigem enormes quantidades de memória, e provavelmente apresentarão problemas relacionados com memória insuficiente ao serem executados em PCs normais. Por exemplo, certos programas específicos para editoração de filmes requerem mais de 64 MB de memória RAM para serem executados com eficiência.

Infelizmente, o fato de um PC possuir memória RAM não é suficiente para garantir o funcionamento dos programas. Podemos ter, por exemplo, um PC com 16 MB de RAM, e encontrarmos problemas ao executar um simples programa que requer 600 kB. O problema não é a quantidade, e sim, o tipo de memória.

Do ponto de vista de hardware, temos a memória RAM, mas levando em conta o modo como a RAM é usada, podemos dividi-la em várias modalidades:

Memória Convencional
Memória Estendida
Memória XMS
Memória EMS
UMB
HMA

Se você já conhece esses conceitos, usados desde o MS-DOS 5.0, saiba que todos eles permanecem válidos, mesmo dentro do Windows 95, ou seja, a organização da memória é a mesma, seja no MS-DOS 5.0, no MS-DOS 6.xx ou no Windows 95.

Para utilizar aplicativos do Windows 95, o usuário pode se dar ao luxo de ignorar toda esta discussão a respeito dos tipos de memória. A razão disso é que os aplicativos para Windows 95 utilizam a memória XMS, e o Windows 95, por default, transforma praticamente toda a memória RAM disponível em XMS, sem que o usuário precise configurar nada. Entretanto, este capítulo é dedicado ao uso de aplicativos para MS-DOS no Windows 95, e programas para MS-DOS podem requerer qualquer um desses tipos de memória. Precisamos então conhecer detalhadamente cada um desses tipos de memória, e saber como ativá-los.

Imagine um computador com 16 MB de memória RAM. Podemos representar esta memória em um diagrama como mostra a figura 6. Este diagrama é chamado de MAPA DE MEMÓRIA.

ART19-06

Figura 6 – Mapa de memória de um PC com 16 MB de RAM.

Este suposto PC tem os seus 16 MB de RAM divididos da seguinte forma:

1 MB Este primeiro 1 MB de memória está dividido em duas regiões:640 kB de memória convencional384 kB de memória “desabilitada”
15 MB A região de memória localizada a partir do endereço 1M (1024 k), até o final da memória RAM, é chamada de memória ESTENDIDA.

Seja qual for a quantidade de memória de um PC, a sua organização é muito similar ao mostrado na figura 6. Entre o endereço 0 k (o início da memória) e o endereço 640 k, temos a chamada Memória Convencional. Esta região de memória é usada pela maioria dos programas para MS-DOS. Depois do endereço, 640 k, é feita uma pausa na memória RAM. A região de memória localizada entre os endereços 640 k e 1024 k (1 M) é reservada para outros tipos de memória, sem ser a RAM. Nesta região encontramos:

ROMs que contém o BIOS da placa de CPU e de placas de expansão
Memória de vídeo

Nos PCs antigos, a memória RAM terminava no endereço 640 k. Até este ponto, a RAM é chamada de Memória Convencional. A partir daí, e até o final da memória (1024 k), tínhamos uma região totalizando 384 kB de memória, onde era localizada uma pequena miscelânea de memórias, constituídas principalmente por memórias ROM e pela memória de vídeo, além de algumas áreas vazias. Pelo fato desta área, chamada de Memória Superior, estar reservada para uso por esta miscelânea de memórias, não pode ser ocupada pela memória RAM. A RAM termina no endereço 640 k e prossegue a partir do endereço 1024 k. A partir do endereço 1024 k, a RAM é chamada de Memória Estendida.

A região da memória RAM que ficaria localizada entre os endereços 640 k e 1024 k não poderia existir, já que esta região é reservada para ROMs e memória de vídeo (Memória Superior). Por isto, esta região da memória RAM permanece DESABILITADA. Isto significa que apesar de existir RAM fisicamente localizada nesta faixa de endereços, seus circuitos não operam, e como resultado, tudo se passa como se não existisse RAM nesta região.

Portanto, você já está conhecendo duas regiões ocupadas por memória RAM:

Memória Convencional: Vai de 0 k até 640 k
Memória Estendida: Vai de 1024 k (1 M) até o final da memória

A memória Convencional e a memória Estendida são nativas, isto é, não necessitam de nenhum software especial para que passem a existir. Isto é o mesmo que dizer que o teclado é um dispositivo nativo do PC, já que funciona sem nenhum software especial. Por outro lado, existem muitos dispositivos que só funcionam mediante a instalação de softwares apropriados (drivers), entre os quais podemos citar o drive de CD-ROM, o mouse e a placa de som.

Para comprovar como a memória Convencional e a Estendida estão disponíveis sem que nenhum software especial seja instalado, execute um boot limpo (teclando F8 durante o boot e escolhendo a opção “Somente Prompt do modo de segurança) e a seguir use o comando:

MEM /C

Será mostrado um relatório como o que vemos na figura 7. Este relatório foi obtido em um PC com 32 MB de memória RAM. Logo no início do relatório existe uma lista com os nomes dos programas que estão carregados na memória. No caso deste tipo de boot, encontraremos apenas o núcleo do MSDOS (ocupando 77 kB) e o COMMAND (ocupando 10 kB), ambos na memória convencional.

Convém agora apresentar um outro tipo de memória, chamado de XMS, e ao mesmo tempo esclarecer a confusão que é feita entre a memória XMS e a memória Estendida. A memória XMS (Extended Memory Specification) nada mais é que a própria memória estendida, exceto pelo fato do seu uso ser gerenciado por um programa chamado Gerenciador de Memória Estendida. O programa Gerenciador de Memória Estendida que acompanha o Windows 95 (e também o MS-DOS 6.xx e o MS-DOS 5.0) é o HIMEM.SYS. Antes do MS-DOS 5.0, muitos programas acessavam a memória Estendida de forma desordenada, o que impedia, por exemplo, a convivência pacífica de vários programas em execução simultânea em ambientes multitarefa, como é o caso do Windows. O gerenciador HIMEM.SYS funciona como um “guarda de trânsito”, responsável por fornecer áreas de memória estendida solicitadas pelos diversos programas.

ART19-07

Figura 7 – Relatório sobre o uso da memória em um PC com 32 MB de RAM, tendo sido executado um boot com a opçào “Somente Prompt do modo de segurança”.

Com o passar dos anos, o acesso à memória estendida através do gerenciador HIMEM.SYS tornou-se algo tão padronizado, que atualmente os termos “memória estendida” e “memória XMS” são tomados como sinônimos. O próprio relatório sobre o uso da memória mostrado pelo programa MEM utiliza esta mesma confusão de nomes. A memória Estendida, ao qual o programa MEM se refere, é na verdade a memória XMS. No relatório do nosso exemplo, vemos que existem 31.744 kB de memória XMS (31 MB), dos quais todos os 31.744 kB estão “ocupados”, restando portanto 0 kB de memória XMS livre. Esses 31 MB de memória XMS estão “ocupados”, pois na verdade nem forma transformados em memória XMS. Quando executamos o boot limpo, o gerenciador HIMEM.SYS não é ativado, e por isso, toda a memória estendida permanece “estendida à moda antiga”, ou seja, sem ser transformada em XMS.

O gerenciador de memória HIMEM.SYS é fornecido juntamente com diversos sistemas operacionais da Microsoft, entre eles:

MS-DOS 5.0
MS-DOS 6.xx
Windows 3.1
Windows 95

O uso do HIMEM.SYS para ativar a memória XMS tem sido praticamente intalterado, desde os tempos do MS-DOS 5.0. Consiste em usar, logo no início do arquivo CONFIG.SYS, o seguinte comando:

DEVICE=C:\DOS\HIMEM.SYS

Neste comando, usamos o diretório C:\DOS no caso dos MS-DOS 5.0 e 6.xx. Para usar as versões do HIMEM.SYS que acompanham o Windows 3.1 e o Windows 95, usamos:

DEVICE=C:\WINDOWS\HIMEM.SYS

No Windows 95, a Microsoft implantou uma alteração interessante. O carregamento do HIMEM.SYS é feito de forma automática, mesmo que não o utilizemos no arquivo CONFIG.SYS. Este carregamento só não é realizado quando executamos um boot com a opção “Somente Prompt do modo de segurança”.

Observe a seguir os arquivos CONFIG.SYS e AUTOEXEC.BAT que o Windows 95 gera na ocasião da sua instalação. Como podemos ver, são arquivos extremamente simples, se comparados com os correspondentes usados no MS-DOS. Apenas são ativados alguns programas relacionados com a apresentação correta de caracteres acentuados na tela, e também com a acentuação pelo teclado.

CONFIG.SYS:
device=C:\WINDOWS\COMMAND\display.sys con=(ega,,1)
Country=055,850,C:\WINDOWS\COMMAND\country.sys

AUTOEXEC.BAT:
mode con codepage prepare=((850) C:\WINDOWS\COMMAND\ega.cpi)
mode con codepage select=850
keyb br,,C:\WINDOWS\COMMAND\keyboard.sys

Mesmo com essas versões default simplificadas dos arquivos CONFIG.SYS e AUTOEXEC.BAT, veja no relatório da figura 8 (obtido com o comando MEM/C) quando executamos o boot com a opção “Somente Prompt”. O relatório mostra, em seu início, os nomes de programas que estão carregados de forma residente na memória. Entre eles encontramos o MSDOS e o COMMAND, que são sempre carregados automaticamente na ocasião do boot, sem que precisem ser especificados nos arquivos de inicialização (CONFIG.SYS e AUTOEXEC.BAT). Vemos também alguns programas que foram carregados por ordem dos arquivos de inicialização. São eles o DISPLAY.SYS e o KEYB.COM. Entretanto, podemos observar também que alguns programas foram carregados automaticamente, mesmo sem terem sido especificados nos arquivos de inicialização:

HIMEM.SYS
IFSHLP.SYS
SETVER.EXE

ART19-08

Figura 8 – Relatório obtido com o comando MEM/C em um PC com 32 MB de RAM, tendo sido executado o boot com a opção “Somente Prompt”.

ART19-D

O fato do HIMEM.SYS ser carregado automaticamente mesmo não sendo especificado no arquivo CONFIG.SYS explica a existência de memória XMS no relatório acima. Observe a linha:

A linha indica que existem 31 MB (31 x 1024 x 1024 = 32.505.856) de memória XMS total, que nada mais é que a quantidade de memória acima do endereço 1024 k. Desses 31 MB, 69.632 estão ocupados, sobrando um total de 32.436.224 bytes. Como vemos, praticamente toda a memória está disponível na forma de XMS. Toda esta memória também estará ativada quando executamos um boot normal no Windows 95. Qualquer aplicativo para Windows 95 (que requer memória XMS) poderá usar esta memória, sem que o usuário precise realizar configurações complicadas. O problema é quando queremos utilizar aplicativos do MS-DOS…

Observe no relatório da figura 7 que existem 553 kB de memória convencional livre, pois 87 kB estão sendo ocupados pelo MSDOS e pelo COMMAND. Na figura 8, existem diversos outros programas carregados na memória convencional, entretanto, temos 587 kB de memória convencional livre. Isto é muito curioso: mesmo com mais programas carregados na memória convencional, no relatório da figura 8 vemos que esses programas ocupam menos espaço. A razão disso é que na figura 7, o MSDOS e o COMMAND ocupavam, 77 kB e 10 kB, respectivamente, e na figura 8, ocupam 17 kB e 7 kB. Uma vez estanto ativa a memória XMS, passa a estar também disponível uma área especial de memória, chamada HMA (High Memory Area, ou Área de Memória Alta). Observe no final do relatório da figura 8, a linha “MS-DOS está residente na área de memória alta”. Esta área possui apenas 64 kB, e fica localizada logo no início da memória XMS, ou seja, entre os endereços 1024 k e 1088 k. Apesar de pequena, foi suficiente para armazenar 60 kB do MSDOS e 3 kB do COMMAND, e como resultado, foi possível desocupar 64 kB da memória convencional. Isto parece uma ninharia em um computador com 32 MB de memória, mas é vital para os programas do MS-DOS, que necessitam de memória convencional livre para poderem ser executados. Fica portanto, apresentado uma outra região de memória, a HMA.

HMA

Trata-se de uma pequena área de memória, localizada a partir do endereço 1 M (1024 k), e ocupando 64 kB. Desde os tempos do MS-DOS 5.0, a HMA tem sido utilizada para armazenar partes do núcleo do MS-DOS, que de outra forma estariam ocupando espaço na memória convencional ou na memória superior. A HMA faz parte da memória XMS, e é criada pelo HIMEM.SYS. Antes do Windows 95, para fazer com que trechos do MS-DOS fossem transferidos para a HMA, era preciso usar em qualquer ponto do arquivo CONFIG.SYS (normalmente, por questão de organização, este comando era acrescentado ao início do CONFIG.SYS) o comando:

DOS=HIGH

O simples uso do HIMEM.SYS não habilitava a transferência de trechos do MS-DOS para a HMA. Era preciso adicionar a linha “DOS=HIGH” no CONFIG.SYS. Entretanto, no Windows 95, a transferência de partes do MS-DOS para a HMA é automática, desde que o HIMEM.SYS também esteja ativado, o que ocorre, por exemplo, quando executamos o boot normal do Windows 95, ou o boot com a opção “Somente Prompt”.

Para permitir a execução de aplicativos do MS-DOS, é importantíssimo liberar a maior quantidade possível de memória convencional. Na figura 7, vemos que existem 553 kB de memória convencional livre. Na figura 8, este número aumentou para 578 kB, graças ao uso do HMA. Entretanto, em muitos casos, este total pode ser insuficiente. Pode ser necessário o carregamento de mais programas residentes, diminuindo ainda mais a quantidade de memória convencional livre. É importante lembrar que certos jogos para MS-DOS exigem mais de 600 kB de memória convencional livre, apesar de não ultrapassarem seu valor máximo, que é de 640 kB. Muitos requerem 600, 610, alguns chegando a exigir até 615 kB. Apenas usuários mais experientes conhecem as técnicas apresentadas neste capítulo, necessárias para a liberação da máxima quantidade de memória convencional.

Memória EMS e UMB

A figura 8 é o reltório sobre o uso da memória obtido quando executamos um boot com a opção “Somente Prompt”. Quando executamos o boot normal do Windows 95, também podemos ter acesso ao Prompt do MS-DOS, bastando executar o comando Prompt do MS-DOS, a partir do botão Iniciar da barra de tarefas. Se fizermos isto e executarmos o comando MEM/C, teremos o relatório mostrado na figura 9.

Comparando com a figura 8, podemos notar algumas diferenças. A primeira é presença dos programas WIN e VMM32, ambos ocupando parte da memória convencional. A outra grande diferença é que agora existe um outro tipo de memória: Memória Expandida (EMS). Este tipo de memória foi muito usado no final dos anos 80, e começou a cair em desuso a partir da difusão cada vez mais acentuada do uso da memória XMS. Mesmo assim, ainda existem muitos programas para MS-DOS que a utilizam, inclusive alguns jogos relativamente novos.

ART19-09

Figura 9 – Relatório obtido com o comando MEM/C em um PC com 32 MB de RAM, tendo sido executado o comando Prompt do MS-DOS dentro do Windows 95.

A memória EMS é ativada por programas chamados “Gerenciadores de memória Expandida”. Tanto o MS-DOS 5.0, 6.xx, como o Windows 3.1 eram acompanhados por um gerenciador de memória expandida chamado EMM386.EXE. No Windows 95, não é necessário usar este gerenciador. O Windows 95 possui um gerenciador interno que cria a memória EMS, sem que o usuário precise utilizar o EMM386. Entretanto, algumas razões podem levar o usuário a usar o EMM386. A primeira delas é que a memória EMS é ativada automaticamente pelo Windows 95, apenas nas seções do MS-DOS, obtidas com o comando “Prompt do MS-DOS”. Ao ser executado o boot com a opção “Somente Prompt”, não existirá memória EMS disponível, a menos que usemos o EMM386. A segunda razão que pode levar o usuário a ativar o EMM386 é que este programa executa uma função que não é ativada de forma automática pelo Windows 95. Trata-se da criação da memória UMB (Upper Memory Blocks, ou Blocos de Memória Superior). A memória UMB serve para armazenar programas que de outra forma estariam ocupando espaço na memória convencional. Para obter mais de 600 kB de memória convencional livre, mesmo com vários programas residentes carregados na memória, é preciso utilizar os UMBs. Precisamos então conhecer o programa EMM386, a memória EMS e os UMBs, se quisermos maximizar a memória convencional livre.

ART19-10

Figura 10 – Acesso à memória EMS.

A memória EMS foi originada nos micros XT, nos quais o microprocessador 8088 só era capaz de acessar 1 MB de memória. Para permitir o aumento da quantidade de memória acessada pelo microprocessador, utilizou-se no padrão EMS, uma técnica de hardware chamada “chaveamento de bancos de memória”. Consiste em dividir a memória adicional (no caso, a memória EMS) em blocos de 64 kB, e deixar que apenas um desses blocos seja acessado pelo microprocessador a cada instante. Para acessar um determinado bloco, o programa gerenciador de memória EMS precisa primeiro especificar qual é o bloco a ser acessado (isto era feito através de um comando de hardware enviado para a placa de memória EMS), e depois disso acessar o bloco desejado, que agora estará visível dentro do espaço de endereçamento do microprocessador.

Toda a operação de acesso à memória EMS é mostrada, de forma simplificada, na figura 10. A barra horizontal localizada na parte inferior da figura representa a memória EMS, dividida em blocos de 64 kB. A outra barra horizontal, na parte superior da figura, representa o mapa da memória vista pelo microprocessador. Neste mapa, temos as seguintes regiões de memória:

Memória Convencional: Como sempre, de 0 k a 640 k
Memória de vídeo: Localizada entre 640 k e 768 k
ROMS: Nas faixas 768 k – 896 k e 960 k – 1024 k
EMS PAGE FRAME: Entre 896 k e 960 k

O EMS PAGE FRAME é um bloco da memória superior, ocupando 64 kB, através do qual é feito o chaveamento de bancos da memória EMS. Nesta figura, a memória EMS possui 16 blocos de 64 kB, totalizando assim 1 MB. Maiores quantidades de memória EMS podiam ser usadas, bastando que fossem instaladas placas de expansão de memória EMS apropriadas. Dos 16 bancos de memória EMS mostrados na figura, vemos que o banco número 11 está sendo acessado, tendo se tornado visível no EMS PAGE FRAME. Para acessar outros bancos da memória EMS, basta que sejam, antes chaveados para o EMS PAGE FRAME, passando a estarem visíveis pelo microprocessador.

Graças à memória EMS, muitos programas para o IBM PC XT puderam operar com maiores quantidades de memória. Apesar de não poder ser usada para programas a serem executados, a memória EMS podia armazenar grandes quantidades de dados usados por esses programas. Tipicamente, planilhas eletrônicas de grande tamanho usavam a memória EMS. Mais recentemente, alguns jogos para MS-DOS utilizam a memória EMS para armazenar gráficos, tabelas e mapas.

A explicação apresentada a respeito da memória EMS foi ligeiramente simplificada, visando facilitar o seu entendimento. Vamos agora completá-la, removendo a simplificação feita. A figura 10 mostra o uso de blocos de 64 kB, tanto para o EMS PAGE FRAME, como pela própria memória EMS. Entretanto, na verdade a memória EMS é organizada em blocos de 16 kB, chamados “páginas”. O EMS PAGE FRAME, com seus 64 kB, abriga 4 páginas de 16 kB. O esquema exato é mostrado na figura 11.

A divisão da memória EMS em páginas de 16 kB, apesar de ser ligeiramente mais complicada para a implementação e para a programação (apenas quem desenvolve programas ou placas de memória EMS passam por esta complicação), permite maior flexibilidade, já que até 4 trechos podem ser acessados simultaneamente.

ART19-11

Figura 11 – Acesso à memória EMS.

No tempo dos micros XT e 286, a memória EMS era obtida através de placas de expansão especiais. Já os micros 286 do início dos anos 90 permitiam que uma parte da memória estendida (acima de 1 MB) fosse reservada para ser acessada por um hardware especial que implementa o mecanismo de chaveamento de bancos idêntico ao utilizado nas placas de expansão de memória EMS. Em muitos desses micros 286 era preciso indicar no CMOS Setup qual a quantidade de memória estendida deveria ser deixada à parte, para ser acessada como memória EMS. Em outros desses micros, não era preciso realizar alterações no CMOS Setup, e sim, usar no arquivo CONFIG.SYS, um gerenciador de memória EMS característico da placa de CPU em questão. Este gerenciador fazia, entre outras funções, a separação de uma parte da memória estendida (esta quantidade era definida pelo usuário) para ser acessada pelo hardware que implementa o acesso à memória EMS.

Finalmente, nos PCs baseados nos microprocessadores 386, e em todos os posteriores (486, Pentium, Pentium Pro), passou a ser desnecessário o uso de qualquer tipo de hardware especial para implementar a memória EMS. Isto ocorre porque os microprocessadores 386 e posteriores possuem recursos de gerenciamento de memória que permitem implementar as funções de chaveamento de bancos, sem a necessidade de hardware adicional. A Microsoft criou um gerenciador de memória que implementa este recurso, ou seja, usar uma parte da memória estendida como memória EMS. Este gerenciador é o EMM386.EXE, e trabalha em conjunto com o HIMEM.SYS. Uma das formas de usar o EMM386.EXE, devemos incluir, nas duas primeiras linhas do arquivo CONFIG.SYS os comandos:

DEVICE=C:\WINDOWS\HIMEM.SYS
DEVICE=C:\WINDOWS\EMM386.EXE RAM

Tanto o HIMEM.SYS como o EMM386.EXE são encontrados no diretório C:\WINDOWS, no caso do Windows 3.1 e do Windows 95. No caso de uso do MS-DOS (versões 5 e 6), esses programas também podem ser encontrados no diretório C:\DOS.

Cabe aqui apresentar um detalhe muito importante. Quando não queremos usar o EMM386, não precisamos ativar o HIMEM.SYS no arquivo CONFIG.SYS, pois esta ativação é feita automaticamente durante o carregamento do Windows 95. Entretanto, no instante em que o arquivo CONFIG.SYS é processado, o HIMEM.SYS ainda não está presente na memória. Portanto, para usar o EMM386.EXE, é obrigatório usar também o HIMEM.SYS no arquivo CONFIG.SYS. A linha de comando do HIMEM.SYS deve estar localizada antes da linha que ativa o EMM386.EXE, pois a memória EMS é obtida a partir da memória XMS.

ART19-12

Figura 12 – A memória EMS é criada pelo EMM386.EXE, a partir da memória XMS.

Observe o mapa de memória apresentado na figura 12. Toda a memória localizada a partir do endereço 1M é gerenciada como memória XMS, através do HIMEM.SYS. O programa EMM386.EXE “pede uma área de memória XMS” ao HIMEM.SYS, na qual será realizado o chaveamento de bancos para o EMS PAGE FRAME, criando o mesmo tipo de mecanismo usado nas primeiras placas de memória EMS. No MS-DOS 5.0 e no Windows 3.1, era preciso indicar na linha de comando do EMM386, qual a quantidade de memória XMS deveria ser convertida em EMS. A partir do MS-DOS 6.0, o EMM386 passou a deixar esta quantidade de memória em aberto. Isto significa que não tomará nenhum espaço da memória XMS se nenhum programa estiver requisitando memória EMS, e poderá tomar até a totalidade da memória XMS para converter em EMS caso existam programas solicitando memória EMS. Portanto, o tamanho da memória EMS passou a ser automático, variando desde o mínimo de 0 kB até a totalidade da memória XMS livre.

Com o uso do EMM386.EXE no arquivo CONFIG.SYS, programas para MS-DOS que necessitem de memória EMS poderão obtê-la, não apenas no Prompt do MS-DOS ativado a partir do Windows 95, mas também a partir do boot com a opção “Somente Prompt”.

Muitos usuários não ativam a memória EMS, mesmo porque são cada vez mais raros os programas que necessitam deste tipo de memória. Entretanto, isto não invalida o uso do EMM386.EXE, pois este gerenciador, além de criar a memória EMS, cria também um outro tipo de memória importantíssimo para quem precisa de muita memória convencional livre. Trata-se dos UMBs (Upper Memory Blocks, ou Blocos de Memória Superior). Tratam-se de áreas de memória RAM que são transferidas para locais onde não existe memória alguma, entre os endereços 640 k e 1024 k. Esta pequena área de 384 kB foi reservada pela IBM, a princípio para abrigar a memória de vídeo e todas as ROMs existentes na placa de CPU e em placas de expansão. Entretanto, a técnica de usar ROMs em placas de expansão, muito comum no início dos anos 80, foi substituída pelo carregamento de drivers e programas residentes pelos arquivos CONFIG.SYS e AUTOEXEC.BAT. O resultado é que a área reservada para ROMs, na memória superior, possui diversas lacunas livres. A figura 13 apresenta um típico mapa de memória superior, da forma como se apresenta na maioria dos PCs.

ART19-13

Figura 13 – Típico mapa da memória superior.

A utilização da memória superior resume-se na seguinte tabela:

Faixa de endereços Utilização
640 k até 768 k Esta área de 128 kB é reservada para a memória de vídeo das placas SVGA. Apesar de ser pequena, esta área permite acessar memórias de vídeo com grandes capacidades, como ocorre com as modernas placas SVGA, com 1 MB, 2 MB e 4 MB de memória de vídeo. Para permitir este acesso através de uma área tão pequena, é usado um mecanismo de chaveamento de bancos de memória, similar ao empregado pela memória EMS.
768 k até 800 k Nesta área fica localizado o BIOS VGA. Trata-se de uma programa localizado em uma memória ROM com 32 kB, encontrada na placa VGA (ou SVGA).
800 k até 960 k Na maioria dos PCs, esta área está vazia. Seus 160 kB são usados para abrigar o EMS PAGE FRAME (64 kB) e os blocos de memória superior (96 kB).
960 k até 1024 k Esta área de 64 kB é ocupada pela ROM onde está localizado o BIOS da placa de CPU.

Ao ser executado, o EMM386 determina quais são as áreas livres localizadas na memória superior. Tipicamente, todas as áreas livres estarão entre os endereços 800 k e 960 k, já que as áreas restantes já estarão ocupadas pela memória de vídeo, pelo BIOS da placa de CPU e pelo BIOS da placa de vídeo. Dentro desta área livre, serão reservados 64 kB para o EMS PAGE FRAME, necessário para o acesso à memória EMS. A área livre restante será usada como UMB, e nela poderão ser carregados programas que de outra forma estariam ocupando a memória convencional. A ocupação da memória superior ficará em geral com a aspecto mostrado na figura 14. O EMS PAGE FRAME, por default, ocupará a faixa de endereços entre 896 k e 960 k (total de 64 kB). A área entre 800 k e 896 k será convertida em UMB (total de 96 kB).

ART19-14

Figura 14 – Memória Superior, depois da criação do EMS PAGE FRAME e UMBs.

Dependendo do tamanho do BIOS da placa de CPU (já existem muitos que ocupam até 128 kB) e da presença de certas placas especiais que possuem outras ROMs, podem ocorrer diferenças no mapa de memória indicado na figura 14. De qualquer forma, o EMM386 sempre detectará, durante a sua execução, que áreas estão livres para serem convertidas em UMB e EMS PAGE FRAME.

Voltando rapidamente à figura 8, podemos observar que o relatório obtido pelo comando MEM/C traz informações sobre o uso da memória superior. Naquela ocasião, não havia sido executado o EMM386.EXE, por isso não existe EMS PAGE FRAME e nem UMB. Veja por exemplo, na tabela abaixo, que a coluna mais à direita mostra que todos os programas residentes na memória estão ocupando 0 kB de memória superior.

ART19-A

Coloquemos então, no início do arquivo CONFIG.SYS as seguintes linhas:

DOS=HIGH,UMB
DEVICE=C:\WINDOWS\HIMEM.SYS
DEVICE=C:\WINDOWS\EMM386.EXE RAM

Após a execução de um novo boot, usando a opção “Somente Prompt”, teremos o relatório apresentado pelo comando MEM/C visto na figura 15.

ART19-15

Figura 15 – Resultado do comando MEM/C.

Observe que neste relatório existem diversas novidades:

Uso da memória superior

Antes os programas ocupavam 0 kB de memória superior. Agora, com a criação dos UMBs, vários programas a estão utilizando.

Mais memória convencional livre

Com o uso da memória superior, temos agora 610 kB (625.088 bytes) de memória convencional livre.

Memória EMS

O relatório mostra que o EMM386 está usando memória XMS para criar memória EMS conforme necessário. No relatório da figura 8, não tínhamos memória EMS. Esta só podia ser obtida através do comando Prompt do MS-DOS, executado a partir do Windows 95. Agora, com o uso do EMM386, a memória EMS passa a estar disponível mesmo quando executamos um boot no modo MS-DOS.

Localização de programas residentes

No relatório da figura 8, todos os programas residentes estavam localizados total ou parcialmente na memória convencional. Com a criação do UMB, alguns programas passaram a ocupar automaticamente esta região, mas outros ainda continuam na memória convencional.

Observe na figura 15 que ainda temos 21 kB de memória superior livre. Podemos fazer com que mais alguns dos programas que estão ocupando a memória convencional passem para a memória superior, liberando ainda mais memória convencional. Isto pode ser obtido através de alterações simples nos arquivos CONFIG.SYS e AUTOEXEC.BAT, através dos comandos DEVICEHIGH e LOADHIGH:

DEVICEHIGH

No arquivo CONFIG.SYS, vários programas são carregados na memória através do comando DEVICE. Por exemplo:

device=C:\WINDOWS\COMMAND\display.sys con=(ega,,1)
device=C:\WINDOWS\ANSI.SYS

Para fazer com que esses programas sejam carregados na memória superior, ao invés da memória convencional, basta usar, no lugar do comando “DEVICE”, o comando “DEVICEHIGH”. Por exemplo:

devicehigh=C:\WINDOWS\COMMAND\display.sys con=(ega,,1)
devicehigh=C:\WINDOWS\ANSI.SYS

O HIMEM.SYS e o EMM386.EXE devem ser obrigatoriamente carregados com o comando DEVICE, e não com DEVICEHIGH.

LOADHIGH

Diversos programas são cerregados na memória de forma residente através do arquivo AUTOEXEC.BAT. Para fazer com que esses programas fiquem na memória superior, basta usar, no início da linha de comando que ativa cada um deles, a palavra “LOADHIGH”. Por exemplo, suponha que no arquivo AUTOEXEC.BAT esteja sendo carregado o programa KEYB, através do comando:

keyb br,,C:\WINDOWS\COMMAND\keyboard.sys

Devemos então usá-lo na forma:

loadhigh keyb br,,C:\WINDOWS\COMMAND\keyboard.sys

Muito cuidado. Esta técnica não consiste em acrescentar, de forma indiscriminada, as palavras devicehigh e loadhigh nas linhas dos arquivos CONFIG.SYS e AUTOEXEC.BAT. É preciso antes saber quais são as linhas desses arquivos que ativam programas que ficam residentes. No caso do CONFIG.SYS, a mudança é muito simples, bastando trocar a palavra DEVICE por DEVICEHIGH. No caso do AUTOEXEC.BAT, é preciso saber quais linhas ativam programas residentes. Através do comando MEM/C podemos ter uma lista dos programas instalados na memória. De posse desta lista, consultamos os arquivos CONFIG.SYS e AUTOEXEC.BAT para determinar quais são as linhas de comando que ativam os programas residentes. Por exemplo, na listagem da figura 15, vemos a presença do programa KEYB na memória. Localizamos então a linha de comando que ativa este programa, que no caso está no AUTOEXEC.BAT. Podemos então adicionar no seu início, a palavra LOADHIGH.

Nem todos os programas residentes poderão ser armazenados na memória superior. Pode não haver espaço suficiente. À medida em que o Windows 95, durante o processamento dos arquivos CONFIG.SYS e AUTOEXEC.BAT, encontra comandos DEVICEHIGH e LOADHIGH, fará o carregamento na memória superior. Quando não existir memória superior livre em quantidade suficiente, os próximos programas passarão a ocupar a memória convencional.

O relatório abaixo foi obtido com o uso do comando DEVICEHIGH para carregar o DISPLAY.SYS. Compare com a figura 15, e observe que este programa está agora na memória superior, fazendo com que a memória convencional livre some 619 kB (633.392 bytes).

ART19-B

Podemos aumentar um pouco mais a quantidade de memória convencional livre, e ainda liberar mais memória superior, desde que façamos a desativação da memória EMS. Isto pode ser feito com muita segurança, já que os aplicativos para Windows não a utilizam, o mesmo ocorrendo com a maioria dos programas para MS-DOS. Podemos então desativar a memória EMS, desde que fiquemos atentos. Um dia, um determinado programa para MS-DOS pode “reclamar” por falta de memória EMS. Para executar tal programa, devemos ativar novamente a memória EMS.

A desativação da memória EMS é feita pelo parâmetro NOEMS, a ser acrescentado na linha de comando do EMM386. Até agora, usamos o EMM386 na forma:

DEVICE=C:\WINDOWS\EMM386.EXE RAM

Quando é usado o parâmetro RAM, o EMM386 cria, tanto a memória EMS como os blocos de memória superior (UMB). Para fazer com que o EMM386 crie apenas os UMBs, deixando de lado a memória EMS (e aproveitando o espaço que seria usado pelo EMS PAGE FRAME para criar mais 64 kB de UMB), basta usar, ao invés do parâmetro “RAM” o parâmetro “NOEMS”:

DEVICE=C:\WINDOWS\EMM386.EXE NOEMS

Veja agora como fica o relatório apresentado pelo comando MEM/C. Com mais memória superior livre, foi possível armazenar em UMBs, mais programas que antes estavam na memória convencional. Ficamos agora com 625 kB (640.336 bytes) de memória convencional livre.

ART19-C

Além disso, ainda temos mais 70 kB de memória superior livre para o armazenamento de outros programas residentes que possam ser futuramente instalados.

A situação apresentada acima é muito animadora. Afinal de contas, 625 kB é memória convencional suficiente para executar qualquer programa para MS-DOS. Entretanto, na prática a situação pode não ser tão favorável. Várias placas de CPU modernas possuem um BIOS com mais de 64 kB, o que diminui a disponibilidade de espaço vazio entre os endereços 640 k e 1024 k, resultando em uma menor quantidade de memória nos UMBs. Além do BIOS da placa de CPU, muitas placas SVGA modernas apresentam esta mesma característica: possuem áreas de memória superiores aos tradicionais 32 kB de ROM. De qualquer forma, isto não traz dificuldades para o usuário, já que o EMM386 é capaz de detectar automaticamente a área de memória que está realmente vazia para que seja preenchida por UMBs. O único transtorno é que haverá menor quantidade de memória UMB, o que pode possivelmente obrigar alguns programas a serem carregados na memória convencional.

Uso da memória pelo DriveSpace

Alguém interessado em executar programas críticos do MS-DOS sob o Windows 95, sobretudo jogos, e esteja usando o compactador de discos DriveSpace, pode passar por problemas. De um modo geral, jogos e compactadores de disco são softwares que não se entendem muito bem, pois ambos requerem memória. Dependendo da quantidade de memória convencional e UMB usada pelo software de compactação de disco, é possível que não sobre memória convencional suficiente para a execução de certos jogos famintos por memória. Felizmente no Windows 95, existem métodos para que os jogos e o DriveSpace tenham uma convivência pacífica.

O acesso aos drives compactados pode ser feito através de dois drivers diferentes:

DBLSPACE

Este driver é carregado na memória convencional de forma automática, no início do processo de boot, independente de declaração nos arquivos CONFIG.SYS ou AUTOEXEC.BAT. Sempre é executado, mas só permanece na memória quando o computador possui algum drive compactado.

DRVSPACE

Executa a mesma função que o DBLSPACE, porém, é ativado pelo arquivo CONFIG.SYS. Quando executado com o parâmetro /MOVE, faz a remoção do DBLSPACE da memória convencional, assumindo o seu lugar. Quando é executado o boot normal do Windows 95, o DRVSPACE mantém apenas um pequeno trecho na memória e ativa um driver de compactação de modo protegido, que fica residente na memória XMS, e não ocupa espaço na memória convencional nem na memória superior. Quando é executado um boot em modo MS-DOS, o DRVSPACE permanece na memória convencional ou na memória superior, caso exista UMB em quantidade suficiente (pouco mais de 50 kB).

Durante a inicialização do Windows 95, não importa se em modo normal ou em modo de segurança, ou com as opções que carregam o Prompt, será sempre carregado na memória o driver DBLSPACE.BIN. Este driver dá acesso aos drives compactados, caso existam. Caso o computador não esteja utilizando drives compactados, o DBLSPACE não será carregado. Esta carga é feita antes do processamento dos arquivos CONFIG.SYS e AUTOEXEC.BAT, dois quais é independente. A princípio, o seu carregamento será feito na memória convencional, ocupando pouco mais de 50 kB. Ao ser processado o arquivo CONFIG.SYS, é executada a seguinte linha de comando, que é inserida automaticamente quando instalamos um drive compactado:

DEVICEHIGH/L:0=C:\WINDOWS\COMMAND\DRVSPACE.SYS /MOVE

Este comando retira da memória convencional o DBLSPACE.BIN e instala um driver equivalente que opera na memória XMS, em modo protegido. Apenas um trecho com pouco mais de 1 kB permanece na memória convencional. Desta forma, a memória convencional terá mais espaço livre. Programas para MS-DOS que puderem ser executados através do Prompt do MS-DOS, em paralelo com o Windows 95, terão acesso aos drives compactados sem ocupação demasiada de espaço na memória convencional.

Quando um programa precisa ser executado em modo MS-DOS, ocorrerá um problema. O DBLSPACE.BIN será carregado na memória convencional, ocupando espaço que pode ser precioso para o programa (jogo) para MS-DOS que será executado. Isto ocorre tanto nos modos MS-DOS obtidos a partir do boot como no modo MS-DOS obtido através de um Prompt personalizado, do tipo apresentado na seção “Personalizando o modo MS-DOS”. O DBLSPACE.BIN será carregado na memória convencional e o DRVSPACE.SYS não fará o carregamento do driver de compactação de modo protegido, já que no modo MS-DOS o modo protegido não estará disponível. Nesse caso, o DRVSPACE.SYS passará a ocupar a memória superior (UMB), liberando o DBLSPACE.BIN da memória convencional. Desta forma, dependendo dos outros programas carregados na memória, é possível liberar mais de 600 kB para o modo MS-DOS, mesmo usando compactação de disco.

Se por um acaso o DRVSPACE.SYS não for carregado na memória superior, cheque se existe UMB livre em quantidade suficiente (60 kB são suficientes). Elimine alguns programas que não serão usados, como o KEYB, o DISPLAY e o DOSKEY. Se mesmo assim o DRVSPACE permanecer na memória convencional, retire o parâmetro “/L:0” da sua linha de comando, que ficará na forma:

DEVICEHIGH=C:\WINDOWS\COMMAND\DRVSPACE.SYS /MOVE

Este comando pode ser também usado em um arquivo CONFIG.SYS para um Prompt personalizado, como ensinado na seção “Personalizando o modo MS-DOS”.

Se de qualquer forma o DRVSPACE permanecer na memória convencional, existe ainda uma solução, mas caso seja aplicada, os drives compactados ficarão inacessíveis, até que seja executado um novo boot. No instante em que for apresentada a mensagem “Inciando o Windows 95”, ou então “O Windows 95 está iniciando a execução do programa em modo MS-DOS”, pressione a tecla F8. Será apresentado o menu de opções de boot. A seguir tecle Shift F8, e prossiga com o tipo de boot desejado. O uso do comando Shift F8 ativará o modo “confirmação passo-a-passo”. Cada um dos comandos envolvidos no boot será precedido de uma pergunta para que o usuário responda “S” ou “N”. Para fazer com que nem o DBLSPACE nem o DRVSPACE sejam carregados na memória, basta responder as suas respectivas perguntas com “N”. Isto fará com que nenhum dos dois seja instalado na memória, o que resultará em maior quantidade de memória convencional livre.