在this回答作者说:
With the 64-bit x86_64 kernel, a 32-bit process can use the entire 4GB address space, except for a couple pages (8KB) at the end of the 4GB address space which are managed by the kernel.
这个内核管理内存的目的是什么?不应该在内核空间中,以防止用户意外损坏吗?
答案 0 :(得分:6)
引用内核源代码:“内核指针有冗余信息,因此我们可以使用一种方案,我们可以返回错误代码或具有相同返回值的指针。 “
值-1 ..- 4095(在32位模式下映射到0xfffff000-0xffffffff)保留给内核级errno值。来自0xffffe000-0xffffefff的另一个4KB对于vsyscall vdso魔术页面是免费的,但由于vdso页面可以从许多卫星重新定位,因此该区域可能仍未填充,即[stack]
中的/proc/*/maps
条目无论[vdso]是否映射到0xffffe000或其他地方,都会以0xffffdfff结束。
答案 1 :(得分:2)
某些内核内存可以位于应用程序用户空间地址空间内,并且与PROT_NONE
进行排序mmap。然后会使用一些地址空间,但程序无法访问(因此不会出现损坏)。