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

在这个答案中,作者指出: 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.

这个内核pipe理的内存的目的是什么? 它不应该在内核空间,以防止用户意外的腐败?

引用内核来源:“ 内核指针有冗余信息,所以我们可以使用一个方案,我们可以返回一个错误代码或返回值相同的指针。

值为-1 ..- 4095(在32位模式下映射为0xfffff000-0xffffffff)保留用于内核级errno值。 0xffffe000-0xffffefff中的其他4KB对于vsyscall vdso魔法页面是免费的,但是由于vdso页面自许多卫星可以重定位,所以这个区域仍然可能是未填充的,也就是说, /proc/*/maps无论[vdso]映射到0xffffe000还是其他地方,映射都始终以0xffffdfff结尾。

一些内核内存可以位于应用程序的用户空间地址空间内,并可以通过PROT_NONE进行排序。 然后将使用一些地址空间,但是不能被程序访问(所以不可能有损坏)。