Vista de cima de programadores usando um PC de mesa em uma mesa de escritório

O que é memória virtual?

Memória virtual, definição

A memória virtual, uma técnica de gerenciamento de memória, permite que um sistema operacional (SO) sobrecarregado crie uma forma sintética de memória que lhe permite operar além de suas limitações.

Em essência, quando muitos programas de computador esgotam a memória disponível, a memória virtual permite que o SO utilize parte do espaço do disco rígido como uma extensão da memória de acesso aleatório (RAM).

Uma rápida analogia financeira descreve bem a situação: pense na memória física do seu computador como sendo o dinheiro na sua conta corrente pessoal. Tudo está bem e tudo funciona bem até você esgotar seus fundos. Quando você atinge o limite, o banco (que oferece proteção de cheque especial em contas correntes) libera um cheque especial (memória virtual) que cobre temporariamente as despesas da conta. 

Esse cheque especial contém limites óbvios. Primeiro, um limite financeiro controla o tamanho das despesas que o banco suportará. Além disso, um prazo limite determina por quanto tempo sua instituição financeira permitirá que a situação continue sem um aporte de capital emergencial em sua conta.

A memória virtual é um componente essencial dos sistemas de computador e permite um funcionamento geral mais fluido, mas é fundamental notar que não se trata de uma solução permanente e sustentável. Tem como objetivo fornecer uma quantidade de memória para situações de emergência. É como uma correção que dá conta do recado, mas provisoriamente.

A memória virtual é uma criação moderna da computação; em sua essência, ela simplesmente atualiza o antigo conceito de "pegar emprestado de Pedro para pagar Paulo", em que os recursos são transferidos de uma fonte para outra.

Como funciona a memória virtual

Uma unidade central de processamento (CPU) é o principal componente funcional de um computador e usa diferentes formas de memória. A RAM é uma forma de uso de memória mais rápida e de fácil acesso, mas não de tamanho ilimitado. O disco rígido da CPU, por outro lado, oferece bastante espaço de armazenamento, mas com tempos de acesso mais lentos.

A memória real é instalada na CPU. A memória real refere-se à memória RAM física, onde os dados são armazenados temporariamente para uso imediato e ativo. (Programadores também se referem à memória real como memória física ou memória principal.) Por outro lado, a memória secundária é considerada não volátil, o que significa que esses dispositivos de armazenamento mantêm os recursos de armazenamento mesmo quando a máquina é desligada e desconectada da fonte de energia. Isso difere da RAM, assim como várias outras variáveis de desempenho. 

Se os dois tipos fossem reconstituídos como automóveis, a RAM seria como um pequeno carro esportivo chamativo: veloz, caro e com espaço apenas para o motorista e um passageiro (pequena capacidade). A memória secundária é mais lenta e mais barata, como uma minivan econômica, com uma capacidade consideravelmente maior do que a memória primária oferece.

O disco rígido, também chamado de unidade de disco rígido (HDD), funciona como uma unidade combinada de armazenamento e leitura, enquanto o próprio disco rígido é o prato físico dentro do HDD, onde os dados magnéticos são codificados.

Na maioria dos casos, o uso de HDDs foi substituído por unidades de estado sólido (SSDs). O SSD realiza as mesmas funções, mas utiliza memória flash na forma de chips de memória não volátil que não exigem o uso de partes móveis. Os SSDs se comparam favoravelmente aos HDDs em virtude de sua velocidade robusta, perfil físico mais fino e consumo de energia reduzido.

A memória virtual funciona convertendo temporariamente a RAM que havia sido usada anteriormente, mas que permaneceu inativa e sem uso por algum tempo. O sistema operacional extrai os dados da RAM pouco utilizada e os coloca em um arquivo de troca (ou arquivo de paginação) na unidade de disco rígido.

Em seguida, o sistema operacional coloca a memória RAM recém-limpa em uso imediato. A memória adicional "emprestada" da RAM ajuda a executar vários programas do usuário sem problemas de desempenho do sistema ou lentidão perceptível na velocidade operacional.

IBM Power

Modernize e automatize com IBM Power

