内核维持者一组自己使用的页表,驻留在主内核页全局目录(master kernel page global directory)。 系统初始化后,这组页表永远不会被任何进程或任何内核线程直接使用; 更确切地说,主内核页全局目录的最高目录项部分作为参考, 为系统中每个普通进程对应的页全局目录项提供模板。
当前进程页目录表地址的获取: pgd_paddr = read_cr3();
系统全局页目录表地址的获取:init_mm.pgd
vmalloc实现的中,有一步是修改该页表,建立虚拟地址与页描述符之间的映射,代码中获取全局页目录表用的是系统全局页目录表:
map_vm_area->vmap_page_range->vmap_page_range_noflush->pgd_offset_k
#define pgd_offset_k(address) pgd_offset(&init_mm, (address))