打印内核的页表条目

时间:2013-11-20 06:57:25

标签: kernel

具有4级页表的虚拟内存映射:

0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm
ffff800000000000 - ffff80ffffffffff (=40 bits) guard hole
ffff880000000000 - ffffc7ffffffffff (=64 TB) direct mapping of all phys. memory
ffffc80000000000 - ffffc8ffffffffff (=40 bits) hole
ffffc90000000000 - ffffe8ffffffffff (=45 bits) vmalloc/ioremap space
ffffe90000000000 - ffffe9ffffffffff (=40 bits) hole
ffffea0000000000 - ffffeaffffffffff (=40 bits) virtual memory map (1TB)
ffffffff80000000 - ffffffffa0000000 (=512 MB)  kernel text mapping, from phys 0
ffffffffa0000000 - fffffffffff00000 (=1536 MB) module mapping space

我知道内核尝试将物理地址直接映射到从PAGE_OFFSET开始直接映射区域的虚拟地址

ffff880000000000 - ffffc7ffffffffff (=64 TB) direct mapping of all phys. memory

但我不知道内核中的代码保持页表管理这个直接映射区域的位置,以及如何在这个直接映射区域中打印出4级页表的所有页表项。你知道怎么打印吗?

1 个答案:

答案 0 :(得分:0)

内核为每个正在运行的进程维护task_structsched.h),并且每个task_struct都有mm_structmm_types.h)维护所有进程进程'虚拟内存地址。有关如何实现页表的更多信息,请检查通用头文件(genericx86-64以及实现(arch/x86/mm/)。

需要花费大量的时间来解决它;祝你好运。