Memória máxima utilizável por um sistema RHEL 6 de 32 bits

5

Eu instalei um 32 bit RHEL OS em um sistema 64 bits .

Na página wiki de PAE :

The Linux kernel includes full PAE mode support starting with version 2.3.23, with Linus Torvalds mentioning PAE's 4 MB page support in 1.3.15,[18] enabling access of up to 64 GB of memory on 32-bit machines.

A versão atual do kernel em um dos servidores é:

2.6.32-431.17.1.el6.i686

Pergunta 1

A versão do kernel significa que, se eu adicionar outra 24 GB de RAM à minha RAM de 8 GB já existente, todo o 32 GB físico memória se tornará utilizável?

Atualmente, o sistema mostra que 8 GB RAM está disponível (eu uso o comando free para verificá-lo).

Questão 2

Ainda estou confuso sobre os conceitos de memória virtual.

Como o sistema de 32 bits usará a memória virtual?

Eu li que 32 bits RHEL usará a memória em pedaços de 3 GB.

Isso significa que, a qualquer momento, só pode haver um máximo de 3 GB na memória principal?

Eu acho que como tenho 32 GB de memória a qualquer momento 32 GB, os dados podem residir na memória principal. Particularmente, estou tentando entender a resposta de aqui :

Each process runs in its own address space, and being 32-bit restricts that address space to about 3GB for each process. The sum of the memory used by 32-bit applications is completely irrelevant. There is nothing to get around.

    
por Ramesh 10.07.2014 / 06:10

2 respostas

2

Bem, não espero uma resposta mais precisa do que a disponível em aqui .

What I understand about 32-bit OS is, the address is expressed in 32 bits, so at most the OS could use 2^32 = 4GB memory space

O máximo que o processo pode endereçar é de 4 GB. Você está potencialmente confundindo memória com espaço de endereço . 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. ser alocado 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 espaço de endereço usuário por 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 na sua garagem. Você precisa ter armazenamento auxiliar em outro lugar para armazenar pelo menos 46 deles; quais carros você guarda em sua garagem e quais você guarda no estacionamento na rua é com você.

Does this mean any 32-bit OS, be it Windows or unix, if the machine has RAM + page file on hard disk more than 4GB, for example 8GB RAM and 20GB page file, there will never be "memory used up"?

Absolutamente 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çamento virtual que um processo usa. Assim como o número de carros que você guarda em sua garagem não é relacionado ao número de carros que você próprio.

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 na memória e no espaço de endereçamento como a mesma coisa, porque eles não são a mesma coisa.

if this 32-bit OS machine has 2GB RAM and 2GB page file, increasing the page file size won't help the performance. Is this true?

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?

    
por 10.07.2014 / 06:29
1

A resposta de Ramesh está completamente errada. Um processo não pode ter mais memória do que espaço de endereçamento, e simplesmente porque não pode resolver isso !! Para usar mais de 4GB, o processo precisa acessá-lo pelo endereço, como usar ponters em C / C ++. Se você supostamente pode ter, por exemplo, 10 GB de RAM, como você pode dizer ao processo para acessar os dados localizados em 5 GB, se os seus ponteiros, em 32 bits, podem atingir no máximo 4 GB? É impossível. Toda a explicação dele está relacionada ao sistema operacional. Ele pode ativar certos blocos de 4 GB no máximo, de um pool de, digamos, 64 GB. Portanto, há sempre ao mesmo tempo um máximo de 4 GB e qualquer processo pode acessar no máximo 4 GB. Então, para um processo diferente, o SO pode ativar um bloco diferente de 4 GB do pool, mas o processo novamente será limitado a 4 GB. Na verdade, embora um ponteiro de 32 bits possa endereçar até 4 GB, o limite para um processo de 32 bits é de 3 GB.

    
por 26.10.2016 / 15:12