8 - Memória Virtual - Linux
Autor: Victor Hugo Bueno | Publicado: 2009-06-23T18:03:00-03:00

Olá pessoal,Neste Tópico iremos abordar um conceito muito importante e fundamental para os Sistemas Operacionais, a MEMÓRIA VIRTUAL.Tanto no Linux quanto no Windows o conceito de memória virtual está presente. A memória virtual foi criada porque, obrigatoriamente, um programa necessita passar pela memória principal para ser executado, e como quase sempre não é possível ter memória RAM suficiente para executar todo o programa da memória, é necessário executar esse programa em partes.A memória virtual é uma área de troca de dados que serve como uma extensão da memória principal, ou seja, a memória RAM. Por exemplo, se você possui 64 mb de RAM livre e quer rodar um programa que ocupa 70 mb de RAM, deverá carregar os primeiros 64 mb para rodar o início do programa e os 6 mb restantes serão armazenados na memória virtual, para depois serem copiados para a memória principal a fim de serem executados. Isso ocorre, é claro, à medida que a execução do programa for se desenrolando e o programa em questão (ou outros programas) liberarem a memória que ocupavam para o uso de outro programa. Dessa forma, temos um contínuo fluxo de dados entre o disco rígido (onde se localiza a memória virtual) e a memória RAM.Como o disco rígido possui uma movimentação mecânica de cabeças de leitura e gravação, ele é considerado lento se comparado à dispositivos de memória, cujo acesso às informações é totalmente eletrônico. É por isso que pouca memória RAM implica em usar muita memória virtual, que por sua vez, implica em usar muita leitura/escrita no disco rígido, que por sua vez implica em lentidão geral no sistema.A memória virtual foi um recurso introduzido nos PCs para permitir que o sistema use um arquivo dedicado especialmente para a tarefa de armazenar programas que são abertos pelo sistema e, dependendo da taxa de uso de cada um, haver uma troca entre o arquivo e a memória RAM, por este motivo, a memória virtual também é conhecida como “arquivo de troca”, “swap file” ou simplesmente “swap”.Pouca gente sabe realmente do que se trata a partição Linux-Swap (ou apenas Swap), existindo diversos mitos sobre o seu uso e a quantidade de espaço que deve ser disponibilizada para ela. Neste texto procuraremos definir conceitos de Memória Virtual, Swap e Paginação, para que sirva de consulta ou, no mínimo, um início para alguma pesquisa ou estudo do assunto, além de procurar esclarecer questões sobre o espaço a ser disponibilizado para a partição Linux-Swap bem como recomendar o tamanho deste espaço de acordo com a quantidade de memória RAM que um computador possua, tendo como base uma pesquisa feita na Comunidade Linux Brasil. Caso este seja seu único interesse, passe para a parte final do texto.Índice1. A Memória RAM 2. Memória Virtual 3. Swapping ou Paging (Paginação)? 4. No GNU/Linux 5. Qual deve ser o tamanho da partição Linux-Swap? 6. Observações adicionais 1. A Memória RAMPara que um computador funcione é necessário que os dados que serão trabalhados pelo processador estejam carregados na memória. Esses dados então são passados desta memória (a Memória RAM), para o processador, onde, após processados, serão movidos de volta para a Memória RAM. Assim o usuário pode executar programas e, consequentemente, utilizar a máquina. (Esta informação está correta, porém é superficial; Para mais detalhes ou um aprofundamento melhor consulte bibiliografia espefíca para Introdução à [Ciência da] Computação) Todo esse processo ocorre numa velocidade além da percepção do usuário, mas nem sempre a Memória RAM dá conta de carregar tudo o que está sendo executado em um computador, então se faz necessário o uso da Memória Virtual. 2. Memória VirtualA Memória Virtual é uma extensão da memória RAM. Quando a Memória RAM está ocupada, não sendo mais possível carregar dados nela, ou existem dados que não estão sendo utilizados por muito tempo, ocupando desnecessariamente a RAM, é utilizada a Memória Virtual, que pode ser um arquivo ou vários arquivos que armazenam dados dos processos carregados, ou seja, utilizando a Memória Secundária (de armazenamento), com uma partição dedicada ou utilizando a mesma partição do sistema, liberando a Memória RAM para que dados possam ser carregados nela. Esses dados carregados na Memória Virtual podem ser carregados na Memória RAM novamente conforme a necessidade de processamento dos mesmos. Então ocorre o processo de "troca" em que os dados ficam alternando entre a Memória RAM e a Virtual a fim de serem processados, executados, ou seja, para que o "programa" funcione, falando grosseiramente. Esse processo de troca é o chamado processo de SWAP e ocorre de modo imperceptível para o usuário, porém não substitui o uso da Memória RAM, pois a leitura do Disco-Rígido é mais lenta (centenas de vezes mais lenta) que a da Memória RAM. 3. Swapping ou Paging (Paginação)?É comum a confusão entre estes dois termos. O Swapping consiste em, quando necessário, mover o processo inteiro para a memória virtual, o que causa uma perda de performance pois o processo quando está "em espera", fica totalmente na Memória Virtual e quando estiver para serexecutado será totalmente carregado na Memória RAM. Já o Paging (Paginação) foi introduzido como uma otimização para o swapping onde apenas as partes ("pages", páginas) menos utilizadas ou ociosas do processo são movidas para a Memória Virtual, assim quando um processo é executado, apenas essas partes do processo são movidas, diminuindo a troca de dados entre a Memória RAM e a Memória Virtual. As primeiras versões do Unix System V (conhecidos também como SysV) funcionavam apenas com o swapping. Posteriormente (a partir do release 2.0, aparentemente) foi implementado o paging ao Unix System V. Os sistemas operacionais atuais não utilizam o processo de Swapping, apenas o Paging, mas é comum que se utilize apenas o termo Swapping (ou Swap) para a definição deste processo, sem a diferenciação entre os termos Paging e Swapping, tratando-os pelo mesmo nome, exceto quando se estudanda estes processos de maneira específica. 4. No GNU/LinuxO sistema operacional GNU/Linux pode trabalhar de duas formas: 1- Dedicando um ou mais arquivos de SWAP; 2- Dedicando uma ou mais partições inteiras à Memória Virtual, a partição SWAP (ou Linux-Swap). Cada um desses métodos tem uma vantagem: usar uma partição torna o processo de swap mais rápido; utilizar um arquivo torna mais fácil a alteração do tamanho do espaço disponibilizado (é mais fácil alterar o tamanho de um arquivo do que alterar o tamanho de uma partição, por isso é recomendável deixar um tamanho suficiente para a partição swap, garantindo que não faltará memória no computador). Lembrando que é possível usar mais de um arquivo e mais de uma partição, ou a combinação deles (arquivo e partição ao mesmo tempo). Alguns usuários confundem conceitos e tem o mau hábito de dizer que "a partição swap deve ter o dobro do espaço da Memória RAM", o que simplesmente não é verdade. É inviável e inútil que um usuário com 1 GB de RAM, por exemplo, disponibilize 2 GB para "nada", pois com 1 GB de RAM praticamente não se utiliza o swap. Esse usuário estaria jogando fora um espaço onde poderia até mesmo instalar uma outra distribuição. Bem como para uma máquina com 128 MB de RAM 256 MB de SWAP provavelmente será insuficiente. O mais correto a se fazer é experimentar, procurar informações com outros usuários e não ouvir conselhos de qualquer um.5. Qual deve ser o tamanho da partição Linux-Swap?Tendo como base uma pesquisa feita neste tópico da Comunidade Linux Brasil foi possível separar algumas situações de Quantidade de Memória RAM x Espaço para SWAP e fazer certas interpretações. Algo que é importante observar é que o uso de memória pode variar entre as distribuições em função dos pacotes, serviços habilitados por padrão, entre outras coisas, e que esses serviços e pacotes podem ser desabilitados ou removidos após a instalação dela tornando-a mais "leve". A primeira recomendação é saber se você estará utilizando uma distribuição "leve", que não requer muita memória quando recém-instalada, ou "pesada", que requer muita memória quando recéminstalada. 1) 128 MB a 256 MB de RAMEm computadores com 128 MB é mais provável que ocorram problemas por falta de memória, como lentidão ou até mesmo a finalização da execução de aplicações por falta de memória. Para máquinas com 128 MB, por exemplo, a regra do "dobro da RAM" não se aplica, pois pode ser insuficiente e arriscado. Para máquinas com valores no intervalo aproximado de 128 a 256 MB de RAM é comum (e recomendável) o uso de pelo menos 512 MB para a partição swap (falando em números aproximados pois esse número varia de 500 a 600 MB, chegando até a 1 GB em casos mais extremos e de muita dúvida e precaução por parte do usuário, ou seja, raras exceções, chegando a ser um exagero desnecessário) 2) 512 MB a menos de 1 GB de RAMPara computadores com valores no intervalo acima de 512 MB a abaixo de 1 GB de RAM o uso de 1 GB ou mais de swap é exagerado e desnecessário. Como já existe uma boa quantidade de RAM disponível, são poucos os casos em que se faz necessário o uso de um espaço muito grande pra swap, sendo comum o uso de 384MB de swap, lembrando que este valor é aproximado e varia de 256 a 512 MB, dependendo do uso.3) Mais de 1 GB de RAMO que surpreendeu com os dados obtidos foi que a grande parte dos usuários que possui 1 GB ou mais de RAM também disponibilizam um espaço para o swap. É comum que disponibilizem 200 MB do HD para o swap. Isso ocorre pelo fato de que os usuários não querem correr o risco de ter o desempenho comprometido por falta de memória (mesmo sendo pouco provável que ocorra), mas levando em consideração que, hoje em dia, 200 MB de um HD representa uma minúscula parte deste, o que torna viável a disponibilização de espaço para swap em máquinas com mais de 1 GB de RAM. 6. Observações AdicionaisObservação1: Recentemente eu tive um problema com um dos meus pentes de memória, ficando com apenas 512 MB, como eu não disponibilizei nenhuma partição para SWAP, acabei tendo alguns problemas ao compilar programas e utilizar a máquina ao mesmo tempo, sendo necessária a criação de um arquivo de SWAP. Moral da história: Era melhor ter disponibilizado pelo menos uns 256 MB de SWAP, mesmo que mantivesse desativado, sem entrada no fstab. Observação2: Mesmo que a máquina possua 1 GB de RAM ou mais, pode ser interessante disponibilizar um certo espaço para o SWAP já que essa "tecnologia" acaba, por muitas vezes, otimizando o uso da própria memória RAM, pois partes desnecessárias dos processos não ficam carregados nela e são movidos para o swap, assim a RAM fica com espaço disponível para outras funções (como cache). - Distribuição "leve" ou "pesada"Com base em informações fornecidas por usuários de diversas distribuições é fácil definir se estará usando uma distribuição considerada "leve" ou "pesada". Isso serve também para definir a quantidade de espaço a ser disponibilizada para o swap. Utilizando o esquema acima podemos definir que, caso a escolha seja uma distribuição "leve", podemos manter o mínimo de swap compatível com a Memória RAM da máquina. Caso a distribuição seja pesada, utilizamos a definição de espaço que está logo acima. Por exemplo: - Minha máquina possui 512 de RAM, que se enquadra na opção 2 de swap (em torno de 384 MB), mas eu escolhi uma distribuição considerada "pesada" pelos usuários, então eu devo passar a utilizar a opção 1 de swap (em torno de 500 MB); - Minha máquina possui 256 de RAM, que se enquadra na opção 1 de swap, mas eu escolhi uma distribuição considerada "pesada" pelos usuários, então eu devo considerar utilizar um espaço grande para o swap (em torno de 500 MB).Observação: Estes valores foram definidos com base em uma pesquisa com diversos usuários. É possível que nunca seja requisitado de sua máquina um uso "tão grande" de swap, porém os usuários tendem a aplicar duas regras nesse assunto: 1) É melhor previnir; 2) Atualmente "todo esse espaço" no HD representa uma quantidade insignificante do total deste, então não existem motivos para não disponibilizar se for levado em consideração a regra 1. Observação3: Existem relatos de que em casos de servidores (com máquinas boas, dignas de serem servidores) e/ou máquinas que são utilizadas basicamente para gerenciamento de banco de dados, pode existir uma perda de desempenho ao utilizar, desnecessariamente, um espaço para SWAP.