Questão Uma máquina de sistema operacional de 32 bits pode usar todos os arquivos de 8 GB de RAM + 20 GB?


O que eu entendo sobre o SO de 32 bits é, o endereço é expresso em 32 bits, então, no máximo, o sistema operacional pode usar 232 = Espaço de memória 4G - suponho que a unidade é bytes, então 4GB.

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

De "usado" 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 essa 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 página não ajudará no desempenho. Isso é verdade?


96


origem


Como uma nota lateral, se você tiver mais de 4 GB de RAM, e apenas um sistema operacional de 32 bits, você pode criar um disco RAM. Este é um disco rígido na sua RAM, e você pode usar a RAM não utilizada / não endereçada para colocá-lo. - Simon Verbeke
Você não pode. Um ramdisk ainda precisa ser criado através do sistema operacional, se o sistema operacional não puder usar a memória, você também não poderá criar um ramdisk. (A menos que seu BIOS possa criar um ramdisk, o que é raro). - AVee
A resposta curta é sim". Embora geralmente um processo receba um espaço de endereçamento de 32 bits, o SO em si pode usar mais do que isso (por comutação de banco, como fizemos nos anos 80, ou pela escola de truques de extensão de endereço como PAE da Intel). um programa de cada vez, que pode ser composto por mais de um processo (o Chrome põe guias em diferentes processos.) E o próprio SO usará a memória para armazenar dados de discos fixos locais para que você tenha acesso mais rápido aos dados já usava. - rbanffy


Respostas:


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

O mais que o processo posso endereço é de 4 GB. Você é potencialmente confuso memória com espaço de endereçamento. Um processo pode ter mais memória que o espaço de endereço. Isso é perfeitamente legal e bastante comum em processamento de vídeo e outros aplicativos intensivos de memória.  Um processo pode ser alocado em dezenas de GB de memória e trocá-lo para dentro e para fora do espaço de endereço à vontade. Apenas 2 GB podem entrar no do utilizador espaço de endereço de cada vez.

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

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

Absolutamente isso não significa isso. Um único processo poderia usar mais memória do que isso! Novamente a quantidade de memória que um processo usa é quase completamente não relacionada à quantidade de espaço de endereço virtual que um processo usa. Assim como o número de carros que você guarda em sua garagem não tem nada a ver com o número de carros que você possui.

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

Meu ponto, caso não esteja claro, é que você deveria parar de pensar em memória e endereçar espaço como a mesma coisa, porque eles não são a mesma coisa.

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

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


145



Acho que esta resposta não resolve a questão em questão e quase engana em alguns pontos. - Rig
@Rig: Awesome, fico feliz em ouvir sua crítica construtiva. Agora é sua chance de escreva uma resposta melhor e nos mostrar o tipo de resposta que você acha que é menos enganoso e mais pertinente. - Eric Lippert
@BlueRaja: Eu suspeito que você esteja confuso 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. Memória é para todos os efeitos 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 é alocado ou não. - Eric Lippert
@BlueRaja: O artigo de Raymond Chen sobre o assunto pode ajudar. Ele mostra como alocar 4GB fora do arquivo de paginação; isso é memória que o processo possui. O processo não pode endereço a coisa toda de uma vez, claro, mas pode resolver qualquer página mapeando uma página em uma página de VM não usada, usando-a por um tempo e, em seguida, descartando-a. blogs.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx - Eric Lippert
Essa resposta teria ficado mais clara, Eric, se você tivesse explicitamente declarado que o Windows (e outros sistemas operacionais) permite que você “reserve” a memória sem realmente tê-la em seu espaço de endereço virtual e então responda à pergunta óbvia “como você enderece?". Eu acho que a resposta para isso é "há algum tipo de Page ID que você usa para se referir a ele, a fim de paginá-lo no espaço de endereço virtual, e então você pode endereçá-lo lá", mas eu não sei, e sua resposta não diz :) - Timwi


É verdade que a CPU só pode endereçar o máximo de 4Gb de RAM. No entanto, as CPUs atuais usam uma MMU (Unidade de gerenciamento de memória) para traduzir 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 isolamento de memória (processo A não pode manipular memória do processo B) até compartilhamento de memória (processo A pode acessar a mesma região de memória física como processo B e pode trocar dados dessa maneira).

Embora a CPU de 32 bits suporte apenas 4 Gb de memória por processo, ela pode endereçar até 64 Gb de RAM ao usar Extensão de endereço físico. Isso permite que o processo A use os primeiros 4 GB de memória, enquanto o processo B use os próximos 4 GB. No total, mais de 4Gb de memória física é usada, mas a quantidade total de memória que um único processo usa ainda é limitada a 4 Gb.

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 suporta PAE, você estará limitado a 4 GB de memória física (ou menos, dependendo de outros fatores).

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


67



