我想了解一下,4k粒度的AARCH64中的页表覆盖了每个级别的内存。
对于47位的VA,可以有0级到3级。
在第0级,可以有一个描述512个第1级页面表的表,现在每个第1级页面表可以描述512个第2级页面表,而且每个第2层页面表可以描述512个第3层页面表。
所以在第三级有512个页表,每个4k大小,覆盖的内存是512*4k = 2MB,这是只有一个第二级的页表可以覆盖的,如果我们有512个这样的第二级页表,那么覆盖的总内存是512*2MB =1 1GB,对吧?
类似地,1级的每个表指向512个2级页表(其中每个2级页覆盖2MB)。
所以,512*2MB=是1 GB,如果我们有512个1级页表,总内存是512 GB,对吗?
同样,0级覆盖的总内存是1024 GB,对吗?
发布于 2018-10-30 06:15:59
您似乎将单个页表条目与整个页表混淆在一起,以某种方式丢失了一个级别,并且增加了一点,而不是减少了它。
单页: 4'096
3级表: 4096*512 = 2'097'152 = 2MB
二级表: 4096*512*512 = 1'073'741'824 =1 1GB
1级表: 4096*512*512*512 = 549'755'813'888 =512 888
0级表: 4096*512*512*512*512 = 281'474'976'710'656 = 256TB
但请注意,上述内容适用于48位地址。也就是说,从地址开始,12位用于页偏移量,并且4乘以9位作为页表索引(12 + 4*9 = 48)。
对于47位,在0级表中只有256个条目,因此最终拥有128TB的可寻址内存。
https://stackoverflow.com/questions/53051886
复制相似问题