Entenda como o mecanismo da Memória Virtual é implementado no sistema, através dos conceitos de paginação de memória e cache de disco.
A cada ano que passa, as tecnologias utilizadas no mundo da computação se desenvolvem 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 padrão não dá conta de rodar sozinha os mais importantes aplicativos ( navegador, suíte de 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.
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 aplicativos Firefox, 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áginas de Memória. Logo, continuando com o mesmo exemplo, a página de 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 tabela de páginas, 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.