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?
Respostas:
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ê.
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.
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?
fonte
É 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.
fonte
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.
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).
fonte
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.
fonte
mmap
memória extra.