具有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级页表的所有页表项。你知道怎么打印吗?
答案 0 :(得分:0)
内核为每个正在运行的进程维护task_struct
(sched.h),并且每个task_struct
都有mm_struct
(mm_types.h)维护所有进程进程'虚拟内存地址。有关如何实现页表的更多信息,请检查通用头文件(generic和x86-64以及实现(arch/x86/mm/)。
需要花费大量的时间来解决它;祝你好运。