【问题标题】:calculating page table levels requires to support x virtual address bits计算页表级别需要支持 x 个虚拟地址位
【发布时间】:2021-09-04 12:00:32
【问题描述】:

我正在尝试计算支持 35 个虚拟地址位所需的页表级别数。

输入给了我: 分页单元使用 16B 的页面描述符,页面大小为 2KiB。描述符表中存储的描述符数量为 128 个。

对于页表级别给出的正确答案是 4。

我尝试使用各种方法计算它,但没有成功。

我也试过这个公式(虚拟地址空间大小)/(页面大小)

有人可以帮我吗?

【问题讨论】:

标签: operating-system computer-science cpu-architecture page-tables


【解决方案1】:

最通用的公式是这样的:

total_virtual_address_bits <= bits_for_offset_in_page + levels * bits_per_page_table_index

此公式源自将虚拟地址拆分为多个字段。

您可以插入您的值并查看它是否有效:

35 <= 11 + 4 * 7
35 <= 39

你也可以重新排列公式:

total_virtual_address_bits <= bits_for_offset_in_page + levels * bits_per_page_table_index

total_virtual_address_bits - bits_for_offset_in_page <=  levels * bits_per_page_table_index

levels >= (total_virtual_address_bits - bits_for_offset_in_page) / bits_per_page_table_index

您可以将您的值代入此公式,例如:

levels >= (35 - 11) / 7

levels >= 3.4285714

这里是混乱的部分。数学运算不是很完美(3.4285714 不是一个很好的整数)所以它被四舍五入。

这意味着最高级别的表只会被部分使用(更具体地说,我们只需要 3 位作为最高级别页表的索引,因此该表中只有 8 个条目将被使用,其他 120 个条目将被使用浪费)。

请注意,这种“四舍五入”在实践中确实会发生。一个例子是带有 PAE 的 32 位 80x86,其中最高级别的页表只有 32 个字节(而页表的大小和页面大小都是 4 KiB)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 2017-12-13
    • 1970-01-01
    • 2021-04-17
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多