Sítio do Piropo

B. Piropo

< Coluna em Fórum PCs >
Volte
26/05/2008

< Vista: pra que tanta memória RAM? >


Na coluna anterior discutimos as razões que levam as versões de 32 bits de Vista (e apenas estas, já que Vista64 não padece desta limitação) a limitar em 3,25 GB o trecho de memória RAM disponível aos programas e código do sistema operacional. Hoje vamos seguir adiante discutindo as alegações de que Windows exige “memória demais” e, por mais memória que se acrescente, usa quase toda. E que, além disso, seu disco rígido parece não parar nunca, especialmente logo após a inicialização da máquina.

Começando pela alegação de uso “demasiado” de memória.

Quanta memória RAM deve se instalar em uma máquina que roda Vista (não importa a versão, se 32 ou 64)?

Embora a MS recomende 512 MB de RAM como
< http://www.microsoft.com/portugal/windowsvista/getready/systemrequirements.mspx >
requisito mínimo, para que se tenha um desempenho aceitável aconselho pelo menos de 1 GB de memória RAM. E para que o desempenho possa ser considerado bom, eu não recomendo menos de 2 GB de RAM instalada (quanto ao valor ótimo: para quem usa a versão de 32 bits, eu me arriscaria a sugerir 3 GB e para quem tem equipamento para desfrutar do Vista 64, talvez o ótimo se situasse em torno de 4 GB; mas este último ponto é apenas minha opinião baseada na observação de sistemas rodando as diversas versões de Vista).

É muito? Sem dúvida que sim. Comparado com o DOS 1.0, que se instalava com folga em 10 KB de RAM (isso mesmo, KB, de quilobytes) é realmente muito. Mas não foi sem razão que a cada nova versão do sistema operacional aumentavam as exigências relativas à capacidade de memória instalada. Sempre foi assim e a tendência acelerou-se com o advento das interfaces gráficas.

E comparando com o Windows XP? Bem, a
< http://www.microsoft.com/portugal/pe/products/os/winxp/requirements.mspx >
memória mínima recomendada pela MS para rodá-lo é 128 MB. Mas grande parte dos usuários acaba mesmo usando 1 GB.

Vista exige quatro vezes mais que isso. Para uma geração de diferença, sem dúvida é muito (embora, como veremos adiante, há razões para justificar o aumento). Mas será que isto representa um problema tão sério quanto o que se vem alegando?

Recentemente comprei memória RAM para uma de minhas máquinas. Não foi o “topo de linha” das memórias: foram dois módulos de memória DDR2 de 667 MHz, freqüência mais que suficiente para rodar Vista sem qualquer problema em uma boa UCP (no caso, um Athlon X2 4400+). Cada módulo (de marca conceituadíssima) com capacidade de 1 GB custou-me menos de sessenta reais em uma loja de varejo de um shopping de informática no Centro do Rio de Janeiro. Um valor que representa pouco mais de trinta dólares americanos.

Para quem acha que bom mesmo era a época em que sistemas operacionais ocupavam 10 KB de RAM, lamento informar que, naqueles tempos, para aumentar em apenas 128 KB (reitero: quilobytes, não megabytes) a capacidade instalada de memória RAM na placa-mãe de meu velho PC (para ser exato: de 512 KB para 640 KB visando aproveitar todo o espectro de memória útil) tive que gastar cerca de US$ 100, quase o dobro do que gastei há duas semanas para comprar os dois módulos de 1 GB de DDR2/667. Veja, na Figura 1, um pequeno trecho da placa-mãe de um velho XT com parte dos CIs de memória DRAM usando o encapsulamento tipo DIPP. Note que cada “chip” encaixa em seu soquete. O que se vê na figura são quatro CIs da Texas Instrument. Cada um deles é capaz de armazenar 8 KB (quilobytes). Na verdade, graças ao tipo de arquitetura usado na época, a capacidade exata é de 64 Kb (quilobits) já que cada chip armazenava um bit de cada posição de memória, mas isso são detalhes que não vêm ao caso. O que vem ao caso é que cada bichinho destes custava uma nota preta...

