在Aarch64上同时存在不同大小的页面

时间:2015-12-14 14:16:12

标签: arm paging virtual-memory arm64 osdev

根据架构概述文档,Aarch64支持4k和64k页面。一些CPU也支持16k页。查看地址转换方案的详细信息,我得出的结论是,这些CPU 不支持同时存在不同大小的页面(与允许的x86_64不同)。我是对的吗?

1 个答案:

答案 0 :(得分:6)

你在这里混淆了两个不同的,虽然相关的东西 - 页面大小与粒度。

在AArch64中,您有3种可能的翻译粒度可供选择,每种会产生不同的页面大小:

  • 4KB颗粒:4KB,2MB和1GB页面。
  • 16KB颗粒:16KB和32MB页面。
  • 64KB颗粒:64KB和512MB页面。

翻译颗粒通常定义了翻译方式的各种属性,因此它适用于整组表格,并且您在表格中不能混合和匹配颗粒的意义上是正确的,尽管它非常好同时为不同的表使用不同的颗粒(例如,在不同的异常级别)。

相比之下,x86总是具有4KB粒度,但提供的页面大小范围因模式而异:

  • 32位:4KB和4MB页面。
  • PAE:4KB和2MB页面。
  • 64位:4KB,2MB,以及(如果支持)1GB页面。

在这两种情况下,大于基本粒度的页面大小表示中间表级别的块条目。换句话说,使用常见的4KB颗粒,3级 * ,例如:

  • 第一级表中的每个有效条目都指向一个自然对齐的1GB内存区域,或一个描述该1GB地址空间的二级表。
  • 第二级表中的每个有效条目都指向一个自然对齐的2MB内存区域,或者一个描述该2MB地址空间的第三级表。
  • 第三级表中的每个有效条目都指向一个自然对齐的4KB内存区域。

*根据实际的地址空间大小,在此之上可能存在零级表,但这两种架构都不允许在该级别进行块条目(无论如何它们都是不切实际的)。对于AArch64,较大的颗粒仅支持2级和3级的块/页面条目,而64KB的颗粒根本不支持0级。