Uma máquina com SO de 32 bits pode usar todo o arquivo de paginação de 8 GB de RAM + 20 GB?

98

O que eu entendo sobre o sistema operacional de 32 bits é que o endereço é expresso em 32 bits; portanto, no máximo, o sistema operacional pode usar 2 32 = espaço de memória 4G - presumo que a unidade seja bytes, ou seja, 4 GB.

Isso significa que se qualquer máquina com sistema operacional de 32 bits (seja Windows ou Unix) tiver mais de 4 GB no total de RAM + arquivo de paginação no disco rígido, por exemplo, 8 GB de RAM e 20 GB de arquivo de paginação, sua memória nunca será "esgotada" "?

Por "esgotado", quero dizer que aumentar a RAM ou o arquivo de paginação não ajudará no desempenho; é claro, é sempre possível que um aplicativo continue solicitando memória do sistema operacional, mas falhe.

Da mesma forma, se esta máquina com sistema operacional de 32 bits tiver 2 GB de RAM e 2 GB de arquivo de paginação, aumentar o tamanho do arquivo de paginação não ajudará no desempenho. Isso é verdade?

athos
fonte
2
Como observação, se você tiver mais de 4 GB de RAM e apenas um sistema operacional de 32 bits, poderá criar um disco de RAM. Este é um disco rígido em sua memória RAM, e você pode usar a RAM não utilizada / sem solução para colocá-lo no.
Simon Verbeke
10
Você não pode. Um ramdisk ainda precisa ser criado através do SO, se o SO não puder usar a memória, você também não poderá criar um ramdisk. (A menos que sua BIOS possa criar um ramdisk, o que é raro).
AVee
1
A resposta curta é sim". Embora geralmente um processo tenha um espaço de endereço de 32 bits para uso, o próprio sistema operacional pode usar mais do que isso (seja por troca de banco como fizemos nos anos 80 ou por escola de truques de extensão de endereço como o PAE da Intel. Além disso, lembre-se de executar mais de um programa de cada vez, que pode ser composto por mais de um processo (o Chrome coloca guias em diferentes processos) e o próprio sistema operacional usará a memória para armazenar dados em cache de discos fixos locais, para que você tenha acesso mais rápido aos dados já usado.
rbanffy

Respostas:

145

O que eu entendo sobre o sistema operacional de 32 bits é que o endereço é expresso em 32 bits; portanto, no máximo, o sistema operacional pode usar 2 ^ 32 = 4GB de memória

O máximo que o processo pode resolver é de 4 GB. Você está potencialmente confundindo memória com espaço de endereço . Um processo pode ter mais memória que espaço de endereço. Isso é perfeitamente legal e bastante comum no processamento de vídeo e em outros aplicativos com uso intenso de memória. Um processo pode receber dezenas de GB de memória e trocá-lo para dentro e fora do espaço de endereço à vontade. Apenas 2 GB podem entrar no espaço de endereço do usuário por vez.

Se você tem uma garagem para quatro carros em sua casa, ainda pode possuir cinquenta carros. Você simplesmente não pode mantê-los todos em sua garagem. Você precisa ter armazenamento auxiliar em outro lugar para armazenar pelo menos 46 deles; quais carros você mantém em sua garagem e quais carros você mantém no estacionamento da rua são com você.

Isso significa que qualquer sistema operacional de 32 bits, seja Windows ou unix, se a máquina tiver um arquivo de paginação RAM + no disco rígido com mais de 4 GB, por exemplo, 8 GB de RAM e 20 GB, nunca haverá "memória esgotada"?

Absolutamente, isso não significa isso. Um único processo pode usar mais memória que isso! Novamente, a quantidade de memória que um processo usa é quase completamente independente da quantidade de espaço de endereço virtual que um processo usa. Assim como o número de carros que você mantém em sua garagem não tem nenhuma relação com o número de carros que você possui.

Além disso, dois processos podem compartilhar páginas de memória não privada . Se todos os vinte processos carregarem a mesma DLL, todos os processos compartilharão as páginas de memória para esse código. Eles não compartilham espaço de endereço de memória virtual , eles compartilham memória .

O que quero dizer, caso não esteja claro, é que você deve parar de pensar na memória e no espaço de endereçamento como a mesma coisa, porque eles não são a mesma coisa.

se esta máquina com sistema operacional de 32 bits tiver 2 GB de RAM e 2 GB de arquivo de paginação, aumentar o tamanho do arquivo de paginação não ajudará no desempenho. Isso é verdade?

Você tem cinquenta carros, uma garagem para quatro carros e um estacionamento para 100 carros na mesma rua. Você aumenta o tamanho do estacionamento para 200 vagas. Algum dos seus carros fica mais rápido como resultado de você agora ter 150 vagas extras em vez de 50 vagas extras?