isso significa que, se não suporta, então o que eu disse acima é correto?
O Windows XP suporta PAE (começando com o SP2, eu acho), mas ignora RAM além de 4GB mesmo quando a máquina suporta PAE; Vejo Aqui. Ele é usado para Prevenção de Execução de Dados baseada em hardware - o bit NX / XD está disponível apenas em uma entrada de tabela de páginas PAE, não em uma entrada de tabela de páginas "normal". - Wyzard
O chipset também pode ser um fator limitador de quanta memória pode ser suportada / usada independentemente de qual SO ou hack você escolher. - Moab
Gostaria de acrescentar que a razão pela qual as versões de consumidor de 32 bits do Windows não suportam> 4 GB de RAM foi que um número significativo de unidades de hardware não funcionou corretamente com tanta memória; e como na época> 4 GB de RAM era extremamente raro fora dos servidores / estações de trabalho de alto desempenho que a maioria das empresas que mantinham os drivers não estava interessada em gastar dinheiro para atualizar drivers que seriam usados ​​apenas por 0,1% de sua base de clientes. - Dan Neely
@DanNeely o sistema operacional faz ter suporte para a memória, é limitado devido a problemas de licenciamento. Embora eu concorde que esse é um hack de terceiros, é apenas para variantes de consumidor do Windows. Distribuições do Windows baseadas em servidor, a partir de Windows 2000, tiveram suporte para mais de 4GB de memória (ref. o primeiro link). - Breakthrough


Falando especificamente sobre as 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 hack do kernel para o Windows 7 para permitir que você use toda a sua memória RAM em 32 bits). No entanto, isso tem um custo, como você descreveu na primeira parte da sua pergunta.

Em um sistema operacional de 32 bits, o tamanho de um ponteiro (endereço de memória) é o mesmo que o tamanho da palavra da CPU, 32 bits, 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, portanto, cada aplicativo possui seu próprio espaço de memória.

Como cada ponteiro tem apenas 32 bits de largura, cada aplicaçãoOs ponteiros só podem endereçar até 4 GB de memória, mesmo que o sistema possa suportar mais de 4 GB de RAM. Tanto quanto eu sei, esta é a única ressalva para 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 específico pode apenas alocar / acessar até 4 GB.


De volta à sua pergunta, digamos que você tenha um programa que use 2 GB de RAM. Se você tiver 10 instâncias desse programa, isso significa 20 GB. Todos os 8GB de sua memória RAM serão usados, além de outros 12GB do arquivo de paginação. Então, sim, sob sistemas operacionais de 32 bits, é mais do que possível usar essa memória.

se esta máquina de 32 bits OS tiver 2GB de RAM e 2GB de arquivo de paginação, aumentando   o tamanho do arquivo de página não ajudará no desempenho. isso é verdade?

Aumentando o tamanho do arquivo de paginação geralmente não Aumente o desempenho (a menos que sua RAM e arquivo de paginação estejam configurados para o mínimo absoluto, ou configure tão baixo que seu computador seja constantemente burlado). No entanto, impedirá que o seu computador fique sem memória (virtual). Sempre que algo precisar ser removido para o arquivo de paginação, você já estará enorme acerto de desempenho (desde que o disco rígido é ordens de magnitude mais lenta, então sua memória RAM).


15



Dos 4 GB de espaço de endereço que cada processo recebe, apenas 2 GB estão realmente disponíveis para o programa usar; os outros 2GB são reservados para uso pelo kernel. o / 3 GB opção de inicialização pode permitir que alguns programas usem mais RAM. - Wyzard
@ 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 troca, o sistema operacional pode trocar de forma mais agressiva dados de programa não utilizados e usar a RAM livre para, e. cache de disco. Em algumas configurações, isso pode resultar em melhor desempenho. Há uma boa resposta no ServerFault sobre o motivo de um arquivo de paginação ser importante, que aborda esses problemas: serverfault.com/questions/23621/… - sleske
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 página que é muito pequeno para resultar em mais disco debulking do que ter um arquivo de página maior! Veja respostas e comentários em essa questão. - Mark Booth
@sleske Bom ponto, eu atualizei para ser mais do tipo "geralmente não". Embora eu concorde que pode fazer uma grande diferença em um servidor, para a maioria das pessoas, o ponto que eu estava tentando transmitir é que seria melhor obter mais RAM (desde quando você está paginando, o desempenho é muito lento como pode ficar). - Breakthrough


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

A famosa limitação de 4GB vem do fato de que a maioria dos softwares de PC usa 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 registrador a ser usado, e os registros são de 32 bits, você está limitado a 4 GB.


0



Isso está incorreto, como apontado em outras respostas anteriores acima. - ChrisInEdmonton
Você poderia apontar um fato específico que eu errei? - Dmitry Grigoryev
Um único processo pode usar mais de 4 GB. Especificamente, as respostas anteriores apontam "Um processo pode ter mais memória que o espaço de endereço". - ChrisInEdmonton
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 desmapear e remapear a memória, para que possa usar mais de 4 GB em um único processo, há apenas um pouco de contabilidade. Essa postagem do blog é mais 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 apenas o Linux de 64 bits. - ChrisInEdmonton
OK, minhas desculpas. Eu não pensei sobre a possibilidade de mmap memória extra. - Dmitry Grigoryev