Qual é a diferença entre “memória virtual” e “espaço de troca”?

85

Alguém pode me deixar claro qual é a diferença entre memória virtual e espaço de troca ?

E por que dizemos que, para uma máquina de 32 bits, a memória virtual máxima acessível é de apenas 4 GB?

algo-geeks
fonte
@startblue how link fornecido por você é uma resposta à minha pergunta ..
algo-geeks
@ algo-geeks - Na verdade, não é uma resposta, mas acho que leva a uma resposta que pode ser bastante útil para este tópico. E está escrito no comentário, exatamente onde deveria estar, imho. :)
Muhamed Huseinbašić

Respostas:

113

Há uma excelente explicação de memória virtual no superusuário .

Simplificando, a memória virtual é uma combinação de RAM e espaço em disco que os processos em execução podem usar.

O espaço de troca é a parte da memória virtual que está no disco rígido, usada quando a RAM está cheia.

Quanto ao motivo de a CPU de 32 bits ser limitada a 4 GB de memória virtual, é bem abordado aqui :

Por definição, um processador de 32 bits usa 32 bits para se referir à localização de cada byte de memória. 2 ^ 32 = 4,2 bilhões, o que significa que um endereço de memória com 32 bits só pode se referir a 4,2 bilhões de localizações exclusivas (ou seja, 4 GB).

Viral Shah
fonte
1
Então RAM real = virtual - swap?
user48956
4
Esta resposta está completamente errada. Uma pessoa pode mapear a memória de um arquivo de 1 GB 100 vezes e usar 100 GB de memória virtual em uma máquina com apenas 1 GB de RAM. Não há como adicionar RAM e espaço em disco para obter os 100 GB de memória virtual que estaria em uso.
David Schwartz
@DavidSchwartz não realmente. O mapeamento de memória de um arquivo não o carrega na memória. Como tal, simplesmente fazer o mapeamento de um arquivo de 1 GB 100 vezes não usará 100 GB de nada.
Felix
1
@Felix Você está errado. Quando você diz que "não carrega na memória", está usando a palavra "memória" para significar memória física, ou seja, RAM. Estamos falando sobre memória virtual , não memória física. A memória virtual geralmente é criada quando e conforme necessário, não retirada de um pool fixo como a memória física.
David Schwartz de
Então, é apenas uma questão de relatório? Faz sentido contar quanta memória é mapeada? Como você nunca vai usar tanto, seja na RAM ou swap.
Felix
60

Existe alguma confusão em relação ao termo Memória Virtual e, na verdade, ele se refere aos dois conceitos muito diferentes a seguir

  1. Usando páginas de disco para estender a quantidade conceitual de memória física que um computador possui - O termo correto para isso é realmente Paging
  2. Uma abstração usada por vários OS / CPUs para criar a ilusão de cada processo em execução em um espaço de endereço contíguo separado.

Espaço de troca, OTOH, é o nome da parte do disco usada para armazenar páginas RAM adicionais quando não estiver em uso.

Uma percepção importante a se fazer é que o primeiro é possível de forma transparente devido ao hardware e ao suporte do sistema operacional do último.

Para entender melhor tudo isso, você deve considerar como a "Memória Virtual" (como na definição 2) é suportada pela CPU e pelo sistema operacional.

Suponha que você tenha um ponteiro de 32 bits (os pontos de 64 bits são semelhantes, mas usam mecanismos ligeiramente diferentes). Uma vez que a "Memória Virtual" tenha sido habilitada, o processador considera este ponteiro como composto por três partes.

  • Os 10 bits mais altos são uma entrada do diretório da página
  • Os 10 bits a seguir são uma entrada de tabela de página
  • Os últimos 12 bits constituem o deslocamento da página

Agora, quando a CPU tenta acessar o conteúdo de um ponteiro, ela primeiro consulta a tabela do Diretório da Página - uma tabela que consiste em 1024 entradas (na arquitetura X86 cuja localização é apontada pelo registrador CR3). A entrada do diretório da página de 10 bits é um índice nesta tabela, que aponta para a localização física da tabela da página . Esta, por sua vez, é outra tabela de 1.024 entradas, cada uma das quais é um ponteiro na memória física e vários bits de controle importantes. (Voltaremos a isso mais tarde). Depois que uma página é encontrada, os últimos 12 bits são usados ​​para encontrar um endereço dentro dessa página.

Existem muitos mais detalhes (TLBs, páginas grandes, PAE, seletores, proteção de página), mas a breve explicação acima captura a essência das coisas.

Usando esse mecanismo de tradução, um sistema operacional pode usar um conjunto diferente de páginas físicas para cada processo, dando a cada processo a ilusão de ter toda a memória para si (já que cada processo obtém seu próprio diretório de páginas)

