我是靠谱客的博主 饱满柜子,最近开发中收集的这篇文章主要介绍Armv8-R系列之何为MPU?Memory protection units (MPUs)Address translation and translation regimes in PMSAv8-32MPU适用场景探讨关键寄存器配置,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 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)。 这PMSAPE 访问的虚拟地址 (VA) 和 32 位物理地址之间使用线性映射(PA) 在内存系统中访问。 也就是说,对于所有访问,VAPA 相同/等价。和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适用场景探讨关键寄存器配置所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(108)

评论列表共有 0 条评论

立即
投稿
返回
顶部