Figura 1: quatro circuitos integrados de memória DIPP.

Portanto é certo que Vista exige muita memória. Mas com os preços vigentes atualmente no mercado, definitivamente este não é o maior componente dos custos de um bom micro.

No que diz respeito aos requisitos mínimos de hardware, se você não tem máquina suficiente para rodar Vista (me refiro aqui a UCP e controladora de vídeo, por exemplo), por mais RAM que instale o resultado não valerá a pena. O sistema se comportará tão mal que você certamente se decepcionará com ele. Em casos assim, melhor é esperar um pouco até que os custos baixem – e baixarão, sem dúvida, tem sido sempre assim com hardware – até chegarem ao alcance do bolso do usuário e então montar ou comprar uma máquina que satisfaça as exigências. Mas se você tem máquina para rodar Vista, considerando os requisitos mínimos de hardware, não há de ser um micro “baratinho”. Só uma placa de vídeo minimamente compatível com o Aero custa tanto ou mais que quatro GB de RAM. Aumentar a capacidade de memória RAM de uma máquina assim para melhorar (e bota melhorar nisso) o desempenho de Vista me parece um dos investimentos de maior custo/benefício que se pode fazer em um computador. Quem tem uma máquina desta qualidade, roda Vista, insiste em não instalar um novo módulo de RAM e reclama que Vista exige muita memória, francamente, parece mais interessado em reclamar que em rodar Vista.

Portanto, concordo que Vista, efetivamente, exige muita memória. O que não quer dizer que eu esteja de acordo com a afirmação que Vista exige “memória demais”. Há uma sutil distinção entre “muito” e “demais” que deve ser levada em conta. Porque as exigências de Vista concernentes ao uso de memória RAM são conseqüência direta da forma pela qual esta memória é administrada. Uma administração que faz valer a pena o tanto de memória que exige a mais pela melhoria que confere ao desempenho global do sistema, acelerando a carga dos programas usados mais freqüentemente pelos usuários. Senão vejamos.

Mas antes convém lembrar como era antes. Nos tempos do Windows XP – que a maioria dos usuários ainda tem em suas máquinas.

Windows XP traz em seu código uma funcionalidade para acelerar a carga de programas usados mais recentemente. É uma coisa simples, quase rudimentar mas, dentro de suas limitações, bastante eficaz. Alguns o chamam de “cache na RAM” apesar de o conceito, embora similar, não ser exatamente o mesmo que o da memória cache. Trata-se meramente de não “descarregar” um programa da memória RAM quando ele é encerrado (para os puristas: sim, é um pouco mais que isso já que, qualquer que seja o sistema operacional, o trecho de memória RAM ocupado pelo código de um programa não é “limpo” quando o programa é encerrado; o que o Win XP realmente faz é preservar as referências que permitem localizar o programa na RAM caso ele seja invocado imediatamente após ter sido descarregado).

Se você usa Windows XP já deve ter notado os efeitos desta funcionalidade embora talvez não se tenha dado conta da razão pela qual a coisa acontece. Experimente. No meio de uma sessão de trabalho com Win XP, com alguns programas carregados na memória, abra um programa que ainda não foi usado naquela sessão. De preferência um programa “parrudo”, desses que ocupam um bocado de memória RAM (por exemplo, o Power Point ou algo equivalente). Repare (não precisa anotar, basta prestar atenção) no tempo que ele leva para ser carregado, ou seja, observe o intervalo de tempo decorrido entre você clicar no ícone do programa até ele se apresentar na tela pronto para uso. Trabalhe um pouco com ele, crie um arquivo qualquer (mas nem se dê ao trabalho de gravá-lo) e encerre (ou “feche”) o Power Point. Agora, gaste alguns minutos trabalhando com outro programa que já estava carregado na memória (ou seja, não “abra” um novo programa, use apenas os que já estavam “abertos” antes de você carregar o Power Point). Isto feito, abra novamente o Power Point e observe o tempo que ele leva para ser carregado. Notou a diferença? É brutal. A segunda carga é quase instantânea.

