Como um Kernel Linux de 64 bits gerencia tabelas de páginas para um aplicativo de 32 bits no modo de compatibilidade?

1

No momento, estou lendo o livro "Understanding the Linux Kernel". Lá o seguinte é dito:

For 32-bit architectures with no Physical Address Extension, two paging levels are sufficient. Linux essentially eliminates the Page Upper Directory and the Page Middle Directory fields by saying that they contain zero bits. However, the positions of the Page Upper Directory and the Page Middle Directory in the sequence of pointers are kept so that the same code can work on 32-bit and 64-bit architectures. The kernel keeps a position for the Page Upper Directory and the Page Middle Directory by setting the number of entries in them to 1 and mapping these two entries into the proper entry of the Page Global Directory.

Assim, a hierarquia da tabela de páginas de um kernel Linux de 64 bits com paginação de 4 níveis se parece com isso:

PML4 (Linux: PGD) -> 512 * PDPT (Linux: PUD) -> 512 * PD (Linux: PMD) -> 512 * PT

Assim, no texto diz-se que dois níveis são suficientes (como na paginação normal de 32 bits) e é por isso que o PUD e o PMD são "eliminados", mas qualquer uma dessas duas tabelas tem um comprimento e é mantido na ordem correta da seqüência.
No meu entendimento, isso significa que o PML4 (PGD) corresponde ao PD (PMD) e consiste em ponteiros diretos para o PT. Então o PUD e o PMD são "pulados". Mas isso não parece estar certo porque depois de uma mudança de modo no modo kernel a paginação tem que ser feita com tabelas de páginas de 64 bits para acessar as páginas do kernel. Além disso, esse esquema de mapeamento não permite mapear a memória (por exemplo, páginas do kernel) acima da borda de 4 GB. Uma outra explicação poderia ser que o endereço de 32 bits é estendido a zero para 64 bits e, para as duas primeiras tabelas na hierarquia, a primeira entrada é usada. Em seguida, você pode usar os bits restantes para selecionar a entrada nas duas tabelas restantes e o deslocamento dentro de um quadro de página. Mas isso também não parece estar certo porque a contagem de bits para a entrada dentro de cada tabela é diferente no modo de 32 bits e 64 bits. Isso também causaria problemas.
É por isso que tem que haver algo que não considerei. Espero que haja alguém que possa esclarecer as coisas.

    
por idlmn89 27.02.2018 / 02:27

0 respostas