0

配套书在第32 页说

有一个引导问题:必须映射所有物理内存,以便分配器初始化空闲列表,但是使用这些映射创建页表涉及分配页表页。

我不明白为什么。为什么内核不直接填充所有 4K[end,PHYSTOP)页面struct run不像 range 那样[end,4M)所有 4K 页面?

为什么所有物理内存都必须已经映射?

4

1 回答 1

2

首先,有更多的页面[end, PHYSTOP),而不是 4K。

现在问你问题(如果我理解正确的话)。

当我们启动到 xv6 时,我们使用entrypgdir我们的有效页面目录,它只映射 [0, 4MB)。这些是我们可以访问的唯一地址。因此,我们只能将这些页面映射到freerange().

kinit1()内核代码结束后分配前 4MB 的 之后,我们分配一个新的页面目录 ( kpgdir)。这个页面目录将允许我们在内存中更进一步,因为它映射了我们所有的内存(请参阅 参考资料setupkvm())。

于 2015-07-01T20:30:05.900 回答