多级页表——分层分页

Posted

技术标签:

【中文标题】多级页表——分层分页【英文标题】:Multi-level page tables - hierarchical paging 【发布时间】:2011-07-30 08:32:06 【问题描述】:

过去操作系统决赛的示例问题,我如何计算此类问题?

一台计算机有一个 64 位的虚拟地址空间和 2048 字节的页面。页表条目占用 4 个字节。使用多级页表是因为每个表都必须包含在一个页中。需要多少级?

我将如何计算这个?

【问题讨论】:

【参考方案1】:

由于页表必须适合一页,页表大小为 2048 字节,每个条目为 4 字节,因此一个表包含 2048/4=512 个条目。要处理 512 个条目,它需要 log2(512)=9 位。可用于对每个页面级别的条目进行编码的总位数为 64-log2(2048)=53 位(地址空间的位数减去页面偏移位)。因此,所需的关卡总数为 53/9=6(四舍五入)。

x86-64 默认页表大小为 4096 字节,每个页表必须适合一页,页表条目为 8 字节。当前的 CPU 仅实现 48 位的虚拟地址空间。需要多少页表级别?

【讨论】:

4096/8 = 512 个条目;要寻址 512 个条目,log2(512) = 9 位。编码每个页面级别的总位数为 48 - log2(4096) = 36 位。因此所需的关卡总数为 36/9 = 4。 既然 2048 是以字节为单位的,难道不应该将其转换为位,从而使其 50/9 = 6 向上取整吗? 不,因为你知道需要多少位来寻址 2048 个字节而不是位。 我可能会在 2014 年回答,但非常感谢!!【参考方案2】: 逻辑地址位=64, 页数= 2^64/2048 = 2^64/2^11 = 2^53 我们有页表的条目正弦 = 4 字节的页面, 一页中的条目数将为= 2048/4=>512, bit 表示一个Entry=Log(512)=9bit, Page 的位 = 53bit 因此层数 =53/9=>6 层页表

【讨论】:

2048 是 2K 页的吗?什么操作系统使用这些?您不想在这里使用 4K 页面吗?

以上是关于多级页表——分层分页的主要内容,如果未能解决你的问题,请参考以下文章

多级分页操作系统

如何在javascript中实现分层多级数据表?

Laravel 多级分层用户系统

多级缓存的分层架构

多级和分层状态机的设计

多级页表如何节省内存