Joe Cropper, IBM Master Inventor, STSM, IBM Power Hybrid Cloud Platform, apresenta uma demonstração de como o IBM Power pode ajudar a modernizar suas aplicações.

O que é lógica de página?

Em relação aos dados, as páginas servem como moeda corrente e funcionam como o meio básico de troca. Em termos de gerenciamento de memória virtual, os módulos utilizados são páginas, a menor unidade de dados. As páginas são blocos contíguos (adjacentes) de espaço de endereço virtual.

As páginas geralmente vêm em um tamanho fixo. Originalmente, as páginas tinham um tamanho uniforme de 4 KB, e esse tamanho tem sido o padrão do setor. Recentemente, sistemas mais modernos estão usando um tamanho fixo maior, incluindo tamanhos de até 2 MB ou 1 GB, ou até maiores.

Na memória virtual, a maioria das páginas tem 4 KB ou 8 KB, dependendo da arquitetura seguida. Microsoft Windows, Linux e macOS da Apple são todos construídos em torno de um tamanho de página de 4 KB. O tamanho da página de memória virtual do UNIX é estruturado de acordo com a arquitetura de hardware específica de cada sistema, podendo ser um sistema de 32 bits ou de 64 bits. (Os sistemas UNIX geralmente dedicam de 3 a 4 GB a cada processo executado.)

Dentro de um sistema operacional específico, todas as páginas geralmente terão um tamanho de página. A exceção a essa regra envolve o particionamento dinâmico, que disponibiliza memória em tamanhos variados, com base na demanda específica. Ter páginas de tamanho idêntico facilita para um sistema operacional gerenciar todas elas em conjunto.

Além disso, devido ao tamanho semelhante, é mais fácil para o sistema operacional evitar a fragmentação externa, que ocorre quando bolsões de memória não utilizada se instalam entre os blocos de memória alocados. O resultado: pouca memória disponível para alocar em um único bloco utilizável.

Ao usar páginas, um SO pode mapear a memória lógica de um processo, traduzindo-a essencialmente para memória física não contígua na forma de quadros de página. Os quadros de página são blocos de memória física (RAM) que um sistema operacional usa como um tipo de contêiner para páginas de memória. O tamanho do quadro da página corresponde ao tamanho da própria página, seja 4 KB ou um tamanho maior.

Uma CPU cria endereços de memória virtual, que funcionam como uma referência de localização de memória que será usada pelos processos de software em execução nesse sistema operacional. Os programadores utilizam tabelas de páginas para rastrear e gerenciar quadros de página e para servir como a principal estrutura de dados. Uma entrada de tabela de páginas é utilizada para vincular um endereço virtual a um endereço físico no SO.

O número da página virtual (VPN) utiliza os primeiros 20 bits de um endereço virtual para identificar o espaço de endereçamento virtual dentro do espaço de memória virtual desse processo. O número de página identifica a página para que a unidade de gerenciamento de memória (MMU) possa recuperá-la de um quadro de memória física ou do disco.

Enquanto isso, a parte restante do endereço serve como deslocamento de página, que especifica a localização física exata dessa página dentro do sistema operacional, até mesmo a localização de bytes individuais.

Entendendo o thrashing e as falhas de página

Em um mundo perfeito, a RAM de um computador seria suficiente para executar programas. No entanto, a computação moderna se presta de forma excelente à multitarefa e à execução simultânea de vários programas, o que pode facilmente confundir o processo de alocação de memória. Essa demanda aumentada rotineiramente coloca demandas excessivas na memória disponível do SO.

Quando o espaço em disco disponível está totalmente esgotado, a memória virtual intervém para manter seus programas em execução. No entanto, essa extensão operacional geralmente tem um custo significativo: a velocidade operacional. A memória virtual opera em um ritmo mais lento do que a RAM física (porque as unidades de armazenamento demoram mais para serem acessadas). Assim, quanto mais memória virtual um sistema operacional consome, maior a probabilidade de um usuário ter uma experiência de queda no desempenho.

Essa forma de desaceleração no desempenho é chamada de "thrashing". Thrashing também é usado para se referir a um estado prolongado e disfuncional de operação em que um SO dedica a maior parte de sua capacidade de processamento para alternar dados para dentro e para fora da memória, em vez de executar código.

