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

< Habilitando os UMB >


Prontos para os UMB? Então, antes, vamos fazer um pequeno resumo dos nossos objetivos para termos certeza que estamos falando a mesma língua. O DOS, gulosamente, reservou para seu uso exclusivo seis segmentos de 64K que começam no endereço A0000h, logo acima da memória convencional. Mas não os ocupa totalmente e deixa largos espaços livres. Estes espaços são os blocos de memória superior, ou UMB. Nosso objetivo é usá-los para carregar residentes e controladores de dispositivos, liberando para os programas o espaço que, de outra forma, eles usariam na memória convencional. Tecnicamente os UMB não estão nem na memória estendida (que só começa acima de 1Mb) nem na convencional. E muito menos na expandida. Mas, para usá-los, precisamos do Emm386.Exe. Que, a pesar da extensão .Exe, é um gerenciador de dispositivo. Especificamente, é quem permite usar memória estendida para simular expandida. Mas não só: também contém o código necessário para gerenciar os UMB. E, como sua função básica está ligada à memória estendida, só funciona se o gerenciador de memória estendida, o Himem.Sys, tiver sido previamente carregado. E apenas em um 386: se você tem um XT ou um 286, o paraíso dos UMB não está a seu alcance. Carregar o emm386.Exe apenas habilita a máquina para usar os UMB. Para que, efetivamente, eles venham a ser usados, faltam duas coisas: a primeira, acrescentar o parâmetro "UMB" ao comando "DOS" do Config.Sys. A segunda, enviar para lá os drivers e residentes que desejamos remover da memória convencional. Deixemos esta última providência para mais tarde. Fixemo-nos, hoje, apenas na preparação da máquina para que os UMB possam ser usados. Então, vamos lá: você vai precisar de editar seu Config.Sys. Não custa repetir: tenha à mão um bom disquete de boot para o drive A, faça antes uma cópia do Config.Sys para assegurar que se algo der errado você tenha um que funcione, e use um editor ASCII puro. E faça com que as primeiras três linhas do Config.Sys sejam: device=[via]himem.sys device=[via]emm386.exe ram dos=high,umb Expliquemo-las: [via] corresponde à via do diretório onde moram os arquivos Himem.Sys e Emm386.Exe. Geralmente, o diretório DOS do drive C, mas se você copiar os arquivos para o diretório raiz do drive C não precisa incluir a via. O parâmetro "ram" é indispensável: sem ele, o Emm386.Exe funciona apenas como simulador de memória expandida e não gerencia os UMB. A única hipótese de não inclui-lo, e ainda assim usar os UMB, é substitui-lo por "noems", cuja finalidade veremos adiante. E, por fim, não se esqueça da vírgula entre os parâmetros "high" e "umb" na última linha. Pronto. Isto feito, dê novo boot para verificar se tudo funcionou. Preste atenção às mensagens que surgem na tela durante o boot: procure, particularmente, por algo parecido com "Erro no Config.Sys linha x". Se nada apareceu, os UMB estão disponíveis. Podemos ter certeza? Mas claro! Lembra do programeto Mem.Exe que o DOS nos dá de graça? Pois vamos executá-lo, agora com seu parâmetro "/c", de "classify". Ele nos mostra quem está carregado onde e quanto ocupa, ou seja, exibe uma lista dos programas e drivers, seu tamanho e localização. Inclusive nos UMB. Então devemos estar preparados para uma longa lista, que provavelmente se estenderá por mais de uma tela. Para evitar a frustração de ver dados escorrerem tela acima antes que possamos lê-los, temos dois recursos: o primeiro, para um exame rápido. O segundo, para quando se pretende examinar os dados com calma. Se você deseja apenas verificar rapidamente como estão as coisas, use o comando: mem /c | more que encaminha a saída do comando Mem.Exe para o "filtro" more, incorporado ao DOS (se recebeu uma mensagem de arquivo ou comando inválido, verifique se o diretório DOS está na PATH de seu Autoexec.Bat). More mostra os dados tela a tela. Mas não permite voltar à anterior. Se você quiser examiná-los com calma, encaminhe a saída de Mem.Exe para um arquivo. Por exemplo, o comando: mem /c > memoria.txt faz com que a saída na tela seja encaminhada para o arquivo memoria.txt que será criado (ou sobrescrito, se já existir algum com o mesmo nome) no diretório corrente. Depois, você pode examinar o arquivo com um utilitário como o shareware List.Exe ou com o soberbo XTreeGold. Ou então pode imprimi-lo mediante o comando: copy memoria.txt prn: Pronto. Examine a saída de Mem.Exe. Ela se divide em duas listas e um conjunto de linhas com informações. A primeira lista, encimada por "Memória Convencional", mostra tudo o que está carregado abaixo dos 640K e seu tamanho em decimal e hexa, além dos blocos livres. A segunda faz o mesmo com a memória superior. Se você, ou aquele-amigo-que-entende-de-micro, já carregou alguma coisa nos UMB de sua máquina, o programa ou driver aparece na lista. Senão, só aparecem blocos livres. Repare principalmente nos tamanhos de cada bloco livre, pois logo vamos enchê-los com programas ou drivers. E note, após a segunda lista, que aparece em destaque o tamanho do maior bloco de memória superior disponível. O resto é igual à saída de Mem.Exe sem parâmetros, nossa velha conhecida. Por hoje, basta. E olhe que fomos longe: não apenas aprendemos como habilitar os UMB, como descobrimos a forma de garimpar as informações sobre a localização e tamanho dos programas que ocupam nossa memória e, sobretudo, quantos blocos de memória superior dispomos e de que tamanho são. Informações preciosas, já que nos basearemos nelas para ocupar os UMB. Aguarde.

B. Piropo