PMP 和 Paging
物理内存保护机制旨在与 RISC‑V 指令集手册,第二卷:特权架构,版本 1.10 中描述的基于页面的虚拟内存系统组合。启用分页后,访问虚拟内存的指令可能会导致多次物理内存访问,包括对页表的隐式引用。PMP 检查适用于所有这些访问。隐式页表访问的有效特权模式是管理员模式。
允许使用虚拟内存的实现以推测方式执行地址转换,并且比显式虚拟内存访问所需的时间更早。可以在地址转换和显式虚拟内存访问之间的任何时候检查结果物理地址的 PMP 设置。到不可执行地址范围的错误预测分支不会生成陷阱。因此,当以影响保存页表的物理内存或页表指向的物理内存的方式修改 PMP 设置时,M 模式软件必须将 PMP 设置与虚拟内存系统同步。这是通过在写入 PMP CSR 后执行 rs1=x0 和 rs2=x0 的 SFENCE.VMA 指令来实现的。
如果未实现基于页面的虚拟内存,或者当它被禁用时,内存访问会同步检查 PMP 设置,因此不需要 fence。
PMP 限制
在包含多个 hart 的系统中,每个 hart 都有自己的 PMP 设备。hart 上的 PMP 权限不能应用于多 hart 系统中其他 hart 的访问。此外, SiFive 设计可能包含一个前端端口,以允许外部总线主控器访问系统的完整内存映射。PMP 无法阻止前端端口上的外部总线主控器的访问。
没有 PMP 保护的区域的行为
如果内存映射的非保留区域没有应用 PMP 权限,则默认情况下,管理员或用户模式访问将失败,而机器模式访问将被允许。
访问设备内存映射中的保留区域(例如中断控制器)读取时将返回 0x0,写入将被忽略。在没有 PMP 保护的情况下访问设备内存映射之外的保留区域将导致总线错误。总线错误可以使用总线错误单元 (BEU) 对 hart 产生中断。
PMP 保护区的缓存刷新行为
当一条线被带入高速缓存并且 PMP 设置为断言锁定 (L) 位以保护该线的一部分时,数据高速缓存刷新指令将生成存储访问错误异常,如果冲洗包括受保护的线路的任何部分。缓存刷新指令执行无效和回写,因此它实际上是在尝试写回受保护的内存位置。
如果缓存刷新发生在未受保护的部分行上,刷新将成功并且不会产生异常。如果需要在没有回写的情况下刷新数据高速缓存,请改用高速缓存丢弃指令,因为这会使该行无效但不会回写。
全部0条评论
快来发表一下你的评论吧 !