分享

ARM32 页表映射过程

 python_lover 2022-12-26 发布于北京

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硬件完成,软件不需要介入。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多