首页 > 解决方案 > MMU:AARCH64 中的长描述符页表大小

问题描述

我想了解,AARCH64 中每个级别的内存都被 4k 粒度的页表覆盖。

使用 47 位 VA,One 可以具有 0 级到 3 级。

在 0 级可能有一个表描述 512 个 1 级页表,现在每个 1 级页表可以描述 512 个 2 级页表,并且每个 2 级页表可以描述 512 个 3 级页表。

所以在级别 3 有 512 个大小为 4k 的页表,内存覆盖为 512*4k = 2MB ,这是只有一个级别 2 的页表可以覆盖的内容,如果我们在级别 2 有 512 个这样的级别页表,那么总内存覆盖的是 512*2MB = 1GB,对吧?

类似地,第 1 级的每个表都指向 512 个第 2 级页表(其中每个第 2 级页表覆盖 2MB)。

所以,512*2MB=1GB,如果我们有 512 个 1 级页表,总内存是 512GB,对吧?

类似地,0 级覆盖的总内存是 1024 GB,对吧?

标签: armarm64mmupage-tables

解决方案


您似乎将单个页表条目与整个页表混合在一起,以某种方式丢失了一个级别并添加了一点而不是减去了它。

单页:4'096
3级表:4096*512 = 2'097'152 = 2MB
2级表:4096*512*512 = 1'073'741'824 = 1GB
1级表:4096*512*512* 512 = 549'755'813'888 = 512GB
0级表:4096*512*512*512*512 = 281'474'976'710'656 = 256TB

请注意,上述内容适用于48位地址。也就是说,从地址开始,12 位用于页偏移,4 乘以 9 位作为页表索引 (12 + 4*9 = 48)。
对于 47 位,0 级表中只有 256 个条目,因此最终得到 128TB 的可寻址内存。


推荐阅读