A razão disso é simples: na segunda vez o programa não foi efetivamente “carregado” na memória (ou seja, não foi necessário alocar memória para ele, ler seu arquivo executável em disco e copiar as instruções para o trecho alocado em RAM). E não foi porque já estava lá. Tudo o que Windows XP fez foi simplesmente “apontar” o ponteiro de instruções para o endereço de entrada do programa que, como já estava na memória, começou sua execução imediatamente.

Esta funcionalidade, a princípio, parece um tanto pueril. Afinal, ninguém fica carregando e descarregando sucessivamente o mesmo programa na memória. Mas pense em um usuário leigo que necessita examinar, por exemplo, diversos textos do Word em busca de um determinado parágrafo. Ele abre o Windows Explorer e localiza a pasta onde estão os arquivos a serem examinados. A partir daí ele clica sobre o primeiro arquivo, o que faz carregar o Word com o arquivo aberto para consulta. Não era aquele? A ação é quase instintiva: ele fecha o Word e clica sobre o arquivo seguinte. Ora, como o código do Word já está carregado na memória (mesmo tendo o usuário encerrado o programa), o sistema se limita a carregar o texto do segundo arquivo, economizando o tempo de carga do próprio Word. Pense na repetição desta ação algumas dezenas de vezes consultando diversos arquivos e perceba o substancial ganho de tempo que uma providência tão simples pode propiciar.

A idéia é boa, mas tem um defeito: se, durante duas consultas sucessivas a seus arquivos, o usuário abriu outro programa (quem sabe um programa gráfico para examinar melhor uma figura do texto) e seu código for carregado no trecho de memória primária previamente alocado para o Word, a próxima carga do Word será tão lenta quanto a primeira. E, evidentemente, todo o código vai para o limbo quando a máquina é desligada e a memória RAM, volátil por natureza, é inteiramente “limpa”.

Para contornar este segundo inconveniente, Windows XP implementou uma segunda funcionalidade denominada “prefetch”.

A coisa é igualmente simples: registrar em um pequeno banco de dados interno os programas que Windows carrega na memória durante a partida do sistema e gravar em uma pasta criada para este fim no disco rígido um conjunto de arquivos com extensão .Pf contendo informações e fragmentos destes programas. A idéia é reduzir o tempo de carga do sistema consultando a lista a cada inicialização e, antecipadamente, carregar na memória o código de cada programa mesmo antes que ele seja solicitado.

A idéia é igualmente boa, mas também tem seu defeito: ao longo do tempo, com a mudança de hábitos do usuário e a conseqüente alteração do grupo de programas que ele costuma invocar durante a inicialização, as entradas no banco de dados vão se acumulando, algumas delas correspondendo a aplicativos já há muito tempo não usados, e a operação de consultar uma lista de programas cada vez maior acaba por retardar, ao invés de acelerar, a carga do sistema. Eu mesmo publiquei no jornal O Globo uma < http://www.bpiropo.com.br/dwi20050808.htm > “Dica” sobre o tema (sugerindo “esvaziar” periodicamente a pasta que acumulava os arquivos .Pf ou a simplesmente livrar-se dela desabilitando o serviço) e Paulo Couto publicou uma coluna sobre o assunto aqui mesmo neste Fórum.

Em suma: a idéia de manter o código da memória e voltar a ele se o usuário solicitasse a recarga do programa era boa mas tinha o defeito de ser excessivamente volátil. E a idéia de listar os programas usados habitualmente era igualmente boa mas tinha o defeito de deteriorar o desempenho com o tempo por não atualizar a lista.

Pois bem: Windows Vista não somente ofereceu uma solução para ambas as dificuldades acima citadas como também as fundiu e estendeu sua ação não apenas aos programas usados durante a inicialização como também aos demais aplicativos usados habitualmente pelos usuários. Fez isto apelando para três novas funcionalidades denominadas, respectivamente, “Superfetch”, “Ready Boost” e “Ready Drive”.

Que, quando se entrelaçam, justificam a voracidade de Vista por memória.

Para entender as razões disto, vamos ver como funcionam.

Na próxima coluna, naturalmente.

 

B. Piropo