xv6书中有一个问题让我困扰了很长时间,我想知道是否有人想澄清这个问题
KERNBASE限制单个进程可以使用的内存量,这可能是 在具有完整4 GB RAM的机器上有刺激性。提高KERNBASE允许一个 进程使用更多内存?
在我看来,这个问题的答案是否定的,因为围绕xv6的整个机制旨在与特定地址空间上的KERNBASE
一起使用。
感谢您的回答。
答案 0 :(得分:1)
嗯,这里有一个问题。
应该使用的所有物理地址都映射到虚拟地址 0x80000000及以上。
因此,如果你移动KERNBASE,那么操作系统可以使用更少的物理内存。
答案 1 :(得分:1)
我一直在考虑这个问题。这是我的结论 - 虽然我不能真正保证他们。这主要是演绎。
首先,您提出的解释在技术上是错误的。 xv6 可以使用更高的和更低的 KERNBASE
值。您可以通过将KERNBASE
更改为0x90000000
,然后更改kernel.ld
中的相关值(将内容放入预期地址的链接器脚本)来对此进行测试。
据我所知,这里的真正问题是xv6不会对磁盘进行任何分页。现在,请记住,在xv6地址0x80000000
(KERNBASE
)中,向上线性映射到0x00000000..0xffffffff
。这意味着您在整个系统中分配的任何内存字节都映射到32位空间中的2个不同的物理地址。由于xv6不对磁盘进行分页,这意味着如果它为用户进程分配内存(使用sbrk()
系统调用,由malloc()
在用户空间中使用),那么它会将内存保留在整个内存中时间。因此,由于我们有2个“副本”,或者更确切地说是2个映射到同一个地址,我们实际上不能使用32位地址空间中可用内存的一半以上。
现在,回想一下KERNBASE
被定义为0x80000000
,这正是:可用内存的一半。所以不,在这些条件下提升KERNBASE
无法为我们提供更多的用户空间内存。