Questão Gerenciamento de memória no Windows de 32 bits


Em um sistema de 32 bits é o espaço de endereço virtual de 4 GB para todo o sistema operacional ou é para o processo individual?

Se é para o sistema operacional inteiro, então o SO engana todo processo que ele tem seus próprios 4 GB de espaço de endereço?

Quando um processo é iniciado, ele utiliza todo o espaço de endereço virtual? É o que chamamos de confirmação ou reserva de endereço virtual?

Como podemos descobrir quanto espaço de endereço virtual é requerido por um processo? E se um processo exigir mais endereço virtual do que 3 GB (sistema de modo de usuário estendido).


0


origem


Se eu estou executando 3 processo em janelas de 32 bits que são projetados com requisitos de 1 GB de RAM cada. Haverá problema de alocação de memória em um sistema de 2 GB de RAM. Se não, como o Windows consegue isso? Todo o espaço de endereçamento virtual de um processo recebe um endereço físico na memória física ou é uma alocação lenta em que o mapeamento só é feito quando esse endereço virtual é acessado? - Aman Yadav
Pleasedonot expandir suas perguntas nos comentários; editar sua pergunta torna-a mais clara e completa. - Scott


Respostas:


Não, não há como enganar, você tem 4GB de RAM max para todo o sistema operacional.

Você pode habilitar o PAE, que às vezes, se funcionar, permite que o Windows reconheça mais de 4GB. Ainda longe de tanto quanto um sistema operacional de 64 bits.


0





Um espaço de endereço virtual de 4 gigabytes é criado por processo, que é compartilhado entre o SO e o processo. O sistema operacional decide o limite (que é fixo para todos os processos).
O sistema operacional existe em todo espaço de endereço virtual.
IOW o "process [tem] seus próprios 4GB de espaço de endereço" mas tem que compartilhá-lo com o sistema operacional e não pode ler, gravar ou executar a parte da memória virtual de propriedade do kernel.

Se eu estou executando 3 processo em janelas de 32 bits que são projetados com requisitos de 1 GB de RAM cada. Haverá problema de alocação de memória em um sistema de 2 GB de RAM. Se não, como o Windows consegue isso?

Um processo do usuário não tem o privilégio de requerer memória física que permanece residente (ou seja, não pode ser trocada).
Como os esquemas de memória virtual usam troca (com um arquivo de página ou espaço de troca em um dispositivo de armazenamento em massa), normalmente não há problemas executando vários processos de espaço de endereço virtual de 4 GB com memória física menor que o tamanho virtual.

É possível criar uma condição de falta de memória (OOM) se os processos criarem grandes demandas de memória e não houver memória física e espaço de troca suficientes.

Todo o espaço de endereçamento virtual de um processo recebe um endereço físico na memória física ou é uma alocação lenta em que o mapeamento só é feito quando esse endereço virtual é acessado?

Nunca há uma exigência de que um programa inteiro seja alocado para memória física e carregado na memória.
O mapeamento da memória física para um processo é baseado na necessidade.
Um processo só precisa ser residente na memória quando estiver realmente sendo executado e, no mínimo, independentemente de seu tamanho, somente uma página de código que é atualmente referenciada pelo registro do contador de programa e quaisquer páginas de referências de dados devem ser residentes reais .

Então sim há um "alocação lenta onde o mapeamento é feito apenas quando esse endereço virtual é acessado", também chamado de paginação de demanda.


0





Em um sistema de 32 bits é o espaço de endereço virtual de 4 GB para todo o sistema operacional ou é para o processo individual?

Cada processo tem seu próprio espaço de endereço virtual de 4 GB, dos quais 2 GB são para o espaço do kernel. No Windows de 32 bits, você pode usar LARGEADDRESSAWARE junto com /3GB opção de inicialização para reduzir o espaço do kernel para 1GB

O sistema operacional terá um barramento de endereços mais amplo PAE então, ele pode realmente endereçar mais de 4 GB de RAM.

Se é para o sistema operacional inteiro, então o SO engana todo processo que ele tem seus próprios 4 GB de espaço de endereço?

Não há como enganar aqui. Endereço virtual! = Endereço físico. Cada processo sempre tem seu próprio espaço de endereço de 4 GB, independentemente da quantidade de RAM física, para que não atrapalhe os dados de outros processos. Mesmo se você tiver apenas 128 MB de RAM, ainda terá um espaço de endereço de 4 GB. Isso porque os ponteiros em programas de 32 bits são sempre de largura de 32 bits. O espaço de endereço não é usado apenas para RAM, mas também para dispositivos MMIO eo processo também pode mapear um arquivo diretamente em seu espaço de endereço

Se o sistema tiver mais de 4 GB de RAM, o processo pode usar TEMOR para mapear endereços mais altos para uma janela de 4GB para que possa acessar toda a memória disponível. Ou também pode criar vários processos como Adobe Premiere CS4 a fim de utilizar mais do que o limite de memória de um único processo

Quando um processo é iniciado, ele utiliza todo o espaço de endereço virtual? É o que chamamos de confirmação ou reserva de endereço virtual?

O processo tem 2-4GB de espaço de endereçamento, mas é claro que depende do processo para decidir quanta memória ele quer. Se um processo for solicitado para mais memória do que a disponível, mas não foi realmente gravado nessa área, ele não consome nenhuma memória. Isso é chamado mais de cometer e é permitido no Linux mas o Windows não permite alocar mais do que o total de RAM + arquivo de paginação disponível

Como podemos descobrir quanto espaço de endereço virtual é requerido por um processo? E se um processo exigir mais endereço virtual do que 3 GB (sistema de modo de usuário estendido).

O espaço de endereço virtual é sempre 2/3/4 GB, você não pode ter mais do que isso, a menos que você mude para uma arquitetura com um endereço virtual de mais de 32 bits. Exigir mais de 3 GB de RAM é um problema diferente. Nesse caso, existem várias soluções

  • Execute o processo no Windows de 64 bits com LARGEADDRESSAWARE, nesse caso, pode acessar 4GB de memória
  • Usa mais de um processo como o exemplo do Premiere CS4 acima
  • Usar TEMOR como acima mencionado
  • Reescreva o algoritmo para que ele use menos memória, caso você tenha o código-fonte
  • Use a versão de 64 bits do programa

Se eu estou executando 3 processo em janelas de 32 bits que são projetados com requisitos de 1 GB de RAM cada. Haverá problema de alocação de memória em um sistema de 2 GB de RAM

Geralmente, não haverá problema, pois alguns deles podem ser movidos para o arquivo de paginação. Mas é claro que vai ser muito mais lento

Se não, como o Windows consegue isso? Todo o espaço de endereçamento virtual de um processo recebe um endereço físico na memória física ou é uma alocação lenta em que o mapeamento só é feito quando esse endereço virtual é acessado?

Todo o endereço virtual é não mapeado linearmente como um grande pedaço no espaço de endereço físico. Memória é mapeada em Páginas, então haverá muitos endereços indefinidos no espaço de endereçamento de um processo como este

pagetable

Além disso, algumas páginas físicas aparecerão em vários espaços de endereçamento virtual para que os processos possam compartilhar seus dados. Algumas páginas compartilhadas marcadas como somente leitura também serão clonadas automaticamente quando gravadas para economia de memória. Isso é chamado copiar-em-escrever

Você precisa ler sobre a memória virtual primeiro


0