MMU:AARCH64中的长描述符页面表大小

时间:2018-10-29 18:41:35

标签: arm arm64 mmu page-tables

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

使用VA的47位,一个人可能具有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级页表,并且总内存为512 GB,对吗?

类似的方法,级别0覆盖的总内存为1024 GB,对吧?

1 个答案:

答案 0 :(得分:2)

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

>

单页: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的可寻址内存。