概述
目录
- Memory protection units (MPUs)
- Address translation and translation regimes in PMSAv8-32
- MPU适用场景探讨
- 关键寄存器配置
- Protection Region Base Address Register
- Protection Region Selection Register
- Protection Region Limit Address Register
DDI0568_armv8_r32_supplement.pdf
Arm PMSA
基于提供内存保护方案的内存保护单元 (MPU)。 这PMSA
在 PE
访问的虚拟地址 (VA) 和 32 位物理地址之间使用线性映射(PA) 在内存系统中访问。 也就是说,对于所有访问,VA
与 PA
相同/等价。和MMU类似,但PMSA主要简化的地方就是MPU不使用转换表。
Memory protection units (MPUs)
MPU意思是Memory Protect Unit
,即为存储保护单元,它是位于存储器内部的一个可编程的区域,定义了存储器的属性和存储器的访问权限。MPU不会提升嵌入式应用的性能,而是用于系统中问题的检测(比如试图访问非法或者不允许的存储器位置所导致的应用错误)。如果检测到有错误,则会触发HardFault异常。实际上,许多微控制器用不到MPU,但MPU可以提高嵌入式系统的健壮性,在如下的情况中使得系统更加安全:
- 避免应用任务破坏其他任务或者OS内核使用的栈或数据存储器。
- 避免非特权任务访问对系统可靠性和安全性很重要的外设。
- 将SRAM或RAM定义为不可执行的(永不执行,XN),可以防止代码注入攻击。
- 还可以利用MPU定义其他存储器属性,例如可被输出到系统级的缓存单元或存储器 控制器的可缓存性。MPU默认是禁止的,此时对于存储器来说,其使用的是默认的存储器属性。
MPU 在 4GB 地址映射中定义保护区域。 保护区域是一个连续的内存区域
MPU为其定义了内存属性,例如内存类型和访问权限。
保护区:
- 由一对基地址寄存器和限制地址寄存器定义,请参阅内存保护单元
(MPU)。 - 最小大小为 64 字节。
- 整个地址映射的最大大小为 4GB。
- 不得重叠。
- 不需要是连续的。
保护区域的定义指定了区域的开始和结束,对保护区域的访问权限
区域,以及该区域的内存属性。
PMSAv8-32
仅支持统一的内存保护方案。 它不支持单独的指令和数据
地址映射中的区域。 PMSAv8-32 不向后兼容 PMSAv7 或更早的 Arm PMSA。
PMSAv8-32
实现可以提供一个虚拟化方案,其中在 EL2 执行的单个管理程序控制下的环境,单个 PE
支持多个访客。其中在 EL2 执行意味着在 Hyp 模式下执行。 通常,在 EL1 上执行的操作系统对 EL1 MPU 进行编程以定义
内存映射用于它自己的操作和它在 EL0 上运行的应用程序。 在 EL2 上执行的管理程序对EL2 MPU为自己的操作定义内存映射,可以修改访问权限和内存(由 EL1&0 阶段 1 转换执行的属性分配)。
Address translation and translation regimes in PMSAv8-32
在 Armv8-R 中
- 地址转换描述了将 PE 使用的虚拟地址 (VA) 映射到在内存系统中访问的物理地址 (PA) 并确定访问权限和内存,目标 PA 的属性。
- Stage机制将 VA 映射到 PA,使用一个或两个地址转换阶段来分配访问权限
目标 PA 的权限和内存属性。 当使用两个翻译阶段时,中间地址被视为中间物理地址 (IPA)。
机制和Armv8-A MMU 类似。
MPU适用场景探讨
其实对于简单的应用,比如IO控制,不太可能会用到MPU,除非使用的微处理器中存在系统级的缓存且需要MPU对其进行定义。
物联网,如果应用是和网络相关的东西,或者应用面临着无法信任的通信接口,则MPU有助于提高安全性。例如:将用于通信缓冲的存储器区域定义为不可执行的地址区域后,就可以防止代码注入攻击。
工业控制领域,如果应用需要很高的可靠性,则MPU可为多任务系统中栈加以限制,以检测一些意想不到的错误。
汽车应用,MPU常用于汽车部件中。软件部件间不能互相有接口,所以需要MPU处理存储器区域。
我们可以将MPU的应用分为以下几类:
- 安全管理:
未受信任或者风险较高的软件部件,应该运行在非特权等级。MPU可以限制这些部件访问的存储器空间。
用作通信缓冲RAM空间中可能包含通信注入的恶意代码,MPU可以将存储器空间定义为不可执行。 - 系统可靠性:
在多任务的系统中,MPU可以定义应用任务栈的合法存储器空间,使得任务不会破坏其他任务或OS数据栈的空间。
若应用具有较高的安全需求,则MPU可以将栈空间最后定义为不可访问的存储器空间,这样可以检测出栈溢出。
有些程序可能需要将代码复制到SRAM中执行,或者将向量表复制到SRAM中以提高访问速度。在复制完代码或者向量之后,存储器空间可以被定义为只读的,防止存储器空间被意外的修改。 - 存储器属性管理:
可以利用MPU定义可被缓存的存储器空间,以及存储策略(写通vs写回)。
利用MPU配置覆盖掉某个存储器空间的默认配置。
总之,我们需要根据具体的项目需要,选择MPU是默认配置还是需要改一些配置,这样才能使我们的应用更加符合要求。
关键寄存器配置
Protection Region Base Address Register
保护区域基地址寄存器指示 EL1 控制的 MPU 的基地址
区域。
普通内存具有“共享”属性,包括:
- Inner Shareable,意味着Inner Shareable的内存只可以在此域共享。
- Outer Shareable,意味着此内存可以被Inner Shareable和Outer Shareable域共享。
- Non-shareable,不可共享。
共享属性的内存硬件必须保证一致性,但不影响取指令的一致性。
共享属性内存必须有一致性,否则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的意思。
Protection Region Selection Register
比较简单。MPU region registers最多支持16个区域,超过被视为 UNPREDICTABLE。
Protection Region Limit Address Register
表示EL1控制的MPU的地址范围。
内存属性寄存器比较复杂,另写一篇单独描述其配置。
参考:
有关Non-cacheable,Cacheable, non-shareable,inner-shareable,outer-shareable的理解
最后
以上就是饱满柜子为你收集整理的Armv8-R系列之何为MPU?Memory protection units (MPUs)Address translation and translation regimes in PMSAv8-32MPU适用场景探讨关键寄存器配置的全部内容,希望文章能够帮你解决Armv8-R系列之何为MPU?Memory protection units (MPUs)Address translation and translation regimes in PMSAv8-32MPU适用场景探讨关键寄存器配置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复