在xv6的书中有一个问题困扰了我很长一段时间,我想知道是否有人愿意澄清这一点KERNBASE限制了单个进程可以使用的内存量,这可能会使RAM已满4 GB的计算机感到不快。提高KERNBASE是否允许进程使用更多内存?在我看来,这个问题的答案是否定的,因为围绕xv6的整个机制都是为了在特定的地址空间上与KERNBASE一起工作而设计的。谢谢你的回答。
KERNBASE
6pp0gazn1#
好吧,这里有个问题。所有应该使用的物理地址都Map到虚拟地址0x80000000及以上。因此,如果您向上移动KERNBASE,操作系统可以使用更少的物理内存。
g6baxovj2#
我也一直在思考这个问题。以下是我的结论--虽然我不能保证,这主要是演绎。第一件事是你提出的解释在技术上是错误的。xv 6 * 可以 * 处理更高 * 和更低 * 的KERNBASE值。你可以通过将KERNBASE更改为0x90000000,然后更改kernel.ld(将内容放入预期地址的链接器脚本)中的相关值来测试这一点。据我所知,这里真实的的问题是xv 6不对磁盘执行任何分页。(KERNBASE)及以上线性Map到0x00000000..0xffffffff。这意味着您在整个系统中分配的任何内存字节都Map到32位空间中的2个不同物理地址。由于xv 6不对磁盘进行分页,这意味着如果它为用户进程分配内存(使用sbrk()系统调用,在用户空间中malloc()使用),那么它会一直把它保存在内存中.所以,再一次,因为我们有两个“副本”,或者更准确地说,两个Map到同一个地址,我们实际上永远不能使用超过32位地址空间中一半的可用内存.现在,回想一下KERNBASE被定义为0x80000000,它就是:一半的可用内存,所以不行,在这种情况下提高KERNBASE不能给予我们更多的用户空间内存。
0x90000000
kernel.ld
0x00000000..0xffffffff
sbrk()
malloc()
0x80000000
ccgok5k53#
这里的Necrobumping,但我会张贴我的答案,由于我最近的斗争与这个主题:DIMO技术上的答案是否定的,如果你像这里所说的那样提高KERNBASE,内核Map给进程和它们的分配的内存会更少。如果你降低KERNBASE,你会缩小进程地址空间,所以一半的地址空间在xv 6的情况下是一个甜蜜点。话虽如此,我自己也在纠结这个问题,因为如果没有上下文,这个答案就像是在说“就是这样”,对于一个试图把自己的头缠在操作系统内部工作原理上的人来说。该设计源自以下事实:
从理论上讲,如果物理内存量等于或大于64位地址空间所能解决的问题,那么在64位系统中也会遇到同样的问题。实际上,没有人会在意,因为与32位相比,它是巨大的。我在这里想说的是,这种设计及其局限性来自于硬件如何工作之上的软件设计的结合。我仍然不能回答自己,如果Map内核到更高的虚拟地址,这只是为了方便某种类型或如果有任何硬技术原因。
3条答案
按热度按时间6pp0gazn1#
好吧,这里有个问题。
所有应该使用的物理地址都Map到虚拟地址0x80000000及以上。
因此,如果您向上移动KERNBASE,操作系统可以使用更少的物理内存。
g6baxovj2#
我也一直在思考这个问题。以下是我的结论--虽然我不能保证,这主要是演绎。
第一件事是你提出的解释在技术上是错误的。xv 6 * 可以 * 处理更高 * 和更低 * 的
KERNBASE
值。你可以通过将KERNBASE
更改为0x90000000
,然后更改kernel.ld
(将内容放入预期地址的链接器脚本)中的相关值来测试这一点。据我所知,这里真实的的问题是xv 6不对磁盘执行任何分页。(
KERNBASE
)及以上线性Map到0x00000000..0xffffffff
。这意味着您在整个系统中分配的任何内存字节都Map到32位空间中的2个不同物理地址。由于xv 6不对磁盘进行分页,这意味着如果它为用户进程分配内存(使用sbrk()
系统调用,在用户空间中malloc()
使用),那么它会一直把它保存在内存中.所以,再一次,因为我们有两个“副本”,或者更准确地说,两个Map到同一个地址,我们实际上永远不能使用超过32位地址空间中一半的可用内存.现在,回想一下
KERNBASE
被定义为0x80000000
,它就是:一半的可用内存,所以不行,在这种情况下提高KERNBASE
不能给予我们更多的用户空间内存。ccgok5k53#
这里的Necrobumping,但我会张贴我的答案,由于我最近的斗争与这个主题:D
IMO技术上的答案是否定的,如果你像这里所说的那样提高KERNBASE,内核Map给进程和它们的分配的内存会更少。如果你降低KERNBASE,你会缩小进程地址空间,所以一半的地址空间在xv 6的情况下是一个甜蜜点。
话虽如此,我自己也在纠结这个问题,因为如果没有上下文,这个答案就像是在说“就是这样”,对于一个试图把自己的头缠在操作系统内部工作原理上的人来说。
该设计源自以下事实:
从理论上讲,如果物理内存量等于或大于64位地址空间所能解决的问题,那么在64位系统中也会遇到同样的问题。实际上,没有人会在意,因为与32位相比,它是巨大的。
我在这里想说的是,这种设计及其局限性来自于硬件如何工作之上的软件设计的结合。
我仍然不能回答自己,如果Map内核到更高的虚拟地址,这只是为了方便某种类型或如果有任何硬技术原因。