xv6 KERNBASE进程内存限制

时间:2016-01-27 11:18:35

标签: unix process kernel xv6

xv6书中有一个问题让我困扰了很长时间,我想知道是否有人想澄清这个问题

  

KERNBASE限制单个进程可以使用的内存量,这可能是   在具有完整4 GB RAM的机器上有刺激性。提高KERNBASE允许一个   进程使用更多内存?

在我看来,这个问题的答案是否定的,因为围绕xv6的整个机制旨在与特定地址空间上的KERNBASE一起使用。

感谢您的回答。

2 个答案:

答案 0 :(得分:1)

嗯,这里有一个问题。

应该使用的所有物理地址都映射到虚拟地址 0x80000000及以上。

因此,如果你移动KERNBASE,那么操作系统可以使用更少的物理内存。

答案 1 :(得分:1)

我一直在考虑这个问题。这是我的结论 - 虽然我不能真正保证他们。这主要是演绎。

首先,您提出的解释在技术上是错误的。 xv6 可以使用更高的和更低的 KERNBASE值。您可以通过将KERNBASE更改为0x90000000,然后更改kernel.ld中的相关值(将内容放入预期地址的链接器脚本)来对此进行测试。

据我所知,这里的真正问题是xv6不会对磁盘​​进行任何分页。现在,请记住,在xv6地址0x80000000KERNBASE)中,向上线性映射到0x00000000..0xffffffff。这意味着您在整个系统中分配的任何内存字节都映射到32位空间中的2个不同的物理地址。由于xv6不对磁盘进行分页,这意味着如果它为用户进程分配内存(使用sbrk()系统调用,由malloc()在用户空间中使用),那么它会将内存保留在整个内存中时间。因此,由于我们有2个“副本”,或者更确切地说是2个映射到同一个地址,我们实际上不能使用32位地址空间中可用内存的一半以上。

现在,回想一下KERNBASE被定义为0x80000000,这正是:可用内存的一半。所以不,在这些条件下提升KERNBASE无法为我们提供更多的用户空间内存。