Outro tipo de fenômeno que ocorre regularmente é conhecido como "falha de página". Falhas de página ocorrem quando um programa funcional tenta acessar uma página de dados que não está mapeada em sua RAM física naquele momento.

Isso provoca uma interrupção de hardware, enquanto o manipulador de falhas de página no kernel do sistema operacional é ativado. O kernel do sistema operacional acessa os dados necessários de uma fonte de armazenamento secundária. Em seguida, o SO atualiza a tabela de páginas que rastreia todos os endereços virtuais e seus endereços físicos correspondentes antes de retornar à operação normal do programa.

Existem várias formas de falhas de página, cada uma classificada com base em sua gravidade percebida:

  • Falha de página menor: falhas de página menores (ou "leves") denotam uma situação em que uma página específica pode estar localizada na memória física, mas ainda não foi mapeada na tabela de páginas ou na memória compartilhada desse processo.
  • Falha de página maior: as falhas de página tornam-se graves quando uma página desejada não está localizada na RAM, o que significa que a página deve ser carregada do disco — garantindo que o processo de carregamento resultante demore mais tempo.
  • Falha de página inválida: o tipo mais grave de falha de página ocorre quando um processo tenta acessar uma área de memória não autorizada, e o sistema operacional bloqueia essa tentativa. A ação resultante (uma falha de segmentação) normalmente faz com que o programa interrompa a operação.

Métodos de paginação sob demanda

Uma forma de um SO otimizar o processamento é por meio da paginação por demanda. Essa técnica dispensa o carregamento antecipado de um programa inteiro e, em vez disso, o sistema operacional carrega apenas as páginas necessárias em um determinado momento.

Como ponto positivo, o sistema pode executar mais programas dessa forma. A desvantagem pode significar uma alta incidência de falhas de página (possivelmente levando à thrashing) causadas pela interrupção constante da operação do programa para recuperar páginas do armazenamento.

Várias metodologias baseadas em algoritmos são usadas em conjunto com a paginação por demanda. Cada um desses algoritmos de substituição de páginas lida com o problema com uma abordagem distinta: 

  • Alguns sistemas empregam uma abordagem de menos recentemente usado (LRU). Esse algoritmo de remoção de cache poderia ser descrito como “use-o ou perca-o”. O método LRU ajuda a otimizar o uso da memória, limpando os caches com base no tempo em que seus itens permaneceram sem uso. Se o cache atingir sua capacidade máxima, o item que permanecer no cache por mais tempo sem ser acessado será excluído.
  • O princípio FIFO (First-in-First-Out) refere-se à página mais antiga que foi carregada primeiro, em ordem sequencial. Se o cache ficar cheio, essa página será a primeira a ser removida.
  • A segunda chance revisa a decisão do algoritmo FIFO, verificando se a página prestes a ser removida não foi utilizada recentemente.
  • Como o próprio termo indica, "Optimal" denota a melhor situação possível, na qual um algoritmo (muito talentoso) verifica qual página tem a menor probabilidade de ser usada no futuro e a marca para posterior eliminação. Como o método Optimal exige uma previsão tão complexa, ele costuma ser considerado mais útil para discussões teóricas e planejamento do que para implementação prática.
Phill Powell

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

Soluções relacionadas
IBM Storage Fusion

Libere operações mais rápidas e resilientes unificando armazenamento, proteção e orquestração para cargas de trabalho de IA, VM e contêiner.

Conheça o IBM Storage Fusion
Soluções de virtualização da IBM

Otimize e expanda cargas de trabalho em ambientes virtuais e físicos com virtualização eficiente e flexível.

Explore as soluções de virtualização da IBM
Serviços de infraestrutura da IBM

Conhecimento técnico abrangente para seus servidores e armazenamento IBM Systems.

Explore os serviços de infraestrutura da IBM
Dê o próximo passo

Turbine sua infraestrutura com serviços de dados unificados e virtualização, possibilitando cargas de trabalho elásticas e de alto desempenho em ambientes híbridos.

  1. Descubra o IBM Storage Fusion
  2. Explore as soluções de virtualização da IBM