硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1142|回复: 1
收起左侧

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

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106840
QQ
发表于 2021-12-22 16:19:31 | 显示全部楼层 |阅读模式
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:0]条目,定义了如下几项:
1、生成中止异常的故障条目。这可以是预取或数据中止,取决于内存访问的类型。这有效地表明虚拟地址是未映射。
2、1 MB 的部分转换条目。
3、指向L2 页表的条目。这使得 1 MB 的内存可以进一步细分为更小的页面。
4、一个 16 MB 的超级部分。这是一种特殊的 1 MB 节条目,需要 16 个条目页表。

QQ截图20211222161912.png


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

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

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

QQ截图20211222164509.png

Level 2 Page Tables

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

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

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

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

QQ截图20211222170126.png


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


124.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106840
QQ
 楼主| 发表于 2021-12-22 17:03:55 | 显示全部楼层
整理完
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-7 04:54 , Processed in 0.161772 second(s), 32 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表