ARMv8 MMU页表格式及地址转换过程分析

1.简介

CPU发出的虚拟地址经过MMU转换后得到物理地址,然后使用物理地址访问真实的硬件。虚拟地址和物理地址的映射关系保存在页表中,MMU需要遍历页表,才能将虚拟地址转换成物理地址。ARM64现在有两种大小的页表描述符,分别是ARMv8的64-bit描述符(一个页表描述符8字节),ARMv9的128-bit描述符(一个页表描述符16字节)。本文只介绍ARMv8的64-bit描述符。

2.页表类型

如下图所示,页表描述符的bit[1:0]表示类型。ARMv8的页表有四种类型,分别是Invalid descriptor、Block descriptor、Table descriptor和Page descriptor,具体如下:

  1. bit[1:0] == 0b0x:表示Invalid descriptor,此时MMU若使用该页表描述符进行地址转换,会触发Translation Fault。
  2. bit[1:0] == 0b10:如果不是第三级页表,则为Block descriptor。如果是第三级页表,则保留,可以看作是无效的页表描述符。Block descriptor和Page descriptor类型一样,定义了访问物理内存的属性和地址,并且没有下一级页表。Block descriptor专门应用于HugePage的映射,有的情况下只需要一个页表描述符即可完成地址映射,无需多级页表,这样可以加快MMU地址转换速度。比使用48位虚拟地址和4级页表的情况下,当映射1GB内存时,只需要一个level1 Block descriptor即可.
  3. bit[1:0] == 0b11:如果不是第三级页表,则为Table descriptor,如果是第三级页表,则为Page descriptor。Table descriptor为中间页表,用于指向下一级页表。Page descriptor为最后一级页表,定义了访问物理内存的属性和地址。

页表类型

3.页表格式

下面介绍Block descriptor、Table descriptor和Page descriptor三种页表描述符的格式。

3.1.Table descriptor

下图是不同地址宽度和不同页表大小情况下,Table descriptor的格式。我们主要关注48-bit地址位宽和4KB页表大小时Table descriptor的格式,在这种情况下m==12,下一级页表的基地址保存在bit[47:12],下一级页表属性保存在bit[63:59]。
Table_descriptor
页表属性如下图所示。

Table_descriptor页表属性

3.2.Block descriptor

下图是不同地址宽度和不同页表大小情况下,Block descriptor的格式。当地址位宽为48-bit,页表大小为4KB时,Block descriptor只能是level1或者level2的页表,level1页表n==30,level2页表n==21,转换后的物理内存基地址保存在bit[47:n]。当地址位宽为52-bit,页表大小为4KB时,Block descriptor只能是level0、level1或者level2的页表,level0页表n==39,level1页表n==30,level2页表n==21,转换后的物理内存基地址OA[51:48]保存在bit[15:12],其他地址保存在bit[47:n]。

Block_descriptor

Block descriptor转换的物理内存的访问属性如下图所示。

Block_descriptor内存属性

3.3.Page descriptor

下图是不同地址宽度和不同页表大小情况下,Page descriptor的格式。当地址位宽为48-bit,页表大小为4KB时,bit[47:12]定义了访问物理内存的基地址,Upper attributes和Lower attributes定义了物理内存的访问属性。

Page_descriptor

4.地址转换过程

下图展示了MMU将虚拟地址转换成物理地址的过程。

4.1.39bit-3Level-4KB

39bit-3Level-4KB

4.2.48bit-4Level-4KB

48bit-4Level-4KB

4.3.48bit-3Level-16KB

48bit-3Level-16KB

参考资料

  1. Arm ® Architecture Reference Manual for A-profile architecture。
  2. ARM® Cortex ® -A Series Programmer’s Guide for ARMv8-A。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值