代码拉取完成,页面将自动刷新
+------------------------------------------------------+
| TIPS: | +----------------------------------------------+
内核空洞映射[以页管理方式动态进行映射,此处以页粒度=2M为例] | get_next_ptp可以获取申请页的虚拟地址以供操作系统使用| | TIPS:页的方式只有L0的页表页是与bootloader阶段|
| | | 定义的boot_ttbr1_l0基地址是一样的,内核共用一|
| | | 个页表。 |
| <--------- 填充方向 映射访问方向 ----------> | | 后面的L1, L2, L3(如果页粒度是4K)都将从buddy |
| | | 里面申请. |
| | | |
| entry的坐标通过L0/L1/L2/L3获取 | | 如果页粒度是2M, 则只需要L0,L1,L2三级页表 |
| entry内容: next ptp 的物理地址(低12位清零) + 12位属性| | |
| | | |
| | | |
| MMU用到的都是物理地址, OS用到的是虚拟地址 | | |
| | | |
1page = 512entry * 64bit/8 = 4KB +------------------------------------------------------+ | |
l0 ptp +----------------------------------------------+
+------------> +---------+ get_next_ptp
addr valid bit = 48 | | | l1
| | |
9 9 9 21 | | | IS_PTE_INVALID,说明这个entry没有填充,需要填充 new ptp1
+--+----+----+-----+----------+ | | | +------------------------------------------> +-----------+
63| | L0 | L1 | L2 | 2M | 0 | | | | 填充物理地址(来自新申请的页的物理地址)+属性 | |
+--+----+----+-----+----------+ | | | | | |
offset | | | | | |
VA | +---------+ | | |
+ +-------------------+ entry| <------------+ | |
| | | | +---------+ +-----------+ 与前面get_next_ptp同理
| | +--+------+ | | entry | <----------------------------->
| | |ttbr1_el1| +---------+ +-----------+
+-------------------> | +---------+ | |
| | | |
| | +-----------+
+-------------------+ page
MMU
l2
new ptp2
<---------------------------------------------> +----------------+ PA
entry | <-------------------------->+--------------------+---------->KBASE + 256
+----------------| | | 2M +
| <-------------------------> +--------------------+ |
+----------------+ | | 2M +--------------> 在boot阶段没有提前固定映射的内核空洞
| | +--------------------+ |
| | | | |
| | +--------------------+ |
+----------------+ | | +
+--------------------+---------->KBASE + 512
page
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。