conceitos de memória virtual

Estou confuso sobre alguns tópicos sobre memória virtual. Então, eu vou listá-los no sentido errado e fazer perguntas. Ao responder eu prefiro se você também listar alguma fonte onde eu possa esclarecer essa dúvida. Eu vou estar falando com referência a um arquivo executável do Linux Elf.

Ouvi dizer que todo processo tem o espaço de endereçamento de 4GB em um sistema de 32 bits. Quando eu verifiquei o objdump de um dos meus arquivo relocável executável eu vi que tinha limites de 00000000 para ffffffff. Também continha o espaço do kernel. Este é o espaço de endereço do arquivo.Essa é a memória virtual da qual falamos? Se sim, então eu li que o mecanismo de memória virtual permite que processos de tamanhos muito grandes sejam executados e que o tamanho do processo não seja limitado pelo tamanho da memória principal (podemos levar as páginas exigidas à memória principal sob demanda e paginação).Então, se a memória virtual é apenas 4GB, não limita o tamanho máximo de programas para 4GB? Além disso, verifiquei o objdump de outro arquivo e ele tinha o mesmo endereço (ou seja, 00000000 para ffffffff).Então o que isso quer dizer? Isso significa que nosso arquivo é algum tipo de arquivo relocável para o qual os endereços iniciais serão novamente adicionados(embora isso pareça absurdo, porque já é um arquivo de objeto relocável de executável).

Eu tinha lido que em uma memória onde a segmentação foi implementada, a cpu produz endereço virtual (lógico). Este endereço tem três partes - o segmento, o deslocamento dentro do segmento. Além disso, os segmentos que estão sendo discutidos aqui são código, dados, pilha etc.

No espaço de endereço do processo, esses segmentos estão localizados a partir de locais específicos. Então, quais são os conteúdos do endereço virtual da cpu?O endereço virtual produzido varia de 00000000 a ffffffff? Se sim entãoé o processo de acessar o conteúdo no endereço virtual, segue:

The segment part is looked up in the segment descriptor table to find the segment's
starting address in linear address space. Then the offset is indexed within the segment and
the resulting address is the linear address. Then, we look up the page table and map the
address to physical address. If the page is not currently in the main memory, it is 
brought. 

Novamente, surge o fato de que nenhum processo pode estar totalmente na memória principal a qualquer momento, porque então toda a memória será ocupada por apenas um processo.(como o espaço de endereço do processo é em si 4gb).

Além disso, se todo o processo tiver espaço de endereço de 00000000 a ffffffff, e mais de um processo puder existir na memória principal de cada vez, entãotodos os processos devem ter sua própria tabela de descritores de segmento que retorna o endereço do segmento no espaço de endereço linear

Eu li que o sistema operacional é carregado na memória principal na inicialização. EntãoQual é a diferença entre esse sistema operacional e o código do kernel no espaço de kernel de um processo específico? Além disso, todos os processos têm sua própria cópia do código do kernel no espaço do kernel?

questionAnswers(1)

yourAnswerToTheQuestion