【发布时间】:2011-10-20 07:23:59
【问题描述】:
朋友们,
我看到了著名的 Linux 内核爱好者 Ingo Molnar 的 this article,他谈到了 4GB/4GB 拆分。
在这篇文章中他说
使用4G/4G补丁,内核可以4G/4G模式编译,其中 如果内核有一个完整的、独立的 4GB VM,并且有 为用户空间分离完整(和每个进程)4GB VM。
我的问题从这里开始:
我的假设是,在像 Linux 一样的 单片内核 中,进程的 kernel 和 user 部分共享相同的 PROCESS地址空间。所以对于一个没有有这个 4G/4G 补丁的 Linux 内核,我们分别有 3/1 的用户虚拟空间和内核虚拟空间。
事实上,内核的 1GB 虚拟空间映射到每个进程的虚拟地址空间。简单地说,PROCESS ADDRESS SPACE 是 4GB,其中 1GB 分配给内核。是真的吗?按照问题中的文章进行 - 如果我在 1) 中的假设是正确的 - 他是否意味着内核地址空间不再映射到 PROCESS ADDRESS SPACE 并且我们有不同的虚拟地址空间对于内核,没有地址空间共享?
即 PROCESS ADDRESS SPACE 是 4GB,而 KERNEL ADDRESS SPACE 是另外 4GB;而不是 PROCESS ADDRESS SPACE 扩大到 8GB,其中 4GB 共享给内核。
我知道我在这里听起来有点愚蠢:)。
【问题讨论】:
-
可能值得注意的是,4G/4G 模式现在基本上没有必要了,因为任何大到需要它的系统现在都可以在 64 位模式下运行。
-
进程地址空间不能变成8GB,因为指针仍然是32位。除非使用基于字的寻址,否则在这种情况下是不可能的
标签: linux memory virtual kernel