do {} while(0)宏

通用的双向链表组件

linux虚拟的mmu管理单元

三级页表

如果具体架构只支持二级页表,也把它视作三级页表,保持页表相关代码的复用性(读取诸如pgd,pmd,pte字段的宏是架构定义的,但遍历整个页表的逻辑是可以复用的)

没有用简单的整数类型表示pte这种,而是用结构体包装了一层,提供了一定的类型检查,能稍微防止你直接把pgd当pte用这种操作

页表中存放的都是物理地址,不管是每一级页表都需要存放的是所谓下一级的页面地址,这个页面地址应该是页对齐的,但是低位也被拿来用了,保存属性。

Linux分页机制之分页机制的实现详解—Linux内存管理(八) - yooooooo - 博客园 (cnblogs.com)

对段式内存映射的架空

通过配置段描述符,将虚拟地址保持不变映射为线性地址,线性地址再进行页式映射

每个进程都有自己的页面目录PGD,mm_struct中保存了这个目录的指针