具有 2 个级别的分层分页

Hierarchical paging with 2 levels

考虑一个页面 table 存储在内存中的分页系统。使用的逻辑地址space为32位,页面大小为8KB。这将导致页面 table(s) 非常大,因此系统使用两级分层分页。外页条目数table为256。

指定组成逻辑地址的三个字段的位数,即外页、内页和偏移量。

我找到了一些关于查找页面偏移量的信息,Page offset = log2(page size in bytes),所以对于这种情况,它应该是 13,但是我没有找到太多关于如何找到外部的位数的信息页和内页。谁能为我阐明这个问题? 谢谢你。

逻辑地址的最低位将用于"offset in 8192-byte page"。为此你需要 13 位(因为 1 << 13 = 8192 或因为 log2(8192) = 13)。

逻辑地址的最高位将用于"index into 256-entry outer page table"。为此你需要 8 位(因为 1 << 8 = 256 或因为 log2(2562) = 8)。

如果一个逻辑地址是32位,低13位和高8位用于其他用途;内页的索引剩余多少位 table?

我可能不完全正确,但由于 VPN 到 PPN 的转换是我最喜欢的 OS 部分之一,我决定分享我的理解。也许这张图片可以帮助理解虚拟地址是如何转换为物理地址的。 在此示例中,页面目录包含 1024 个条目,因此您将需要 10 位,以便能够定义您需要的条目。此条目包含内部 table 的地址。那么,由于内页table也包含1024个条目,知道了它的地址后,同样还需要找到它的物理页地址所在条目的索引。所以接下来的 10 位用于计算该索引。最后,当 page table 条目为您提供页面的物理地址时,offset 给出了确切的物理地址。 如果这不是很清楚,我可以详细介绍。

在你的情况下,因为你有 8KB 的页面,所以正如你所说的最后 13 位将用于计算偏移量。如果最外面的页面 table 包含 256 个条目,那么您将需要 8 位 (log2(256)) 才能确定其条目的索引。那么就看内层table的条目数了。或者,如果定义了条目的大小,则可以从中计算条目的数量。如果我们假设左 11 位完全用于内部 table,那么它必须包含 2048 个条目,根据我的理解,页面 table 的一个实例适合并填充一个物理页面。