Além dessa memória virtual, o sistema operacional também pode adicionar o conceito de paginação . Um dos bits de controle discutidos anteriormente permite especificar se uma entrada está "Presente". Se não estiver presente, uma tentativa de acessar essa entrada resultará em uma exceção de falha de página . O sistema operacional pode capturar essa exceção e agir de acordo. Os sistemas operacionais que suportam troca / paginação podem, portanto, decidir carregar uma página do Espaço de troca , corrigir as tabelas de tradução e, então, emitir o acesso à memória novamente.

É aqui que os dois termos se combinam, um sistema operacional com suporte para memória virtual e paginação pode dar aos processos a ilusão de ter mais memória do que a atual, paginando (trocando) páginas dentro e fora da área de troca.

Quanto à sua última pergunta (por que se diz que a CPU de 32 bits está limitada a 4 GB de memória virtual). Isso se refere à "Memória Virtual" da definição 2 e é um resultado imediato do tamanho do ponteiro. Se a CPU só puder usar ponteiros de 32 bits, você terá apenas 32 bits para expressar endereços diferentes, isso lhe dará 2 ^ 32 = 4 GB de memória endereçável.

Espero que isso torne as coisas um pouco mais claras.

Yonatan
fonte
12

IMHO é terrivelmente enganador usar o conceito de espaço de troca como equivalente à memória virtual. VM é um conceito muito mais geral do que espaço de troca. Entre outras coisas, a VM permite que os processos façam referência a endereços virtuais durante a execução, que são traduzidos em endereços físicos com o suporte de hardware e tabelas de páginas. Assim, os processos não se preocupam com a quantidade de memória física que o sistema possui ou onde a instrução ou os dados residem de fato na hierarquia da memória física. VM permite esse mapeamento. O item referenciado (instrução ou dados) pode ser residente em L1, ou L2, ou RAM, ou finalmente no disco, caso em que é carregado na memória principal.

Espaço de troca é apenas um local na memória secundária onde as páginas são armazenadas quando estão inativas. Se não houver RAM suficiente, o SO pode decidir trocar as páginas de um processo para abrir espaço para outras páginas do processo. O processador nunca executa instruções ou lê / grava dados diretamente do espaço de troca.

Observe que seria possível ter espaço de troca em um sistema sem VM. Ou seja, processos que acessam endereços físicos diretamente, ainda podem ter partes deles no disco.

SavorALinux
fonte
5

Embora o tópico seja bastante antigo e já tenha sido respondido. Ainda gostaria de compartilhar este link, pois esta é a explicação mais simples que encontrei até agora. Abaixo o link possui diagramas para melhor visualização.

Diferença chave: a memória virtual é uma abstração da memória principal. Ele estende a memória disponível do computador, armazenando as partes inativas da RAM de conteúdo em um disco. Sempre que o conteúdo é necessário, ele o busca de volta para a RAM. A memória de troca ou espaço de troca é uma parte da unidade de disco rígido usada para memória virtual. Assim, ambos também são usados ​​indistintamente.

A memória virtual é silenciosa, diferente da memória física. Os programadores obtêm acesso direto à memória virtual em vez da memória física. A memória virtual é uma abstração da memória principal. É utilizado para ocultar as informações da memória física real do sistema. Ele estende a memória disponível do computador, armazenando as partes inativas do conteúdo da RAM em um disco. Quando o conteúdo é necessário, ele o busca de volta para a RAM. A memória virtual cria a ilusão de um espaço de endereço inteiro com endereços começando com zero. É preferido principalmente por seu recurso de otimização, pelo qual reduz os requisitos de espaço. É composto de RAM e espaço em disco disponíveis.

A memória de troca é geralmente chamada de espaço de troca. O espaço de troca refere-se à parte da memória virtual que é reservada como um local de armazenamento temporário. O espaço de troca é utilizado quando a RAM disponível não é capaz de atender aos requisitos de memória do sistema. Por exemplo, no sistema de memória Linux, o kernel localiza cada página na memória física ou no espaço de troca. O kernel também mantém uma tabela na qual as informações sobre as páginas trocadas e as páginas na memória física são mantidas. As páginas que não são acessadas há muito tempo são enviadas para a área de swap. O processo é conhecido como troca. Caso a mesma página seja necessária, ela é trocada na memória física trocando uma página diferente. Portanto,

diferença-entre-memória-virtual-e-memória-swap

ram619
fonte
Embora este link possa responder à pergunta, é melhor incluir as partes essenciais da resposta aqui e fornecer o link para referência. As respostas somente com link podem se tornar inválidas se a página vinculada mudar. - Da avaliação
sem casaco,
Obrigado, melhorou o post.
ram619
0

"Memória virtual" é um termo genérico. No Windows, é chamado de Paginação ou paginação. No Linux, é denominado como Swap.

Hemanth Kumar R
fonte