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

发布于:2024-06-05 ⋅ 阅读:(269) ⋅ 点赞:(0)

上篇文章:【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 使用场景

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

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


网站公告

今日签到

点亮在社区的每一天
去签到