【问题标题】:Why is Page Size specified as part of Instruction Set Architecture?为什么将页面大小指定为指令集架构的一部分?
【发布时间】:2018-03-12 09:42:11
【问题描述】:

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

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

请让我知道为什么页面大小必须是 ISA 的一部分,而不仅仅是由操作系统决定。

谢谢。

【问题讨论】:

  • 我投票结束这个问题,因为它不是一个编程问题。

标签: operating-system cpu-architecture virtual-memory instruction-set page-tables


【解决方案1】:

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

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

此外,在具有 HW page walk 的架构上,整个页表格式是 ISA 的一部分,典型的设计使用虚拟页码作为索引来查找正确的条目(例如 x86-64's 4-level page tables)。 不是通过页表进行线性或二进制搜索来查找包含正在搜索的虚拟地址的条目。通常,相同的设计用于由软件 AFAIK 遍历的页表。


It is possible to build a TLB where each entry has a mask to control how many address bits it matches。即单个 TLB 可以包含多个大小的页面的条目。这仅适用于页面具有 2 次幂大小并且自然对齐的情况(即页面的起始地址始终是其大小的某个倍数,因此将页面内地址的低位归零可以为您提供页面起始地址)。

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

Page-walks 可能成本更高,必须检查更多条目以获得更多映射,但相同数量的 TLB 条目可能会覆盖更多地址空间。

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

【讨论】:

  • 只是一个假设的场景,假设没有硬件 TLB 也没有 hw page walk,而是一个 MMU 来协助翻译,那么 Page Size 就不需要成为 ISA 的一部分。正确的 ?因为 OS 管理页表和 page walk,而 MMU 只翻译 VPN 部分,不包括偏移量。或者我们是否需要架构中其他地方的页面大小信息?
  • @UchiaItachi:没有别的想法了。物理的转换发生在早期,之后缓存/内存系统的其余部分使用物理地址。没有基于页面的 TLB 的设计可以使用软件管理的基本/限制转换条目。您可以为每个翻译使用固定大小的它,但硬件可能只提供几个翻译槽,因此您最好像范围一样使用它:为您正在映射的整个范围的翻译。跨度>
  • 在没有任何硬件翻译的情况下,MMU 所能做的就是在每个内存访问时调用软件翻译。对于普通 CPU 上的大多数工作负载,虚拟内存会花费几个 % 的性能。在每次内存访问时调用软件错误处理程序可能会使该惩罚至少 100%,也许是 1000%。哦,那必须包括代码获取,所以可能低估了 10 倍。更合理的是,如果您可以为错误处理单元提供固件(而不是让整个 CPU 出现异常),或者页面大小可以简单地配置。
【解决方案2】:

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

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

该级别描述页面大小和模式。但是一个“正确”的应用程序应该以不同的页面大小在不同的系统上以不同的页面大小模式运行。

【讨论】:

  • 为什么将“ISA”的定义限制为“非特权指令”?这不是 ISA 的正常定义。我认为大多数人都同意 ISA 包括内核所依赖的 CPU 行为,包括 HW 页面遍历的工作方式,以及 invlpg 影响的块有多大。即 x86 的控制寄存器是 ISA 的一部分。顺便说一句,Intel® 64 Architecture 是英特尔对其 x86-64 版本的名称。 AMD 肯定不会这么称呼它,他们的 CPU 实现了几乎完全相同的 ISA(基本上完全兼容非特权,内核的一些小差异)。
  • 我想和很多人一样,我把 ABI 和 ISA 混为一谈。
  • 啊。这就说得通了。 ISA 有点像用于处理硬件的内核的 ABI(但由于涉及内存排序规则,因此包含许多事物语义规则)。软件 ABI 当然只是用于与其他软件(包括内核)协作的软件,以 ISA 为给定。
猜你喜欢
  • 2020-01-04
  • 2020-01-04
  • 2016-01-22
  • 2017-09-03
  • 2014-02-10
  • 2014-09-19
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
相关资源
最近更新 更多