eric2013 发表于 2021-12-22 16:19:31

ZYNQ双核A9的MMU内存管理学习之Level 1 Page Tables和Level 2 Page Tables(2021-12-22)

Level 1 Page Tables

一级页表有时称为主页表,它划分了完整的 4 GB 地址空间分成 4,096 个相同大小的 1 MB 部分。因此 L1 页表包含 4,096 个条目,每个条目32bit大小。每个条目可以保存一个指向 2 级页表的基地址的指针,或者用于转换 1 MB 部分的页表条目。

如果页表条目正在转换1 MB部分,它给出了物理内存中 1 MB 页的基地址。 L1的基地址页表称为转换表基地址 (TTB),保存在 CP15 的寄存器中C2.它必须与 16 KB 边界对齐。

L1 页表条目可以是四种可能的类型之一,两位最低有效 条目,定义了如下几项:
1、生成中止异常的故障条目。这可以是预取或数据中止,取决于内存访问的类型。这有效地表明虚拟地址是未映射。
2、1 MB 的部分转换条目。
3、指向L2 页表的条目。这使得 1 MB 的内存可以进一步细分为更小的页面。
4、一个 16 MB 的超级部分。这是一种特殊的 1 MB 节条目,需要 16 个条目页表。




举例:从Level 1 Page Tables生成物理地址

假设 L1 页表放置在地址 0x12300000。 处理器内核发出虚拟地址0x00100000。 前 12 位 定义了正在访问的 1 MB 虚拟地址空间。

在本例中为 0x001,因此您需要读取table entry 。 每个条目是一个字(4 个字节)。 为了得到表中的偏移量,您必须将条目编号乘以条目大小:0x001 * 4 = 地址偏移量0x004。 条目的地址是 0x12300000 + 0x004 = 0x12300004。 所以,在收到这个来自处理器的虚拟地址,MMU 从地址 0x12300004 读取字。



Level 2 Page Tables

一个 L2 页表有 256 个字大小的条目,需要 1KB 的内存空间并且必须对齐到一个 1KB 的边界。 每个条目将 4KB 的虚拟内存块转换为物理内存中的 4KB。 页表条目可以给出 4KB 或 64KB 页的基地址。 有三种L2 页表中使用的条目类型,由 L2 页表的两个最低有效位中的值标识入口:

大页面入口指向 64 KB 页面。

一个小页面入口指向一个 4 KB 的页面。

错误页条目在访问时生成中止异常。




下图总结了使用两层页表时的地址转换过程。 虚拟地址的 用于索引到 4096 条目的 L1 页表,其中基址地址由 CP15 TTB 寄存器给出。 L1 页表入口指向一个 L2 页表,它包含 256 个条目。 虚拟地址的位 用于选择那些条目之一然后给出页面的基地址。 最终的物理地址是通过组合生成的基地址与物理地址的其余位。



eric2013 发表于 2021-12-22 17:03:55

整理完
页: [1]
查看完整版本: ZYNQ双核A9的MMU内存管理学习之Level 1 Page Tables和Level 2 Page Tables(2021-12-22)