DDI0568_armv8_r32_supplement.pdf

Arm PMSA 基于提供内存保护方案的内存保护单元 (MPU)。 这PMSA 在 PE 访问的虚拟地址 (VA) 和 32 位物理地址之间使用线性映射(PA) 在内存系统中访问。 也就是说,对于所有访问,VA 与 PA 相同/等价。和MMU类似,但PMSA主要简化的地方就是MPU不使用转换表。
MPU意思是Memory Protect Unit,即为存储保护单元,它是位于存储器内部的一个可编程的区域,定义了存储器的属性和存储器的访问权限。MPU不会提升嵌入式应用的性能,而是用于系统中问题的检测(比如试图访问非法或者不允许的存储器位置所导致的应用错误)。如果检测到有错误,则会触发HardFault异常。实际上,许多微控制器用不到MPU,但MPU可以提高嵌入式系统的健壮性,在如下的情况中使得系统更加安全:
MPU 在 4GB 地址映射中定义保护区域。 保护区域是一个连续的内存区域
MPU为其定义了内存属性,例如内存类型和访问权限。
保护区:


PMSAv8-32 仅支持统一的内存保护方案。 它不支持单独的指令和数据
地址映射中的区域。 PMSAv8-32 不向后兼容 PMSAv7 或更早的 Arm PMSA。
PMSAv8-32 实现可以提供一个虚拟化方案,其中在 EL2 执行的单个管理程序控制下的环境,单个 PE 支持多个访客。其中在 EL2 执行意味着在 Hyp 模式下执行。 通常,在 EL1 上执行的操作系统对 EL1 MPU 进行编程以定义
内存映射用于它自己的操作和它在 EL0 上运行的应用程序。 在 EL2 上执行的管理程序对EL2 MPU为自己的操作定义内存映射,可以修改访问权限和内存(由 EL1&0 阶段 1 转换执行的属性分配)。
在 Armv8-R 中
机制和Armv8-A MMU 类似。


其实对于简单的应用,比如IO控制,不太可能会用到MPU,除非使用的微处理器中存在系统级的缓存且需要MPU对其进行定义。
物联网,如果应用是和网络相关的东西,或者应用面临着无法信任的通信接口,则MPU有助于提高安全性。例如:将用于通信缓冲的存储器区域定义为不可执行的地址区域后,就可以防止代码注入攻击。
工业控制领域,如果应用需要很高的可靠性,则MPU可为多任务系统中栈加以限制,以检测一些意想不到的错误。
汽车应用,MPU常用于汽车部件中。软件部件间不能互相有接口,所以需要MPU处理存储器区域。
我们可以将MPU的应用分为以下几类:
保护区域基地址寄存器指示 EL1 控制的 MPU 的基地址
区域。


普通内存具有“共享”属性,包括:
共享属性的内存硬件必须保证一致性,但不影响取指令的一致性。
共享属性内存必须有一致性,否则E1写入内容,E2,E3等读取都是旧数据,这不是预期结果;另外取内存指令不需要保证,可以E1写的同时E2读取,E2可能读到旧数据,也可能读到新数据,但是肯定不是一部分哈,由atomic保证。
那Inner Shareable和Outer Shareable有什么区别呢?上述此域怎么理解呢?详细参考:
有关Non-cacheable,Cacheable, non-shareable,inner-shareable,outer-shareable的理解

如果将block的内存属性配置成Non-cacheable,那么数据就不会被缓存到cache,那么所有observer看到的内存是一致的,也就说此时也相当于Outer Shareable。
其实官方文档,也有这一句的描述:
在B2.7.2章节 “Data accesses to memory locations are coherent for all observers in the system, and correspondingly are treated as being Outer Shareable”
如果将block的内存属性配置成write-through cacheable 或 write-back cacheable,那么数据会被缓存cache中。write-through和write-back是缓存策略。
如果将block的内存属性配置成 non-shareable, 那么core0访问该内存时,数据缓存的到Core0的L1 d-cache 和 cluster0的L2 cache,不会缓存到其它cache中
如果将block的内存属性配置成 inner-shareable, 那么core0访问该内存时,数据只会缓存到core 0和core 1的L1 d-cache中, 也会缓存到clustor0的L2 cache,不会缓存到clustor1中的任何cache里。
如果将block的内存属性配置成 outer-shareable, 那么core0访问该内存时,数据会缓存到所有cache中。
有了以上铺垫,就很好理解此域的概念了,此域就是在一个Cluster的意思。

比较简单。MPU region registers最多支持16个区域,超过被视为 UNPREDICTABLE。

表示EL1控制的MPU的地址范围。


内存属性寄存器比较复杂,另写一篇单独描述其配置。
参考:
有关Non-cacheable,Cacheable, non-shareable,inner-shareable,outer-shareable的理解