Eric Lippert
fonte
26
Acho que essa resposta não aborda a questão em questão e quase é enganosa em alguns momentos.
Rig
48
@ Rig: Impressionante, fico feliz em ouvir suas críticas construtivas. Agora é sua chance de escrever uma resposta melhor e nos mostrar o tipo de resposta que você acha menos enganosa e mais pertinente.
Eric Lippert
4
@BlueRaja: Eu suspeito que você está confundindo memória física com memória . A memória física é apenas uma otimização que permite acesso mais rápido à memória. Assim como os caches do processador são uma otimização que permite acesso mais rápido à memória. A memória é para todos os fins e propósitos espaço reservado no arquivo de paginação. Se uma determinada página no arquivo de paginação é (1) mapeada para um endereço de memória virtual ou (2) copiada do disco para a memória física é irrelevante para a questão de saber se está alocada ou não.
Eric Lippert
4
@BlueRaja: O artigo de Raymond Chen sobre o assunto pode ajudar. Ele mostra como alocar 4 GB do arquivo de paginação; essa é a memória que o processo possui . O processo não pode resolver a coisa toda de uma vez, é claro, mas pode endereçar qualquer página mapeando uma página em uma página de VM não utilizada, usando-a por um tempo e depois descartando-a. blogs.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx
Eric Lippert
3
Eric, essa resposta teria sido mais clara se você tivesse declarado explicitamente que o Windows (e outros sistemas operacionais) permitem "reservar" memória sem realmente tê-la em seu espaço de endereço virtual e, em seguida, responder à pergunta óbvia "como você pode enderece?". Penso que a resposta para isso é "existe algum tipo de ID de página que você usa para se referir a ela, a fim de paginá-la no espaço de endereço virtual e depois pode endereçá-la lá", mas eu não sei, e sua resposta não diz :)
Timwi
67

É verdade que a CPU pode endereçar apenas 4Gb máximo de RAM. No entanto, as CPUs atuais usam uma MMU ( unidade de gerenciamento de memória ) para converter endereços de memória específicos do processo em endereços de memória física.

Essa MMU é usada para todos os tipos de truques diferentes, desde o isolamento da memória (o processo A não pode manipular a memória do processo B) até o compartilhamento de memória (o processo A pode acessar a mesma região de memória física do processo B e pode trocar dados dessa maneira).

Embora as CPUs de 32 bits suportem apenas 4Gb de memória por processo, ele pode endereçar até 64Gb de RAM ao usar a Extensão de Endereço Físico . Isso permite que o processo A use o primeiro 4Gb de memória, enquanto o processo B usa o próximo 4Gb. No total, mais de 4Gb de memória física é usada, mas a quantidade total de memória que um único processo usa ainda está limitada a 4Gb .

O PAE é suportado no Linux desde a versão 2.3.23 do kernel e em alguns tipos de 32 bits do Windows Server, mas não no Windows XP, Vista ou 7 de 32 bits.

Se sua CPU não suportar PAE, você ficará limitado a 4 GB de memória física (ou menos, dependendo de outros fatores).

Observe que seu sistema operacional ainda pode despejar partes da memória física no disco (arquivo de paginação), independentemente da CPU que suporta o PAE. Isso garante que você possa iniciar vários processos que usam mais de 4Gb combinados. O único impacto que o PAE tem é se você pode manter o 4Gb do processo B na memória física enquanto executa o processo A.

Dave Webb
fonte
significa se ele não suporta, então o que eu disse acima está correto?
10
O Windows XP suporta PAE (a partir do SP2, acho), mas ignora a RAM além de 4 GB, mesmo quando a máquina suporta PAE; veja aqui . É usado para a prevenção de execução de dados baseada em hardware - o bit NX / XD está disponível apenas em uma entrada da tabela de páginas PAE, não em uma entrada "regular" da tabela de páginas.
wyzard
O chipset também pode ser um fator limitante de quanta memória pode ser suportada / usada, independentemente de qual SO ou hack você escolher.
Moab
5
Eu acrescentaria que a razão pela qual as versões de consumidor de janelas de 32 bits não suportam mais de 4 GB de RAM foi que um número significativo de unidades de hardware foi encontrado para não funcionar corretamente com tanta memória; e como na época> 4 GB de RAM eram extremamente raros fora dos servidores / estações de trabalho de ponta, a maioria das empresas que mantinha os drivers não estava interessada em gastar dinheiro para atualizar drivers que seriam usados ​​apenas por 0,1% da base de clientes.
Dan Neely
6
@DanNeely o OS faz ter suporte para a memória, ele é limitado devido a problemas de licenciamento . Embora eu concorde que esse seja um hack de terceiros, é apenas para variantes de consumidor do Windows. As distribuições do Windows baseadas em servidor, a partir do Windows 2000 , tiveram suporte para mais de 4 GB de memória (ref. O primeiro link).
Breakthrough
15

Falando especificamente sobre variantes do Windows de 32 bits, eles têm suporte para mais de 4 GB de RAM desde as variantes do Windows 2003 (e você também pode obter um hack do kernel do Windows 7 para permitir o uso de toda a sua RAM em 32 bits). No entanto, isso tem um custo, conforme descrito na primeira parte da sua pergunta.

