页表映射及页表描述符

虚拟地址到物理地址的转换过程

以4KB页表粒度,4级页表为例,分析虚拟地址到物理地址的转换过程:

  1. 虚拟地址的bit63 用来选择TTBR0 还是TTBR1。这两个寄存器中保存了内核态和用户态的L0页表基地址。(这也是为什么内核地址高位总是0xFFFF************)
  2. 在L0 基地址处,保存了512个页表项(512=pow(2,9), 因此L0 索引占用了9bit,下同),每一个页表项占用64bit。根据虚拟地址中的 L0 索引找到 L0 页表中的一个页表项(如红框所示)。该页表项的bit47-bit_m 保存了下一级页表的物理基地址。此处bit_m取决于页表大小,如果是4KB 的页表,那么4096 = pow(2,12),m=12。
  3. L1、L2页表项与L0页表项类似。都是在上一级的页表项中取基地址,在虚拟地址中取索引找到本级页表对应的基地址。
  4. L3 页表项中,保存的就是最终页面的物理地址了。至此完成了虚拟地址到物理地址的转换。
    图一

页表描述符

L0-L2 描述符

https://armv8-ref.codingbelief.com/en/chapter_d4/d43_1_vmsav8-64_translation_table_descriptor_formats.html
在这里插入图片描述

L3 描述符

L3 页表描述符中,除了物理地址占用了bit47-bit12 之外(一个4K大小的page一定是4K对齐的,所以一个page所在的物理地址bit11-0一定是0,所以page的物理地址只需要bit47-12,而不是bit47-0),其余bit 部分被用来表示这个page 的属性。
在这里插入图片描述
其中,bit63-51为高位属性,bit11-bit1 为低位属性。bit0 表示描述符是否有效,bit1 为0时,表示是保留页表项,为1 时表示是页表类型的页表项
每一bit 的具体含义可以参考这个页面

页表映射示例

在内核启动,完成恒等映射后,
在这里插入图片描述
虚拟地址0x418e5000 被映射到相同的物理地址。其中页表的起始地址为0x41bfa000。
按照L0 - L1 的规则读取相应的内存
在这里插入图片描述
注意最终L2 页表项bit1 为0,为块类型。因此用不到L3 页表。最终输出地址为0x41800711 的bit21-bit47,即 0x41800000。
或上虚拟地址0x418e5000 的bit0-bit20,即 0xe5000,为0x41800000 | 0xe5000 = 0x418e5000。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值