64位Linux上的32位进程的地址空间

时间:2011-12-17 18:44:39

标签: linux memory 64-bit linux-kernel 32bit-64bit

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.

这个内核管理内存的目的是什么?不应该在内核空间中,以防止用户意外损坏吗?

2 个答案:

答案 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。然后会使用一些地址空间,但程序无法访问(因此不会出现损坏)。