首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进程内存的xv6 KERNBASE限制

进程内存的xv6 KERNBASE限制
EN

Stack Overflow用户
提问于 2016-01-27 11:18:34
回答 2查看 3.7K关注 0票数 4

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

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

在我看来,这个问题的答案是否定的,因为围绕xv6的整个机制都是为了在特定的地址空间上使用KERNBASE而设计的。

谢谢你的回答。

EN

回答 2

Stack Overflow用户

发布于 2016-03-01 19:12:23

这里有个问题。

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

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

票数 5
EN

Stack Overflow用户

发布于 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不能给我们更多的用户空间内存。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35035874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档