Em um sistema operacional de 32 bits, o tamanho de um ponteiro (endereço de memória) é igual ao tamanho da palavra da CPU, 32 bits, o que permite (como você mencionou) um espaço de memória de 2 ^ 32 = 4GB. O Windows também adota uma abordagem de "memória virtual" para aplicativos, para que cada aplicativo tenha seu próprio espaço de memória.

Como cada ponteiro possui apenas 32 bits de largura, os ponteiros de cada aplicativo podem endereçar até 4 GB de memória, mesmo que o sistema possa suportar mais de 4 GB de RAM. Até onde eu sei, essa é a única ressalva em usar mais de 4 GB de RAM em um sistema operacional de 32 bits. No total, você pode ter muitos aplicativos usando mais de 4 GB de RAM combinados, mas qualquer processo em particular só pode alocar / acessar até 4 GB.


Voltando à sua pergunta, digamos que você tenha um programa que usa 2 GB de RAM. Se você possui 10 instâncias deste programa, são 20 GB. Todos os 8 GB de sua RAM serão usados, além de outros 12 GB do arquivo de paginação. Portanto, sim, em sistemas operacionais de 32 bits, é mais do que possível usar essa memória.

se esta máquina com sistema operacional de 32 bits tiver 2 GB de RAM e 2 GB de arquivo de paginação, aumentar o tamanho do arquivo de paginação não ajudará no desempenho. isso é verdade?

Aumentar o tamanho do arquivo de paginação geralmente não aumentará o desempenho (a menos que a RAM e o arquivo de paginação estejam definidos no mínimo absoluto ou tão baixos que o computador seja constantemente debitado). No entanto, impedirá que o computador fique sem memória (virtual). Sempre que alguma coisa precisar ser removida para o arquivo de paginação, você já estará sofrendo um grande impacto no desempenho (já que o disco rígido é uma ordem de magnitude mais lenta que a sua RAM).

Avanço
fonte
Dos 4 GB de espaço de endereço que cada processo obtém, apenas 2 GB estão realmente disponíveis para o programa usar; os outros 2 GB são reservados para uso pelo kernel. A opção de inicialização / 3GB pode permitir que alguns programas usem mais memória RAM.
Wyzard
1
@ Breakthrough: "Aumentar o tamanho do arquivo de paginação nunca aumentará o desempenho" Eu não acho que isso seja verdade. Por exemplo, se houver mais trocas, o sistema operacional poderá trocar mais agressivamente os dados não utilizados do programa e usar a RAM livre para, por exemplo, o armazenamento em cache do disco. Em algumas configurações, isso pode resultar em melhor desempenho. Há uma boa resposta no ServerFault sobre a importância de um arquivo de paginação, que aborda esses problemas: serverfault.com/questions/23621/…
sleske
2
Tenha cuidado com declarações gerais como "Aumentar o tamanho do arquivo de paginação nunca aumentará o desempenho" , é perfeitamente possível que um arquivo de paginação muito pequeno resulte em mais problemas de disco do que em um arquivo de paginação maior! Veja respostas e comentários nesta pergunta .
Mark Booth
1
@ Sleske Bom ponto, eu atualizei para ser mais do tipo "geralmente não". Embora eu concorde que possa fazer uma enorme diferença em um servidor, para a maioria das pessoas, o ponto que eu estava tentando entender é que seria melhor obter apenas mais RAM (já que, quando você está paginando, o desempenho é muito lento como pode obter).
Revelação
-1

Quando se diz que um processador é de 32 bits, significa que ele pode operar com números de 32 bits usando uma única instrução. Isso tem pouco a ver com a largura do barramento de endereços, que na arquitetura Intel tem 36 bits desde o lançamento do Pentium Pro em 1995.

A famosa limitação de 4 GB vem do fato de que a maioria dos softwares de PC usa o modelo de memória plana, onde cada byte de memória pode ser endereçado por um ponteiro. Como um ponteiro deve caber em um registro a ser usado, e os registros têm 32 bits de largura, você está limitado a 4 GB.

Dmitry Grigoryev
fonte
Isso está incorreto, como apontado em outras respostas anteriores acima.
21815 ChrisInEdmonton
Você poderia apontar um fato em particular que eu errei?
Dmitry Grigoryev
1
Um único processo pode usar mais de 4 GB. Especificamente, as respostas anteriores apontam "Um processo pode ter mais memória que espaço de endereço".
21815 Chris
2
Veja, por exemplo, blog.superuser.com/2011/04/23/… Agora, certamente, você não pode usar mais de 4 GB simultaneamente, mas um único processo pode remover o mapeamento e remapear a memória, assim como usar mais de 4 GB em um único processo, há apenas um pouco de contabilidade. Essa postagem do blog é bastante específica do Windows. Eu executei servidores de banco de dados com> 4 GB de memória alocada, em instalações Linux de 32 bits. Hoje em dia, é claro, você executaria o Linux de 64 bits.
21815 ChrisInEdmonton
1
OK, minhas desculpas. Eu não pensei sobre a possibilidade de mmapmemória extra.
Dmitry Grigoryev