打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
MPU MMU SMMU

      谈到功能安全的落地机制,首先想到的就是隔离机制,隔离我们一般分为时间隔离和空间隔离,这两种隔离所涉及的范围很大,而所用到的机制往往需要软件和硬件的配合,单纯的软件也能做不少安全机制,但是往往没有硬件支撑做的彻底,以及性能上的消耗。

      从笔者近几年的安全开发经验,涉及到的体系结构也是所有参与功能安全的同事都很熟悉的,比如说 ARM(主流v8a v8r v8m),aurix (tricore)的架构等等,这些架构里都会实现不少的隔离机制,包括

    MPU memory protection unit

    MMU memory management unit

   SMMU system memory management unit

     MPU隔离机制实现上较为简单的一种,无所谓简单与否,能在合适的场景中发挥作为,才是机制所带来的价值。其实这些机制并不是功能安全所特有的,即使不开内存保护特性,MPU的功能之一也是使能cache特性,也是需要进行配置的。MPU一般是微控制器,也就是mcu侧使用的比较多,由于这个特性比较底层,往往会集成到OS里,与OS的一些feature相绑定,比如说autosar里的OSA task等等。以CP autosaros为例,OS可支持内存保护的特性,但是内存保护的颗粒度就取决于实现了,可以基于autosar里的osa,可以基于os task,颗粒度越小保护的范围越准确,但是配置切换频繁,需要保证数据和程序的同步刷新,导致上下文切换的性能下降,进行会影响业务的实时性。所以,选择合理的保护颗粒度,也很重要。一旦发现MPU的异常,不同的体系设计处理也不一样,像tricore会进入trap vector, 对arm则是进入exception table,如果是虚拟化场景,可能也会进入不同等级的异常,作为业务开发者需要做好安全特性的设计和闭环。

    对于MMU机制,则是实现现代高性能操作系统的基石,MMU存在也使我们更好地使用虚拟地址的概念,实现多进程操作系统,并且能够大大提高对内存资源的使用效率。提到MMU,就联系到软件中的页表概念,页表是操作系统的核心底座。以linux为例,页表贯穿于linux生命周期的各个阶段,像启动时的临时页表,内核页表,每个进程的页表等等,并且软件在页表上实现各种灵活操作,典型的就是page fault机制。

     还是一样,MMU首先实现的是功能feature,在其基础上有一些bit位是设置一些权限,而虚拟地址下的物理地址范围控制以及这些权限的设定,实现内存的精确控制。但是MMU不像MPU的配置,页表也可能不是一开始就完全静态配置,有可能动态变化,这样有些场景我们可能为了功能安全进行静态配置,降低运行时的不确定性。

     

    IOMMU,顾名思义IOMMU,即是IO 相关的MMU,比如说网络设备、pcie设备的MMU等等,IOMMU针对不同的体系结构有不同的说法,比如说对于arm就是SMMU,system mmu,主要是给具有访存能力的非cpu设备所使用,比如DMA。大家都知道DMA配置配置的是物理地址,也就是PA,而我们使用的地址往往为虚拟地址,这使得CPU和DMA看到的地址世界上是不一样的,往往导致两个问题,一是安全问题PA如果被非法设置可能导致内存的损坏,另一个是物理地址访问的范围有限,可能导致内存规划的灵活性有限制。因此smmu可以解决以上问题,并且使用相同规格的页表,实现访问和读写权限的配置,也就保证了安全问题。同事在虚拟化场景下IPA到HPA的设备映射,SMMU也能控制内存的访问权限。下图是不同的设备类型访问的数据流。

    总结:

        在虚拟化里有个理念是 机制 与 策略 相分离,在功能安全里也是一样,MMU MPU SMMU 都是机制,而如何设计合理的方案,满足多安全等级共存的嵌入式方案,才是最终的目标。我们需要熟悉机制,也要懂得设计策略。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
软件定义汽车 (第十一集) : 硬件隔离与软件虚拟化
Linux 内核实战课(内存篇):CPU 访问内存的过程
工程师精讲:MMU那些事儿(配图丰富,思路清晰)
搞懂CPU、MCU、MPU、SOC、SOPC、MMU、CACHE的区别与联系
AM5728概述(1)
ARM的存储管理单元MMU
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服