Questão Mapeamento de endereço virtual e físico no Windows de 32 bits


Me corrija eu estou errado.

Q1) Meu entendimento é que no modo de 32 bits obtemos 4GB de espaço de endereço virtual. Isso ocorre porque o Windows de 32 bits pode suportar apenas 4 GB de RAM física.

Q2) Cada processo obtém seu próprio espaço de endereço privado de 4 GB. Modo de usuário de 2GB e kernel de 2GB. O processo mapeia todo o seu código para o modo de usuário e os componentes do SO necessários para que o processo se comunique com o processador para executar o código são carregados no modo kernel.

Q3) Se um processo está recebendo seu próprio espaço privado de 4GB. Se eu carregar 3 processos, um total de 12 GB de espaço de endereço. Terei problemas de desempenho, pois tenho apenas 4 GB de RAM?

Mas como endereço virtual é projetado para atender a necessidade de processo no caso de menos RAM. Portanto, minha verdadeira pergunta, quando um processo (aplicativo de processo único) é carregado, mapeia todo o código para o endereço virtual de 4 GB, independentemente de o aplicativo estar atualmente executando apenas uma parte do código inteiro.

O que eu entendo é que quando um processo é iniciado, todo o seu código é carregado no espaço de endereço virtual do modo de usuário de 2GB e o restante 2GB carrega arquivos de kernel do sistema operacional. Agora, usando tabelas de páginas, o endereço virtual é mapeado para Endereço físico na RAM e no disco. Todos os endereços virtuais de 4 GB serão mapeados para RAM física de 4 GB e serão repostos no arquivo de paginação. Se eu me recusar a usar o arquivo de paginação, isso significa que apenas 1 processo com endereço virtual de 4GB pode rodar em 32bit 4GB OS.

================================================== =========================== Obrigado pelas respostas anteriores.

Ainda estou um pouco confuso sobre como o espaço de endereço do usuário e do kernel é dividido.

1) O espaço de endereçamento do Kernel de 2 GB é compartilhado por todo o processo porque é todo o sistema e carregado no momento da inicialização? ou Todo processo recebe 2GB de espaço de endereçamento do kernel? 2) Eu li algum aplicativo mal escrito pode consumir todo o seu espaço de endereço. Isso significa que não há espaço para outros aplicativos serem executados agora em uma máquina de 4 GB? 3) Se um espaço de endereçamento do Kernel é compartilhado por todo o processo, ele fica sem espaço de endereço ou nunca funciona porque (eu acho) o endereço do kernel permanece fixo com base na arquitetura do SO e compartilhado por todo o processo. 4) Usando o switch USERVA, o endereço do Kernel é reduzido para 1 GB apenas para aplicativos com reconhecimento de endereço grande. Por que não faz isso para todo o processo se o espaço de endereço do kernel se 2GB (que eu acho) é compartilhado entre todo o processo. 5) Como exatamente nós diferenciamos a memória virtual de b / w e o sace virtual do endereço? Se um aplicativo precisa de 5GB de memória como por devloper não será executado na máquina de 32 bits com 2GB de endereço (É ok dizer memória virtual do processo = espaço de endereço virtual do processo?)


0


origem


a maior parte foi respondida na sua pergunta anterior Gerenciamento de memória no Windows de 32 bits. Endereços virtuais de 3 processos não adicionam até 12 GB, uma vez que não são mapeados linearmente, caso contrário, toneladas de memória seriam desperdiçadas quando um processo usa apenas 10 MB de RAM, mas consome toda a parte de endereço de 4 GB. Se você abrir o gerenciador de tarefas, verá que existem milhares de processos. Isso significa que o computador precisa de TBs de RAM? - phuclv


Respostas:


Me corrija eu estou errado.

Com prazer. Você está pronto?


Q1) Meu entendimento é que no modo de 32 bits obtemos 4GB de espaço de endereço virtual.

Corrigir.

Isso ocorre porque o Windows de 32 bits pode suportar apenas 4 GB de RAM física.

Não, o tamanho da memória virtual é independente do tamanho da memória física ou instalada.
Essas quantidades são as mesmas somente porque elas usam valores (para endereços) com 32 bits de largura. Um processador pode ser projetado para ter um tamanho de endereço virtual diferente de seu tamanho de endereço físico. IIRC que foi feito quando as dimensões e custos de hardware eram muito maiores do que hoje.


Q2) Cada processo obtém seu próprio espaço de endereço privado de 4 GB.

Sim, um espaço de endereço virtual.

Modo de usuário de 2GB e kernel de 2GB.

