【ARM Cache 与 MMU 系列文章 7.3 – ARMv8/v9 MMU 块描述符与页表描述符】

本文详细介绍了ARMv8/v9架构中MMU的块描述符和页描述符。块描述符用于大内存区域的映射,提供连续内存访问和大小可变的灵活性,适用于大型内存映射和性能敏感的应用。页描述符则用于4KB页面的细粒度映射,适合需要精确权限控制的场景。理解并有效利用这两种描述符对优化内存管理和提高系统性能至关重要。
摘要由CSDN通过智能技术生成


请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】
及【嵌入式开发学习必备专栏】


上篇文章:【ARM Cache 系列文章 7.2 – ARMv8/v9 MMU 页表配置详细介绍 03 】


在这里插入图片描述

MMU 块描述符与页描述符

在ARMv8/v9架构中,内存管理单元(MMU)使用描述符(Descriptors)来定义内存区域的属性。这些描述符被组织成表格,通常称为转换表(Translation Table)。转换表项(Translation Table Entry,TTE)可以是块描述符(Block Descriptor)或页描述符(Page Descriptor),它们定义了虚拟地址到物理地址的映射及其相关属性。

Block Descriptor

块描述符用于定义较大的内存区域的映射。在不同的转换级别(Level)中,块的大小可以不同。例如,在第一级转换(L1)中,ARMv8/v9 允许1GB的块大小,在第二级转换(L2)中,允许2MB大小(取决于具体的配置和实现)。
块描述符不仅仅定义了虚拟地址到物理地址的映射,还定义了访问权限(如读/写权限),是否可以执行,缓存策略(如是否可缓存,缓存类型),以及是否需要地址转换(Non-Secure, Secure)等属性。

Block descriptor formats

下图展示了52-bit输出地址和48-bit输出地址各种颗粒度的blcok descriptor 的格式:
在这里插入图片描述

通常我们只使用48-bit 4K的格式。

Block Entry 介绍

“Block Entry” 是指在页表中用来描述一块连续物理内存区域映射的条目。ARMv8/v9 架构支持多级页表结构,这些页表结构用来将虚拟地址空间(VA)映射到物理地址空间(PA)。页表项(PTE)可以是页表描述符,指向另一个页表的地址,或者是块描述符,直接映射到一个物理内存块。

Block Entry 的设定

如何设定一个页表项(PTE)是块描述符还是页描述符见文章 【ARM Cache 系列文章 7.1 – ARMv8/v9 MMU 页表配置详细介绍 02 】

Block Entry 的特点

  1. 连续内存映射:Block Entry 映射了一段连续的物理内存区域到虚拟内存中。这可以提高内存访问的效率,因为它减少了页表的层级和相关的内存访问代价。
  2. 大小可变:在 ARMv8/v9 架构中,Block Entry 可以表示不同大小的内存块。这取决于页表的层级和配置。例如,在一些配置中,第一级页表(L1)的 Block Entry 可能表示 1GB 的物理内存,而第二级(L2)或更低级别的 Block Entry 可能表示更小的内存块,例如 2MB。
  3. 灵活性和效率:使用 Block Entry 可以在保持足够页表粒度的同时减少页表的大小和深度,这提高了内存映射的灵活性和效率。特别是对于大量使用连续物理内存区域的应用场景(如大型数据库或多媒体处理),这种方法非常有利。

Block Entry 使用场景

  • 大型内存映射:对于需要映射大块连续物理内存的场景,使用 Block Entry 比传统的页映射更有效率,因为它减少了页表遍历的开销。
  • 性能敏感的应用:对于对内存访问性能有高要求的应用,例如高性能计算(HPC)或游戏,使用 Block Entry 可以优化内存访问速度。
  • 系统启动和初始化:在系统启动和初始化阶段,操作系统可能使用 Block Entry 来设置初始的内存映射,确保快速访问关键内存区域。

Page Descriptor

页描述符用于定义较小内存区域的映射,通常是4KB大小的页面。页描述符在第三级转换(L3)中使用,它提供了更细粒度的内存管理能力。与块描述符类似,页描述符也定义了虚拟地址到物理地址的映射及相关的内存属性,如访问权限、执行权限、缓存策略等。

Page Descriptor 格式

下图展示了各种格式的页描述符的格式:
在这里插入图片描述

Block descriptors 和 Page descriptors 属性

下图展示了stage1 translation Block descriptors 和 Page descriptors 属性域:
在这里插入图片描述
见文章:【ARM Cache 系列文章 7 – ARMv8/v9 MMU 页表配置 01 】

下图展示了stage2 translation Block descriptors 和 Page descriptors 属性域:
在这里插入图片描述
bit[63]: 对于stage 1 translations没有使用,对于 stage 2 translations 该 bit 留给 SMMU 使用(后面文章会介绍SMMU);
bits[62:59]:对于stage 1 translations没有使用,对于 stage 2 translations Bits[62:60] 留给 SMMU 使用,Bit[59] 没有使用;
TODO

Block descriptors 和 Page descriptors 使用场景

  • 块描述符主要用于映射较大的、属性统一的内存区域。使用块描述符可以减少转换表的大小和复杂度,提高地址转换的效率。
  • 页描述符则用于映射需要细粒度控制的小内存区域。例如,操作系统内核通常需要对特定内存区域(如设备映射内存、内核代码和数据等)进行精确的权限和属性控制。

在设计操作系统或底层驱动时,合理利用块描述符和页描述符,可以有效地控制内存访问权限,提高系统的安全性和效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

主公讲 ARM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值