【问题标题】:Hardware support for valid / invalid bit in page table页表中有效/无效位的硬件支持
【发布时间】:2021-12-04 12:51:36
【问题描述】:

在阅读需求分页时,我可以看到几个来源(例如http://www.expertsmind.com/questions/name-the-hardware-to-support-demand-paging-30176232.aspx)提到我们需要硬件支持页表中每个条目的有效/无效位。但是,我无法理解硬件支持会是什么样子。据我了解,

  1. 页表本身是一个基于软件的结构,即它有 4 字节/8 字节(取决于寻址方案/架构等)条目,这些条目存在于 RAM 中。
  2. 有效/无效位与用于页表每个条目的 4 字节/8 字节是分开的,因此它不像页表条目的 4 字节,我们使用 31 位来存储有效/无效位的帧号和 1 位。

总而言之,我的问题是 - 有效/无效位的硬件支持是什么样的?如果它可能因实现/架构而异,您能否分享任何特定实现的细节?

【问题讨论】:

  • 并非页表条目中的所有位都用于帧号,因为仅在页级粒度上进行转换,因此您不需要所有位。例如,在 32 位 x86 上,将低 12 位留作标志,包括位 0 处的当前(有效)标志。还有更多细节 here

标签: operating-system paging page-tables demand-paging


【解决方案1】:
  1. 页表本身是一个基于软件的结构,即它有 4 字节/8 字节(取决于寻址方案/架构等)条目,这些条目存在于 RAM 中。

这是可能的,一些罕见的 CPU 就是这种情况(当它们收到“TLB/翻译后备缓冲区未命中”时,它们只会要求操作系统进行翻译)。

但是;对于大多数 CPU,页表是 CPU 本身直接使用的数据结构,软件(内核)必须以 CPU 可以理解的格式提供数据。对于这些情况,CPU 所需的页表条目格式通常具有用于各种目的的多个位,包括“有效/无效”(和“访问/未访问”,以及读/写/可执行权限,以及用户/主管权限,以及...)。

  1. 有效/无效位与页表每个条目使用的 4 字节/8 字节是分开的,因此它不像页表条目的 4 字节,我们使用 31 位来存储有效/无效位的帧号和 1 位。

页表条目(有效时)不需要存储整个物理地址,因为页的地址必须与页的开头对齐(因此可以假定最低位为零而不是存储)。例如。如果页面为 4 KiB(“页面偏移量”为 12 位)且物理地址为 32 位;那么页表条目中的物理地址只需要 20 位(并且物理地址的最低 12 位可以“假定为零”),并且对于 32 位页表条目,这 12 位可以用于其他事情( “有效/无效”,...)。

还有一些“不太规则”的格式,其中一些最高位被重新用于其他用途。例如,您可能有 64 位页表条目,其中最高 4 位用于其他用途,然后中间 48 位用于物理地址(没有“假定为零”的低位),然后最低 12 位是用于其他用途。

总而言之,我的问题是 - 有效/无效位的硬件支持是什么样的?

因为每种不同类型的 CPU 都不同;查找页表条目格式的最佳位置是 CPU 制造商手册。您可以在此处的图表中找到一个常见示例(对于 32 位 80x86):https://wiki.osdev.org/Paging#Page_Table

请注意,英特尔将其称为“存在/不存在”标志(标记为 P),它是页表条目中的最低位。

【讨论】:

    猜你喜欢
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多