为什么将页面大小指定为指令集体系结构的一部分?

Why is Page Size specified as part of Instruction Set Architecture?

我想了解为什么将页面大小指定为 ISA 的一部分。

更具体地说,我正在寻找任何硬件模块(MMU、TLB)(操作系统除外)使用页面大小信息来提供特定功能的详细信息。

请告诉我为什么页面大小必须成为 ISA 的一部分,而不仅仅是由 OS 决定。

谢谢。

TLB 硬件必须知道页面大小才能确定转换是否适用于地址。例如给定一个翻译,它上面 2500 字节的地址是否使用该翻译?

或者换句话说,TLB 必须知道哪些地址位是页面偏移量的一部分(在页面内),哪些位需要从虚拟转换为物理。

此外,在具有硬件页面遍历的体系结构上,整个页面 table 格式是 ISA 的一部分,典型的设计使用虚拟页码作为索引来查找正确的条目(例如 ). 不是 通过页面 table 进行线性或二进制搜索以查找包含要搜索的虚拟地址的条目。通常,相同的设计用于软件 AFAIK 遍历的页面 tables。


。即单个 TLB 可以包含多个大小页面的条目。这仅在页面具有 2 的幂大小并且自然对齐时有效(即页面的起始地址始终是其大小的某个倍数,因此将页面内地址的低位归零将为您提供页面起始地址).

您可以将其与 extent-based 页面-table 格式一起使用,其中每个连续映射都有一个条目,而不是每个页面都有一个条目。

页面遍历可能会更昂贵,必须检查更多条目以获得更多映射,但相同数量的 TLB 条目可以覆盖更多地址 space。

在许多情况下,操作系统希望能够轻松取消映射甚至分页未使用的页面,这与使用包含冷热数据或特别是代码混合的大页面相冲突。 (但是普通的固定大小的大页面也有这个问题,所以 x86-64 的 2M 和 1G 大页面并不总是胜过标准的 4k 页面。)

页面大小不是 x86_64 的 ISA 的一部分(编译器通常会发出的)。 x86_64 的指令集架构正式称为 Intel® 64 架构,在 的第 2.2.10 节(第 1 卷)中对其进行了简要描述英特尔® 64 位和 IA-32 架构软件开发人员手册。它描述了应用程序可以看到什么和可以做什么。 ARMv8 也有类似的东西。

相反,页面大小由 OS 决定,它不是 ISA 的一部分。这是因为页面大小可能因实现而异,并且可能因模式设置 (4K/2M/4M/1G) 而异。 x86_64 实现向 OS 提供了类似 ISA 的东西,Intel 将其称为 系统编程级别 (OS 将使用的)。英特尔 软件开发人员手册 第 2 卷第 13 章对此进行了描述。

该级别描述了页面大小和模式。但是 'correct' 应用程序应该 运行 在不同的系统上以不同的页面大小模式具有不同的页面大小。