A própria tabela de páginas possui um endereço virtual?

1

Se não, como o kernel constrói uma tabela de páginas ao criar um novo processo, e modifica uma entrada de tabela de páginas ao trocar / retirar uma página de um processo?

Acho que as instruções, em execução no modo de usuário ou no modo kernel, só podem usar um endereço virtual (que é convertido em um endereço físico pelo hardware interno da CPU) para acessar qualquer parte da RAM (e periféricos de mapeamento de memória ), a menos que a MMU esteja desativada.

Eu sei que o kernel é responsável por criar e manter tabelas de páginas enquanto a lógica de hardware interna da CPU procura na tabela de páginas (CR3 em x86 armazena o endereço base da tabela de páginas do processo atual, que é um endereço físico ) para converter um endereço virtual em um endereço físico.

Minha pergunta é: quando as instruções no código do kernel que tentam modificar o conteúdo de uma entrada da tabela de páginas estão sendo executadas, como o endereço virtual (se houver) da própria tabela de páginas é convertido em um endereço físico ? A MMU deve ser desativada durante esse tempo, para que não seja necessária tradução de endereço?

    
por xiaokaoy 13.07.2016 / 09:13

1 resposta

1

Estes devem responder à sua pergunta: Tutoriais de desenvolvimento de kernel do JamesM (leia a explicação em" 6.4.2. Definições necessárias ")
Paging - OSDev Wiki (leia a seção 6 Manipulação)

Resposta semi-original original:

O endereço físico do diretório de páginas atual 1 é armazenado no registrador da CPU CR3 .

A tradução de endereços virtuais é ditada pelo kernel, não há hardware interno criptografado na CPU.

Citações diretas de Endereços físicos e virtuais - Universidade de Waterloo

Relocação Dinâmica

  • A unidade de gerenciamento de memória (MMU) da CPU contém um registro de realocação .
  • Sempre que um encadeamento tenta acessar um local de memória (por meio de um endereço virtual), o valor do registrador de realocação é adicionado ao endereço de memória virtual - ligação dinâmica.
  • O kernel mantém um valor de realocação separado 1 para cada processo (como parte do espaço de endereço virtual); altera o registrador de realocação em todas as mudanças de contexto.
por 13.07.2016 / 10:44