Fonte: http://www.tecmundo.com.br/2190-como-funciona-a-memoria-virtual.htm
Como funciona a Memória Virtual? cada ano que passa, as tecnologias utilizadas no mundo da computação se desenvolvem cada cada vez mais, fazendo com que os aplicativos exijam cada vez mais recursos do sistema. Consequentemente, a quantidade de memória requisitada também aumenta na mesma proporção. Em grande parte dos computadores, a quantidade de memória RAM instalada por por padrão não dá conta de rodar sozinha os mais importantes aplicativos aplicativos ( navegador, suíte de de criação, criação, comunicadores instantâneos) ao mesmo tempo. Por esse e outros motivos, o mecanismo de Memória Virtual foi desenvolvido, visando compartilhar a RAM de maneira eficiente entre os programas. Logo, sua importância para a computação é inegável, principalmente por aproveitar ao máximo o uso da RAM. Neste artigo, vamos focar no modo como esse mecanismo da Memória Virtual funciona na atualidade. Apesar dos vários exemplos simplificados durante o texto, o assunto de modo geral é um pouco mais complexo que o normal, exigindo uma atenção extra durante a leitura. Antes de falar sobre a memória virtual em si, é importante rever alguns conceitos relacionados ao modo como os programas são armazenados na memória.
Como os programas são armazenados na memória física? Ao contrário do que muitas pessoas pensam, os programas ficam divididos em vários pequenos pedaços na memória física e não de
forma contínua. Por exemplo, a tabela abaixo demonstra um exemplo de como os aplicativosFirefox, Skype e Photoshop poderiam estar presentes em uma memória RAM de 8 posições:
Como é possível observar, as posições são ocupadas da seguinte forma:
Apesar da memória ser dividida em pequenos pedaços, cada programa é enganado pelo sistema operacional, pensando que a memória é contínua e exclusiva só para ele. Isso acontece por causa do mecanismo de Memória Virtual, que consiste em criar tabelas que relacionam posições virtuais e reais da RAM para um mesmo aplicativo.
Por exemplo, o layout de memória(muito simplificado) que o Firefox enxerga seria algo como o mostrado abaixo:
Olhando a tabela acima, o Firefox enxerga a memória de forma contínua (posições de 0 a 2) , enquanto a RAM trabalha de forma dividida em pequenos pedaços. Como é possível notar, a ordem dos dados não precisa ser a mesma, visto que a posição virtual 1 corresponde à real 4, e a posição virtual 2 corresponde à real 2.
Memória Virtual e Paginação A memória virtual foi um dos mecanismos mais interessantes criados até hoje no mundo da computação, fazendo com que programas compartilhem a RAM do sistema, pensando que possuem toda a memória disponível para uso próprio. Esse conceito engloba e utiliza vários outros menores, como cache de disco, paginação e tabela de páginas, os quais estão explicados logo abaixo:
Limitação da Memória Física e o Uso de cache de disco Sem o uso da memória virtual e da cache de disco, seria comum o fato da RAM acabar muito rápido, pois os aplicativos necessitariam mais espaço do que o disponível. Por exemplo, suponha um computador com 512 de RAM rodando o Windows Vista e o
Firefox. Por padrão, o Vista sozinho já ocupa aproximadamente 500 MB e o Firefox 100 MB. Fazendo os cálculos, é possível perceber que os dois aplicativos juntos já estouram a quantidade de RAM total (600 > 512). A solução mais natural é o uso da cache de disco, deixando armazenado na memória principal somente os trechos mais importantes do programa, enquanto que o resto do aplicativo fica no próprio disco HD( também chamado de memória secundária ). Por exemplo, suponha que dois arquivos do Microsoft Word (aa.doc e bb.doc) estejam abertos ao mesmo tempo, mas que somente o aa.doc esteja sendo editado no momento. Se você pensar um pouco, poderá observar que o documento que não está sendo editado (bb.doc) não precisa estar na memória principal a todo momento. Simplificando bastante, é mais ou menos isso que acontece, o documento editado (aa.doc) fica armazenado na RAM e o não editado (bb.doc) na cache do disco.
Para tornar mais eficiente seu gerenciamento, os dados são armazenados na memória em blocos, os quais são chamados Pág in as . Logo, continuando com o mesmo exemplo, a página de de Memória memória que contem os dados do documento aa.doc ficaria na RAM, enquanto que a página do bb.doc estaria somente no disco. Cada documento pode ter uma ou mais páginas de memória, o que implica no fato de que um mesmo aplicativo possui muitas delas ao mesmo tempo.
No exemplo acima, com a página do bb.doc somente no disco, a RAM fica livre para armazenar dados mais importantes de outros programas no espaço 3. Este é o conceito de cache de disco, utilizado na implementação da memória virtual.
Sistema de paginação de memória Até o exato momento, vimos os principais conceitos sobre memória virtual:
A memória física é compartilhada por vários aplicativos ao mesmo tempo; Cada programa enxerga uma versão virtual própria da memória, não correspondendo ao modo real; Os programas não podem ser carregados de maneira completa na RAM, portanto, é necessário armazenar parte deles na memória primária e outra parte na secundária, através do mecanismo de páginas. Depois de apresentados os conceitos acima, a paginação de memória é nada mais que a junção de todos eles. Neste mecanismo, cada programa possui uma tab ela d e p ág in as , a qual informa a posição exata de um página de memória qualquer ( na RAM ou no Disco). Em outras palavras, a tabela de páginas é a memória virtual que o programa
enxerga. Para entender esses conceitos de forma mais palpável, vamos elaborar um exemplo bastante simplificado de sua organização. Suponha que 8 arquivos estejam abertos no Word, possuindo os seguintes nomes: aa.doc, bb.doc, cc.doc, dd.doc, ee.doc, ff.doc, gg.doc e hh.doc. Além disso, suponha também que cada um dos documentos possui uma página de memória específica, com o mesmo nome do arquivos. Por motivos de simplificação, vamos usar uma RAM que armazena 8 páginas.
Continuando, as páginas aa.doc, ee.doc e gg.doc estão na memória, enquanto que as demais estão no disco. Logo, o mecanismo de paginação e Memória Virtual pode ser organizado da seguinte maneira:
Na tabela acima, podemos observar que as páginas do Word estão dividindo espaço na RAM com outras pertencentes a aplicativos como o Skype e o Firefox. A maioria dos sistemas operacionais reserva espaço no disco para efetuar a cache de disco durante a sua própria inicialização. Normalmente esta é uma região especial, não compartilhada com os demais arquivos armazenados no HD. No Windows, é possível reservar este espaço em qualquer partição já existente. Já no Linux, é necessário criar uma partição especial, chamada de Swap.
Substituição de páginas na memória Finalizando esta matéria, vamos falar sobre o mecanismo de substituição de páginas. Quando um programa necessita trabalhar com uma página que não está na RAM, acontece o que chamamos de Falta de Página. Deste modo, ele procura um espaço livre e passa a utilizá-lo. Caso toda a RAM esteja lotada, é necessário efetuar a famosa troca de páginas, que faz com que a nova página saia do disco e vá para memória, do mesmo modo que alguma outra presente lá saia da memória e volte para o disco. Existem vários métodos de escolher qual página será expurgada de lá, entre os mais usados, está o que determina que o conjunto de dados que está há mais tempo sem ser acessado deve dar lugar. Consequentemente, as tabelas de ambos os programas envolvidos na operação ( uma única tabela se as páginas forem do mesmo aplicativo), devem ser atualizadas coma as novas posições de memória das páginas. Este processo é realizado milhares de vezes por segundo, por vários programas ao mesmo tempo. Pequenos travamentos em aplicativos Sabe quando você está rodando algum aplicativo ou jogo pesado e pequenos travamentos ocorrem constantemente? Existem muitas possibilidades que o problema seja ocasionado por “Thrashing”, ou
seja, muitas páginas de memória precisam ser substituídas na mesma hora, confundindo o sistema e travando momentaneamente o aplicativo. Uma das principais maneiras de resolver este problema é adicionar mais memória RAM ao computador.
Fonte: gerenciamento/765467/
http://www.hardware.com.br/comunidade/funciona-
Como funciona o gerenciamento de memória no Linux O Linux tem uma forma bastante interessante de gerenciar a memória. O sistema de fato não necessita de muita memória para sua operação e conforme os programas vão sendo abertos, mais memória vai sendo alocada de forma mais eficiente. O sistema lida bem em casos de sobras de memória, utilizando os MBytes livres dos módulos como cache de disco. Cache de disco são porções da memória RAM usadas por arquivos e bibliotecas lidos do HD que têm uma maior probabilidade de serem acessados, uma espécie de Prefetch, o que melhora o desempenho do sistema . É fácil comprovar a eficiência o cache de disco: abra um programa como o Firefox ou o OpenOffice; o primeiro carregamento é demorado, certo? Agora feche o programa e abra -o novamente: levou muito menos tempo, né? Esse recurso está presente também no Windows e no Vista ele foi melhorado. Por isso não se assuste se no Ksysguard do KDE você verificar que sua memória RAM estiver quase que totalmente ocupada, mesmo com poucos programas abertos: é o cache de disco que está em ação usando parte da memória livre que você dispõe. Além do Ksysguard, temos o Monitor do sistema no Gnome como programas gráficos de monitoramento dos recursos do sistema. Via terminal temos o top e o free. O top detalha os processos em execução além de outras informações como o estado dos processos, memória consumida por cada um, uptime do sistema e recursos de memória. O free (o parâmetro -m exibe as informações em MBytes) exibe informações precisas sobre o uso dos recursos de memória do sistema. Vamos ver ele na prática, no meu caso tenho 2,25GB de RAM física, 2 GB de espaço em disco para a partição SWAP e poucos programas abertos. A distribuição usada é o Debian Etch Kernel 2.6.18-4.
No momento que foi tirada esta SS, 591MB de memória física estavam sendo utilizados, mas na verdade eu não tinha 591MB utilizados pelos programas abertos e pelo sistema em geral. 347 MB estavam sendo cacheados, ou seja, sendo usados para cache de disco (cached) e 51MB estavam sendo usado para
buffers de memória. Fazendo as contas, descontando os buffers e cache do sistema, a memória utilizada para o uso e manutenção do funcionamento do sistema no momento era de 193 MB: 591 (memória física utilizada) - 398 (buffers + cache) = 193 MB Se eu abrir o Monitor do sistema do Gnome (um front-end para o comando top), serão reportados 193MB em uso pelo sistema.
Ao contrário do Ksysguard, o Monitor do sistema do Gnome reporta a memória em uso, não incluindo a memória utilizada como cache de disco. Conforme mais memória é requisitada, o sistema passa a abrir mão do cache de disco e passa a mover arquivos e bibliotecas não usadas há algum tempo da memória RAM para a memória virtual ou swap, liberando memória física para os
aplicativos. Há um pequeno impasse no uso de memória SWAP no Linux. O Swap é visto com maus olhos por causa do Windows 98, que gerencia a memória virtual de forma totalmente errádica. No 98, mesmo com memória física sobrando o sistema teima em fazer swap, que é feito no arquivo Win386.swp, prejudicando o desempenho, já que a leitura dos dados da memória SWAP (que é feita em um arquivo no HD no caso do Windows) é mais morosa do que a leitura na memória RAM. Era possível corrigir essa deficiência com a instrução "ConservativeSwapfileUsage=1" no System.ini, mas mesmo assim o Windows 98 (e Me) é péssimo para gerenciar a memória. Na família NT o gerenciamento de memória é mais eficiente e o uso do arquivo de SWAP é mais racional, aliás no Windows NT4/2000/XP/2003/Vista e 2008 o arquivo de paginação (pagefile.sys) é utilizado também para uso interno do sistema, como as informações de despejo de memória. O Linux possui algoritmos refinados que administram o uso de memória SWAP somente quando necessário, especialmente no Kernel 2.6. Numa máquina com 512MB ou mais o uso de SWAP não é requisitado o tempo todo, o que não acontece numa máquina com 256 MB. Mesmo assim em algumas distros fazem o uso do SWAP em máquinas com fartura de memória, mesmo que em pequena quantidade. No caso dos dados movidos para o SWAP sejam de repente requisitados, haverá uma pequena demora na leitura, pois como já dito, a leitura no HD é mais demorada do que o acesso na memória física. Vou transcrever aqui um trecho de um dos livros do Carlos E. Morimoto que ensina como administrar o uso do SWAP apenas quando necessário. "... Ainda assim (ao usar uma distribuição com o Kernel 2.6), você pode configurar o comportamento do sistema em relação à memória SWAP através de um parâmetro do Kernel, definindo através do arquivo "/proc/sys/vm/swappiness". Este arquivo contém um número de 0 a 100, que determina a predisposição do sistema a usar swap. Um número baixo faz com que ele deixe para usar swap apenas em situações extremas (configuração adequada a micros com muita RAM), enquanto um número mais alto faz com que ele use mais swap, o que mantém mais memória RAM livre para uso do cache de disco, melhorando o desempenho em micros com pouca memória. Se você tem um micro com 1 GB de RAM e quer que o sistema quase nunca use swap, use: #
echo
"20"
>
/proc/sys/vm/swappiness
Em micros com 256 MB ou menos, aumentar o uso de swap mantém mais memória disponível para abrir novos aplicativos e fazer cache de disco. O programa que está sendo usado no momento e novos programas abertos ficam mais rápidos mas, em troca, programas minimizados a muito t empo são movidos
para a swap e demoram mais para responder quando reativados. Para aumentar o uso de swap, use: #
echo
"80"
>
/proc/sys/vm/swappiness
Para tornar a alteração definitiva, adicione o comando em algum arquivo de inicialização do sistema, como o "/etc/rc.d/rc.local" ou "/etc/init.d/bootmisc.sh". ..." Linux
Ferramentas
Técnicas
2ª
Edição
-
pág
112.
Pessoalmente, recomendo o uso de uma partição SWAP, mesmo que seja de 512MB para uso em casos de falta de memória, principalmente para as máquinas usadas em aplicações pesadas como edição de áudio, vídeo e imagem. Claro que em situações de fartura, digamos a partir de 1GB, a partição de SWAP pode ter uns 256 a 512MB reservados. Nos casos de máquinas que possuam menos de 512MB, recomendo o uso de SWAP com tamanho a partir de 1GB para que o sistema tenha para onde correr no caso de falta de memória física, já que na falta de memória RAM para os aplicativos e a ausência de uma partição SWAP, o sistema não terá para onde recorrer e os programas começarão a serem fechados por falta de memória; na pior das hipóteses o travamento do sistema nestas condições é inevitável. Caso você tenha se arrependido em não ter criado uma partição SWAP e agora se vê numa situação delicada, é possível criar um arquivo de SWAP na raiz do sistema. Digamos que você queira 512MB de memória SWAP, abra um terminal como root e digite: # # #
dd
if=/dev/zero
of=/swap mkswap swapon
bs=1024
count=524288 /swap /swap
O valor de "count" não precisa ser exato (524288 equivalem a 512MB), poderia ser o valor 500000 (500000 = ~488MB). Esta é uma solução temporária e menos eficiente, já que estamos criando um arquivo de swap que funciona de forma semelhante ao que é encontrado no Windows, embora de forma mais eficiente. Uma partição SWAP já é organizada especificamente para a tarefa de memória virtual.