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

< Método e Loucura >


Carregar programas e drivers nos UMB é uma tarefa muito parecida com um quebra-cabeças: tenta-se uma forma, testa-se o resultado e, se não deu certo, experimenta-se outra. E continua-se tentando até chegar à uma solução adequada. Porém, como em todo quebra-cabeças, algum método - e alguma loucura - sempre ajudam.

A loucura fica por sua conta. Mas posso contribuir no que toca ao método. Que se baseia em uma idéia simples: vá com calma e tente jogar nos UMB todos os drivers e residentes que ocupam sua memória convencional, um de cada vez. Se for bem sucedido com o primeiro, teste-o. Rode outros programas e veja se tudo corre bem. Deu certo? Carregue mais um e repita o processo.

Mas não escolha ao acaso: a ordem é importante. Pois o DOS usa um método curioso para povoar os UMB: como um simpático gerente de hotel que quer ver os hóspedes permanentemente satisfeitos, sempre oferece a maior acomodação disponível na hora em que o freguês se apresenta para o check-in. Ou seja: você não pode escolher diretamente em que bloco os programas ou drivers serão carregados, já que cada um vai sempre para o maior bloco livre no momento da carga. Mas pode escolher indiretamente, alterando a ordem em que eles aparecem no Config.Sys e Autoexec.Bat. Um trabalho paciente e meticuloso pode fazer com que eles acabem ocupando os blocos desejados. Assim você consegue otimizar a ocupação dos UMB e "espremer" entre os 640K e 1Mb o maior número possível de drivers e residentes. É por isso que as informações fornecidas por Mem.Exe e seu parâmetro "/c" são tão preciosas.

Então vamos por partes. Neste momento, presumo que Himem.Sys e Emm386.Exe (com seu parâmetro RAM) já ocupam as duas primeiras linhas de seu Config.Sys, seguidos do comando "DOS=HIGH,UMB". E que todos os drivers e residentes foram incluídos no Config.Sys e Autoexec.Bat e já foram devidamente testados na memória convencional. Então comande "mem /c", como já aprendemos, e examine a saída. Todos os programas e drivers devem aparecer na memória convencional. E todos os blocos de memória superior devem estar livres, exceto aquilo que foi usado pelo sistema (afinal, não se esqueça que os seis segmentos dos UMB são de fato e de direito pertencentes ao sistema - o que estamos nos preparando para fazer nada mais é que uma invasão da propriedade alheia).

Procure pelo maior driver ou residente (use as informações de Mem.Exe - não se deixe enganar pelo tamanho do arquivo em disco, que tem muito pouco a ver com a área de memória efetivamente ocupada depois da carga). Agora, procure pela linha que exibe o tamanho do maior UMB livre. Veja se o maior programa ou driver "cabe" nele. Cabe? Então vamos tentar carregá-lo ali.

Se for um driver, e se não depender da carga de outros drivers antes dele, carregue-o com o comando "devicehigh" no Config.Sys, fazendo com que sua linha venha imediatamente depois da que executa o comando "DOS=HIGH,UMB", ou seja, que ele venha a ser o primeiro driver carregado logo após o Himem.Sys e o Emm386 (se depender de outros drivers, evidentemente estes deverão ser carregados antes e neste caso você terá que começar por eles). Vamos supor que seja o Display.Sys e que use os parâmetros abaixo. O início de seu Config.Sys ficará mais ou menos assim:

device=himem.sys

device=emm386.exe ram

dos=high,umb

devicehigh=display.sys con:=(ega,850,2)

Se for um residente, você tem duas alternativas: ou usa o comando "install" para carregá-lo do Config.Sys, ou primeiro resolve o problema dos drivers e deixa os residentes para depois, carregando-os em ordem do maior para o menor com os comandos "loadhigh" no Autoexec.Bat. O que talvez seja a melhor tática.

Pronto? Editou e salvou o Config.Sys? Muito bem. Agora, pegue aquele disquete de boot, coloque-o ao alcance da mão, erga uma prece aos deuses da micraria e dê um boot, prestando atenção às mensagens exibidas na tela durante a carga dos drivers.

Se tudo correu bem, não houve mensagem de erro e o bicho foi para os UMB. Rode novamente "mem /c" para ter certeza. Verifique se de fato o driver agora consta na memória superior. Aproveite e anote o novo tamanho do maior bloco livre - pois o panorama mudou e parte do anterior agora está ocupado. E antes de tentar carregar o próximo, teste a máquina para ver se a coisa funcionou: o simples fato de ter sido carregado nos UMB não quer dizer que ele, ou os demais programas, irão se comportar direito. Rode seus programas. Se usa Windows, carregue-o e veja se funciona (é muito comum que Windows, que também usa parte da área onde se localizam os UMB, se recuse a rodar após a carga de um driver ou residente nesta mesma área). Tudo bem? Excelente: agora, vamos aos demais.

Repita o processo com o próximo. Primeiro com os drivers do Config.Sys, depois com os residentes do Autoexec.Bat. Continue até que todos tenham subido para os UMB ou que a área livre nos UMB tenha se esgotado. Se tudo correu bem, você liberou um bocado de memória convencional. E se não correu? Bem, semana que vem veremos como proceder no caso de eventuais desastres. Aguarde.

B. Piropo