谈到功能安全的落地机制,首先想到的就是隔离机制,隔离我们一般分为时间隔离和空间隔离,这两种隔离所涉及的范围很大,而所用到的机制往往需要软件和硬件的配合,单纯的软件也能做不少安全机制,但是往往没有硬件支撑做的彻底,以及性能上的消耗。
从笔者近几年的安全开发经验,涉及到的体系结构也是所有参与功能安全的同事都很熟悉的,比如说 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 MPU SMMU 都是机制,而如何设计合理的方案,满足多安全等级共存的嵌入式方案,才是最终的目标。我们需要熟悉机制,也要懂得设计策略。
联系客服