Ai
1 Star 0 Fork 0

博尔特烦恼/chcore-note

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
e 7.75 KB
一键复制 编辑 原始数据 按行查看 历史
博尔特烦恼 提交于 2022-03-17 17:38 +08:00 . 2
+------------------------------------------------------+
| TIPS: | +----------------------------------------------+
内核空洞映射[以页管理方式动态进行映射,此处以页粒度=2M为例] | get_next_ptp可以获取申请页的虚拟地址以供操作系统使用| | TIPS:页的方式只有L0的页表页是与bootloader阶段|
| | | 定义的boot_ttbr1_l0基地址是一样的,内核共用一|
+-------------------------------------------------------+ | | | 个页表。 |
| 重点 | | <--------- 填充方向 映射访问方向 ----------> | | 后面的L1, L2, L3(如果页粒度是4K)都将从buddy |
| | | | | 里面申请. |
| 每一级页表项(entry)填充的内容是什么!! | | | | |
| | | entry的坐标通过L0/L1/L2/L3获取 | | 如果页粒度是2M, 则只需要L0,L1,L2三级页表 |
| | | entry内容是物理地址+属性,物理地址的位数是看所在页表 | | |
| | | 页是表/页 还是块. 其中块还要看是l1 block还是l2 block| | |
+-------------------------------------------------------+ | | | |
| | | |
| 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| <------------+ | |
| | | | +---------+ nextaddr > > PAGE_SHIFT +-----------+ 与前面get_next_ptp同理
| | +--+------+ | | entry | <----------------------------->
| | |ttbr1_el1| +---------+ +-----------+ nextaddr >> PAGE_SHIFT
+-------------------> | +---------+ | |
| | | |
| | l2 +-----------+
+-------------------+ new ptp2 page
MMU 来自buddy
+----------------+
| | pfn = pa > > BLOCK_SHIFT
<---------------------------------------------> +----------------+ PA
entry | <-------------------------->+--------------------+---------->KBASE + 256
+---------------------------------------------+ +----------------| | | 2M +
| TIPS | | <-------------------------> +--------------------+ |
| | +----------------+ | | 2M +--------------> 在boot阶段没有提前固定映射的内核空洞
|entry内容永远是下一级页表页或者物理页框的 | | | +--------------------+ |
| 基地址 + 属性 | | | | | |
| | | | +--------------------+ |
| | +----------------+ | | +
| | page +--------------------+---------->KBASE + 512
| | 来自buddy
+---------------------------------------------+
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/home-coder/chcore-note.git
git@gitee.com:home-coder/chcore-note.git
home-coder
chcore-note
chcore-note
master

搜索帮助