根据架构概述文档,Aarch64支持4k和64k页面.一些CPU也支持16k页.查看地址转换方案的详细信息,我得出的结论是,这些CPU 不支持同时存在不同大小的页面(与允许的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内存区域.
*根据实际的地址空间大小,在此之上可能存在零级表,但这两种架构都不允许在该级别进行块条目(无论如何它们都是不切实际的).对于AArch64,较大的颗粒仅支持2级和3级的块/页面条目,而64KB的颗粒根本不支持0级.