RISC-V PMP:处理器怎样给不同特权级划出内存禁区?

TL;DR

RISC-V PMP 由高特权级软件配置物理内存区域访问规则,并由处理器在较低权限代码访问时执行检查。本文区分 PMP 与虚拟内存,介绍它在固件和嵌入式安全中的作用及实现边界。

RISC-V PMP 由高特权级软件配置物理内存区域访问规则,并由处理器在较低权限代码访问时执行检查。本文区分 PMP 与虚拟内存,介绍它在固件和嵌入式安全中的作用及实现边界。

RISC-V PMP:处理器怎样给不同特权级划出内存禁区?

处理器执行程序时,最重要的安全问题之一是:低权限代码能不能读写不该碰的内存?虚拟内存和操作系统权限能解决很多问题,但在更底层的启动固件、微控制器或可信执行环境里,处理器还需要一种直接针对物理地址的防护机制。RISC-V 的 PMP(Physical Memory Protection,物理内存保护)就是这样的硬件能力。

PMP 让机器模式(Machine mode,常写作 M-mode)的软件设置若干内存区域及其访问权限,例如某段物理地址可以读取、某段可以执行、另一段则对低特权级完全不可访问。随后处理器在执行较低特权级代码时,会依据这些规则检查访问。固件可以把启动代码、密钥区域或设备内存隔离出来,降低普通程序越界访问的风险。

为什么要强调“物理地址”?虚拟内存会把程序看到的地址映射到实际内存位置,操作系统通常在页表层面对访问做控制。PMP 则在更靠近硬件的一层,对物理地址范围施加边界。它可以与分页机制配合:分页负责灵活的地址映射和进程隔离,PMP 提供平台级、区域式的底线约束。两者并非非此即彼。

可以把 PMP 想成机房里的总门禁。操作系统给不同用户分配房间钥匙,而 PMP 则由更高权限的固件把“服务器机柜区”“固件存储区”等区域设为低权限人员无法进入。即使上层软件配置出错,硬件边界仍可能阻止部分访问。不过,门禁规则若设计不当,或者范围没有覆盖关键资源,依旧会留下漏洞。

PMP 的能力也有边界:可配置区域数量有限,匹配粒度受实现影响;规则优先级和地址编码方式需要由固件仔细管理。更新保护设置时,还必须考虑多核处理器和正在进行的访问,避免一个核心已经采用新规则而另一个仍处于旧状态。具体行为依处理器实现及规范版本而异,系统软件不能想当然地假设所有 RISC-V 芯片都提供完全相同的配置能力。

因此,PMP 不是“虚拟内存的另一个名字”,而是帮助平台固件在物理地址层建立访问边界的硬件机制。它常常藏在启动链条背后,却对可信启动、嵌入式设备和低特权代码隔离有重要作用。理解它时,记住这条主线就够了:由高特权软件设定区域规则,硬件在更低权限代码访问物理内存时执行检查。

来源:RISC-V 特权架构规范

KEEP READING