pagetable_init()根据物理内存初始化页目录项及页表项
static
void
__init pagetable_init (
void
)
{
unsigned long vaddr;
pgd_t *pgd_base = swapper_pg_dir;

#ifdef CONFIG_X86_PAE
int i;
//初始化整个页目录项(1024项)
for (i = 0; i < PTRS_PER_PGD; i++)
set_pgd(pgd_base + i, __pgd(__pa(empty_zero_page) | _PAGE_PRESENT));
#endif

if (cpu_has_pse) {
set_in_cr4(X86_CR4_PSE);
}
if (cpu_has_pge) {
set_in_cr4(X86_CR4_PGE);
__PAGE_KERNEL |= _PAGE_GLOBAL;
__PAGE_KERNEL_EXEC |= _PAGE_GLOBAL;
}
kernel_physical_mapping_init(pgd_base);
remap_numa_kva();
vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK;
page_table_range_init(vaddr, 0, pgd_base);

permanent_kmaps_init(pgd_base);

#ifdef CONFIG_X86_PAE
pgd_base[0] = pgd_base[USER_PTRS_PER_PGD];
#endif
}







//初始化整个页目录项(1024项)






















