Linux内核:进程页表驻留在哪里?

pfl*_*flz 2 virtual-memory linux-kernel

由于仅由内核使用,因此它们只能位于 PAGE_OFFSET 以上的地址中。但我正在阅读这一页,在其末尾(在 IRC 会议中)我读到了以下几行内容,这让我很困惑:

 saxm> riel:  so where do page tables reside? Surely not below PAGE_OFFSET? Somewhere above PAGE_OFFSET+896mb then?

riel> they could reside anywhere

saxm> anywhere from 0->4gb (on x86 with no pae)?

riel> saxm: yeah
Run Code Online (Sandbox Code Playgroud)

我的意思是,为什么它们会位于 PAGE_OFFSET 下面?如果是这种情况,用户空间进程是否无法访问它们?

小智 5

我认为瑞尔想说的是它们可以(几乎)驻留在物理内存中的任何地方——没有固定的映射。

页表映射在内核虚拟地址空间中(即在 PAGE_OFFSET 之上),并且对用户空间不可见(正如您指出的那样,这是有道理的,因为我们不希望用户破坏自己的页表)。

看看这个相关的帖子: Does Linux use self-map for pagedirectory and page table?