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

0

Corrija-me, estou errado.

Q1) Meu entendimento é que no modo de 32 bits obtemos espaço de endereço virtual de 4 GB. 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 estiver recebendo seu próprio espaço privado de 4 GB. Se eu carregar 3 processos, um total de 12 GB de espaço de endereço. Eu terei um problema 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. Então, 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 um processo com endereço virtual de 4 GB pode rodar em um sistema operacional de 32 bits com 4 GB.?

=============================================== ============================== 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 (é correto dizer memória virtual do processo = espaço de endereço virtual do processo?)

    
por Aman Yadav 30.07.2018 / 16:45

2 respostas

0

Correct me I am wrong.

Com prazer. Você está pronto?

Q1) My understanding is that in 32 bit mode we get 4GB virtual address space.

Correto.

Is this because 32 bit Windows can only support 4 GB physical RAM.?

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 de volta quando as dimensões do hardware e os custos foram muito maiores do que hoje.

Q2) Every process get its own private 4 GB address space.

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

2GB user mode and 2GB kernel.

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

Does the process maps its entire code to user mode and the OS cmponents needed for that process to communicate with processor to execute the code are loaded in kernel mode.?

Esta questão só pode fazer sentido se "modo" for 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 SO não "se comunica com o 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) If a process is getting its own private 4GB space.

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

If I load 3 process, a total of 12 GB address space. Will I have performance issue as I have only 4 GB RAM.?

Não é provável, pois processos típicos raramente usam toda a memória virtual. E mesmo que existissem, há um repositório de armazenamento (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).

But as virtual address is designed to fulfill the need of process in case of less RAM.

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

SO my real question, when a process(single process application) loads does it maps it entire code to the 4GB virtual address regardless the application is currently executing only a certain part of entire code.

(Por que sua "pergunta real" não recebe 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.

What I understand is that when a process is started, all its code is loaded in virtual address space of 2GB user mode and rest 2GB it loads OS kernel files.

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

Now using page tables the virtual address is mapped to Physical address in RAM and disk.Is all the 4GB virtual address will be mapped to 4GB Physical RAM, and rest to the page file.?

Não, as tabelas de páginas mapeiam apenas 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).

If I refuse to use page file, does that mean that only 1 process with 4GB virtual address can run on 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 já vi mais de duas dúzias de processos sendo executados em um sistema Linux de 32 bits com apenas 512 MB de RAM de instalação e nenhum arquivo de troca.

    
por 30.07.2018 / 21:32
0

Q1: 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 trocará conforme necessário as páginas de memória referenciadas mais antigas.

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

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

por 30.07.2018 / 17:29