xv6书中有一个问题困扰了我很长一段时间,我想知道是否有人想澄清这一点。
KERNBASE限制了单个进程可以使用的内存量,这可能会在拥有完整4GB RAM的机器上产生刺激。提高KERNBASE是否允许进程使用更多的内存?
在我看来,这个问题的答案是否定的,因为围绕xv6的整个机制都是为了在特定的地址空间上使用KERNBASE而设计的。
谢谢你的回答。
发布于 2016-03-01 19:12:23
这里有个问题。
所有应该使用的物理地址都映射到虚拟地址0x80000000及以上。
因此,如果将KERNBASE向上移动,操作系统可以使用较少的物理内存。
发布于 2016-03-02 16:11:42
我也在想这件事。这是我的结论--尽管我不能为他们担保。大部分都是演绎的。
首先,你提出的解释在技术上是错误的。xv6可以同时处理较高和较低的KERNBASE值。您可以通过将KERNBASE更改为0x90000000,然后更改kernel.ld中的相关值(将事物放入预期地址的链接器脚本)来测试这一点。
据我所知,这里真正的问题是xv6不对磁盘执行任何分页操作。现在,请记住,在xv6 addresses 0x80000000 (KERNBASE)中,向上映射线性到0x00000000..0xffffffff。这意味着您在整个系统中分配的任何字节内存都映射到32位空间中的两个不同的物理地址。由于xv6不分页到磁盘,这意味着如果它为用户进程分配内存(使用sbrk()系统调用,由malloc()在用户空间中使用),那么它将始终保持在内存中。因此,由于我们有两个“副本”,或者更准确地说,有两个映射到同一个地址,所以我们实际上不能使用32位地址空间中可用内存的一半以上。
现在,回想一下KERNBASE被定义为0x80000000,确切地说是:可用内存的一半。所以不,在这些条件下提高KERNBASE不能给我们更多的用户空间内存。
https://stackoverflow.com/questions/35035874
复制相似问题