Processadores e endereços virtuais / físicos

2

Em suma, como eu entendo o gerenciamento de memória, o processador produz endereços virtuais. Esses endereços são convertidos para endereços físicos correspondentes usando a tabela de endereços por processo por MMU (com TLBs e falhas de página intermediárias, como e quando necessário).

Minha pergunta é que o processador sempre produz endereços virtuais? Em termos de espaços de endereço (usuário / kernel), modos de processador (usuário / kernel) e contextos (processo / sistema) quando todas as vezes o processador produz endereços físicos?

    
por Subhajit Kundu 22.09.2015 / 11:07

1 resposta

2

Supondo que estamos falando de x86 / x64: Uma vez que a paginação esteja ativada - isso é feito configurando o bit PG (bit 31) do CR0, e isso acontece muito cedo na inicialização - todos os endereços declarados pelo código de execução, incluindo os endereços do código, são interpretados como endereços virtuais.

Não é tanto que o processador produz endereços virtuais de alguma forma diferente da produção física, é apenas que uma vez que o bit esteja ligado, isso permite a tradução do endereço e daí em diante Cada endereço que sai do código é interpretado pela MMU como um endereço virtual.

O modo de usuário versus o modo kernel não importa, o contexto de processo vs. sistema não importa. Todos os endereços são virtuais e são traduzidos através das tabelas de páginas para endereços RAM (físicos). E uma entrada de tabela de páginas pode ter seu "presente de página" pouco claro, significando que a referência incorreria em uma falha de página.

Há apenas uma espécie de exceção que vem imediatamente à mente: O registrador CR3 contém o endereço físico da tabela de páginas de nível superior (a tabela PML4 em x64). E, claro, o código que manipula as entradas da tabela de páginas, etc., deve lidar com endereços físicos. Mas, esses endereços físicos nunca são realmente declarados, usados como destino de uma operação de busca ou armazenamento, executando código; eles são meramente calculados, armazenados e recuperados.

Não há como "escapar" disso e temporariamente afirmar endereços físicos. (Se você desativou o bit PG, a próxima instrução em seu fluxo de instruções não seria executada, a menos que seus endereços virtuais e físicos sejam os mesmos!) Preocupações semelhantes para o ponteiro da pilha e todos os outros endereços salvos que seu código precisa. ..)

Se você precisar fazer referência a um endereço físico específico, aloque uma página virtual anteriormente não usada e configure a entrada da tabela de páginas correspondente para especificar o número da página física desejada. É assim que o código do driver acessa o espaço de "registro" de E / S enquanto o endereçamento virtual está ativado.

    
por 05.12.2015 / 19:52