4

There is a question in the xv6 book which bothers me for a long time, and I wondered if anyone would like to clarify on this

KERNBASE limits the amount of memory a single process can use, which might be irritating on a machine with a full 4 GB of RAM. Would raising KERNBASE allow a process to use more memory?

In my opinion the answer to this question is no, since the whole mechanism around xv6 is designed to work with KERNBASE on a specific address space.

Thanks for any answer.

4

2 回答 2

5

嗯,这里有个问题。

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

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

于 2016-03-01T19:12:23.150 回答
3

我也一直在思考这个问题。以下是我的结论——尽管我不能真正保证它们。主要是演绎法。

首先,您提出的解释在技术上是错误的。xv6可以使用更高和更低的 KERNBASE值。您可以通过更改KERNBASE为,例如,0x90000000然后更改相关值kernel.ld(将内容放入预期地址的链接描述文件)来测试这一点。

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

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

于 2016-03-02T16:11:42.407 回答