- 页表本身是一个基于软件的结构,即它有 4 字节/8 字节(取决于寻址方案/架构等)条目,这些条目存在于 RAM 中。
这是可能的,一些罕见的 CPU 就是这种情况(当它们得到“TLB/翻译后备缓冲区未命中”时,它们只会要求操作系统进行翻译)。
然而; 对于大多数 CPU,页表是 CPU 本身直接使用的数据结构,软件(内核)必须以 CPU 可以理解的格式提供数据。对于这些情况,CPU 所需的页表条目格式通常具有用于各种目的的多个位,包括“有效/无效”(和“访问/未访问”,以及读/写/可执行权限,以及用户/主管许可,和...)。
- 有效/无效位与用于页表每个条目的 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
),它是页表条目中的最低位。