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?
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?
Respostas:
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).
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
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.
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.
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.
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,
"Memória virtual" é um termo genérico. No Windows, é chamado de Paginação ou paginação. No Linux, é denominado como Swap.