ARMV8架构-AArch64执行状态下的4级页表

在AArch64 体系结构中,因为地址总线位宽最多支持 48 位,所以虚拟地址空间被划分为两个空间,每个空间最多支持 256 TB。

(1)低位的虚拟地址空间位于 0x0000000000000000 到 0x0000FFFFFFFFFFFF。如果虚拟地址的最高位等于 0,就使用这个虚拟地址空间,并且使用 TTBR0_ELx 来存放页表的基地址。

(2)高位的虚拟地址空间位于 0xFFFF000000000000 到 0xFFFFFFFFFFFFFFFF。如果虚拟地址的最高位等于 1,就使用这个虚拟地址空间,并且使用 TTBR1_ELx 来存放页表的基地址。

AArch64体系结构页表最多支持4级页表,输入、输出地址的最大有效位宽度为48,支持4KB、16KB和64KB的页面大小。

下面以4KB物理页面及48位地址宽度为例,MMU的页表遍历单元(Table Walk Unit, TWU)的查询过程如下图所示。

当MMU的TLB未命中时,处理器的页表查询过程如下:

(1)处理器根据虚拟地址来判断使用TTBR0还是TTBR1寄存器。虚拟地址的第63位(最高位)为1时,选择TTBR1寄存器,为0时选择TTBR0寄存器。TTBR寄存器中存放着L0页表的基地址。

(2)处理器以虚拟地址的[47:39]位作为 L0 索引,在 L0 页表中找到页表项,L0 页表有 512 个页表项。

(3)L0 页表的页表项中存放着 L1 页表的物理基地址。处理器以虚拟地址的[38:30]位作为 L1 索引,在 L1 页表中找到相应的页表项,L1 页表有 512 个页表项。

(4)L1 页表的页表项中存放着 L2 页表的物理基地址。处理器以虚拟地址的[29:21]位作为 L2 索引,在 L2 页表中找到相应的页表项,L2 页表有 512 个页表项。

(5)L2 页表的页表项中存放着 L3 页表的物理基地址。处理器以 VA[20:12]作为 L3 索引,在 L3 页表中找到相应的页表项,L3 页表有 512 个页表项。

(6)L3 页表的页表项里存放着 4 KB 页面的物理基地址,然后加上 虚拟地址的[11:0]位,就构成了新的物理地址,因此处理器就完成了页表的查询和翻译工作。

与x86_64体系结构不同,对于AArch64执行状态的体系结构采用的时分离的两套页表。如下图所示,将虚拟地址分为3部分,最下面是用户空间,中间时非规范区域,上面是内核空间。当CPU要访问用户空间的地址时,MMU自动选择TTBR0寄存器指向的页表。当CPU要访问内核空间时,MMU自动选择TTBR1寄存器指向的页表。

参考书籍:arm64体系结构编程与实践-笨叔

#嵌入式##嵌入式软件技能#
嵌入式学习免费专栏 文章被收录于专栏

分享嵌入式软件开发相关资料,专栏永久免费,嵌入式学习技术交流

全部评论

相关推荐

4 收藏 评论
分享
牛客网
牛客企业服务