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

Arm Aarch64上同时存在不同大小的页面,arm,paging,virtual-memory,arm64,osdev,Arm,Paging,Virtual Memory,Arm64,Osdev,根据架构概述文档,Aarch64支持4k和64k页面。一些CPU还支持16k页。通过查看地址转换方案的详细信息,我得出结论,此类CPU不支持同时存在不同大小的页面(与x86_64不同,x86_64允许同时存在不同大小的页面)。我说得对吗?你把两个不同但相关的东西混为一谈了——页面大小和粒度 在AArch64中,您有3种可能的翻译颗粒可供选择,每种颗粒都会产生一组不同的页面大小: 4KB颗粒:4KB、2MB和1GB页面 16KB颗粒:16KB和32MB页面 64KB颗粒:64KB和512MB页面

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

你把两个不同但相关的东西混为一谈了——页面大小和粒度

在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内存区域
*根据实际的地址空间大小,可能有一个第0级的表在上面,但这两种体系结构都不允许在该级使用块条目(无论如何,它们都是不切实际的大数据块)。对于AArch64,较大的颗粒仅支持级别2和3的块/页条目,而64KB颗粒根本不支持级别0