0. 缩写 PGD:Page Global Directory PUD:Page Upper Directory PMD:Page Middle Directory PTE:Page Table Entry
1. 概述 Linux X86 页表采用三级映射:PGD-->PMD-->PTE,Linux X64 采用四级映射:PGD-->PUD-->PMD-->PTE,多了个PUD;而ARM32 Linux在实现过程中省略了PMD,采用两层映射,即PGD-->PTE, 除非在定义了CONFIG_ARM_LPAE才会使用三级映射。 如下图所示,ARM32 Linux主要用到了PGD段映射和PTE小页表映射。其中PGD为一级映射,PTE为二级映射,一级映射有4096个段页表项,二级映射有256个小页表项,每个页表项大小都是32bit。实际的虚拟地址-->物理地址转换过程如下: 32位虚拟地址的高12位(bit[31:20])作为访问一级页表的索引值,找到相应的表项,每个表项指向一个二级页表。 虚拟地址的次8位(bit[19:12])作为访问二级页表的索引值,得到相应的页表项,从这个页表项中找到20位的物理页面地址。 最后将这20位物理页面地址和虚拟地址的低12位拼凑在一起,得到最终的32位物理地址。 整个过程由ARM32 MMU硬件完成,软件不需要介入。
|
|
来自: python_lover > 《待分类》