Não, "modo de usuário" refere-se ao estado operacional da CPU, isto é, modos de CPU. A memória não tem "modo de usuário" (nem "modo kernel").
A memória virtual é dividida em espaço do usuário e espaço do kernel.

O processo mapeia todo o seu código para o modo de usuário e os componentes do SO necessários para que o processo se comunique com o processador para executar o código são carregados no modo kernel.

Esta questão só pode fazer sentido se "modo" é substituído por "espaço".

O kernel é carregado na memória física durante a inicialização.
A execução do kernel é o que controla o sistema, por ex. inicialização e gerenciamento de processos.
O kernel é mapeado no espaço de endereço virtual de cada processo. É por isso que uma parte da memória virtual do processo é "espaço do kernel".

O código do programa e as bibliotecas (compartilhadas) são mapeados para a memória virtual no espaço do usuário.

O sistema operacional não "comunicar com processador" (nem qualquer processo).
O processador / CPU executa instruções. Não há "comunicação" com a CPU.
Um processo é um trabalho ou tarefa conceituada que aloca recursos, como memória (virtual e física) e tempo de CPU programado.
A única interação entre um processo e o processador / CPU é a execução de instruções para esse processo. A interação entre o kernel e o processador / CPU é a execução de instruções para esse kernel, e o roteamento de exceções e interrupções.


Q3) Se um processo está recebendo seu próprio espaço privado de 4GB.

Não há "E se". Cada processo recebe 4GB de memória virtual.

Se eu carregar 3 processos, um total de 12 GB de espaço de endereço. Terei problemas de desempenho, pois tenho apenas 4 GB de RAM?

Não é provável, como processos típicos raramente usam toda a sua memória virtual. E mesmo que existissem, há um armazenamento de backup (por exemplo, o arquivo de paginação ou o espaço de troca) para lidar com situações em que há menos memória física do que o espaço de endereço virtual (que é o motivo original da utilização da memória virtual).


Mas como endereço virtual é projetado para atender a necessidade de processo no caso de menos RAM.

Você provavelmente quer dizer memória virtual, não "endereço virtual".

Portanto, minha verdadeira pergunta, quando um processo (aplicativo de processo único) é carregado, mapeia todo o código para o endereço virtual de 4 GB, independentemente de o aplicativo estar atualmente executando apenas uma parte do código inteiro.

(Porque não é seu "pergunta real" dado um número?
Não tenho uma resposta definitiva, mas esperaria que ela carregasse todo o programa, a fim de realizar qualquer recolocação, bem como resolver qualquer vinculação externa (por exemplo, às bibliotecas).
Tudo o que é carregado tem que ser mapeado, isto é, memória física alocada.

O que eu entendo é que quando um processo é iniciado, todo o seu código é carregado no espaço de endereço virtual do modo de usuário de 2GB e o restante 2GB carrega arquivos de kernel do sistema operacional.

Mais uma vez você abusou "modo de usuário".
O carregamento do código do kernel é executado no momento da inicialização, não quando um processo é iniciado.

Agora, usando tabelas de páginas, o endereço virtual é mapeado para Endereço físico na RAM e no disco. Todos os endereços virtuais de 4 GB serão mapeados para RAM física de 4 GB e serão repostos no arquivo de paginação.

Não, as tabelas de páginas apenas mapeiam a memória virtual para a física (em unidades de páginas). Não há mapeamento para "disco". Isso soa como um equívoco comum de como o arquivo de paginação e a memória virtual funcionam.
O arquivo de paginação é um armazenamento de apoio. Ele mantém temporariamente o conteúdo das páginas de memória virtual que não podem ser residentes na memória (isto é, memória física alocada).

Se eu me recusar a usar o arquivo de paginação, isso significa que apenas 1 processo com endereço virtual de 4GB pode rodar em 32bit 4GB OS.

Não, porque normalmente um processo não usa todo o espaço de endereço virtual, portanto, não requer 4 GB de memória física.
Eu vi mais de duas dúzias de processos em execução em um sistema Linux de 32 bits com apenas 512 MB de RAM de instalação e nenhum arquivo de troca.


0





P1: Não, é porque um registrador de 32 bits pode conter apenas endereços únicos de 4GB.

Q2: Incorreto, não há divisão da memória do usuário no usuário e no kernel. O kernel não está no espaço de endereço do processo.

Q3: Sim, o Windows irá trocar conforme necessário as páginas de memória referenciadas mais antigas.

Pergunta real: Sim, um processo não pode iniciar sem o mapeamento para trocar espaço de toda a sua memória, para que possa ser trocado a qualquer momento, total ou parcialmente.

Para o resto, sugiro que você faça algumas leituras primeiro na Wikipédia:


0