Estou estudando Professional Linux Kernel Architecture e estou no Capítulo 3 Memory Management. Enquanto eu estudava, o próprio espaço de endereço do kernel é dividido em área de mapeamento direto, área vmalloc, área kmap e área de mapeamento fixa.
O que eu estou querendo saber é como abaixo.
A área de mapeamento direto (896 MB) do espaço de endereço do kernel na máquina de 32 bits pode ser acessada por funções como __va, __pa sem MMU?
se 1. for verdadeiro, então a tabela mestre da página do kernel (swapper_pg_dir) gerencia apenas 128 MB?
Enquanto estou estudando o código do kernel, encontrei diferença na função paging_init entre 32 bits e 64 bits. Em 32 bits, encontrei a função pagetable_init que inicializa e domina a tabela de páginas do kernel na função paging_init .
função paging_init em 32 bits
void __init pageit_init(void){
pagetable_init();
__flush_tlb_all();
kmap_init();
olpc_dt_build_devicetree();
sparse_memory_present_with_active_regions(MAX_NUMNODES);
sparse_init();
zone_sizes_init();
}
Mas em 64 bits, não consegui encontrar a função relacionada à tabela de páginas do kernel na função paging_init .
void __init paging_init(void)
{
sparse_memory_present_with_active_regions(MAX_NUMNODES);
sparse_init();
node_clear_state(0, N_MEMORY);
if (N_MEMORY != N_NORMAL_MEMORY)
node_clear_state(0, N_NORMAL_MEMORY);
zone_sizes_init();
}
O kernel de 64 bits não possui tabela de páginas do kernel mestre? Se for verdade, basta acessar a memória do kernel apenas por mapeamento direto?