AUTOSAR走向多核安全之路

2019-06-04 23:23:05·  来源:Vector维克多  
 
当前汽车ECU软件开发的核心领域有两个主要话题:第一,运算内核架构趋向于多核化;第二,需要满足ISO 26262所要求的安全标准。这两者自身已经足够复杂,那么如果
当前汽车ECU软件开发的核心领域有两个主要话题:第一,运算内核架构趋向于多核化;第二,需要满足ISO 26262所要求的安全标准。这两者自身已经足够复杂,那么如果两者结合在一起,会产生怎样的结果?
 
引入多核架构的主要原因,是希望在无需提高时钟频率的情况下能够提高计算能力。但是,只有在足够多的应用程序软件可以并行化的情况下才能实现这一点。这面的经典参考是阿姆达尔定律,以双核处理器和共计50%并行化率的软件为例,与单核架构相比,多核架构最大可以提高30%。为了实现最佳的计算能力,开发人员必须尽力在分配软件模块时最大限度地减少内核间的资源共享。在大多数情况下,相关的资源包括硬件寄存器和数据存储区域。跨核资源调用带来的挑战并非以访问协调问题为主,而是如何在不同应用程序同时发起访问共享资源请求的情况下避免等待状态。在这种等待状态下,会发生独立数据处理丢失的问题,程序并行化也并不像设想的那样有效。

满足ISO 26262的功能安全
 
满足ISO 26262规定的功能安全要求已成为汽车软件的开发过程中不可忽视的一部分。在危害分析和风险评估的基础上,开发人员需要评估ECU功能需求与安全机制的相关性,并指定适当的ASIL(汽车安全完整性等级)。
 
在必须实现与安全相关的功能的前提下,对多核软件架构会产生什么样的影响?在回答这个问题之前,关于在许多安全项目中都使用到的多核处理器的锁步概念,需要注意以下几点。

锁步模式    
 
在锁步模式下,两个核分别执行相同的代码,独立的比较器对两个核的计算结果进行比较,并在出现差异时生成一个trap。之后的处理取决于ECU的硬件条件和安全架构,其中硬件设计必须确保在trap发生后ECU仍然处于安全状态。由于两个核都执行相同的代码,因此除了错误处理之外不需要扩展为多核软件。换言之,即使使用多个内核,这也不是一个旨在提高计算能力的多核架构。
 
分布式多核架构  
 
采用多核架构可以提高计算能力,或在引入安全机制的系统中用于实现不同ASIL等级的拆解。开发人员根据软件的可并行性和相关安全架构,将上层软件模块分配给AUTOSAR中定义的OS Application。这一分配过程对应于ISO 26262中定义的"分区",且该过程能够使ECU在运行时不会引起内部区域的相互干扰。
 
在多核ECU中,OS Application被分配给不同的处理器内核(图1)。从开发人员的角度来看,分区的主要目的并非程序并行性或是程序安全性:首要任务是确保OS应用程序之间不受互相干扰。为此,尤其需要引入运行时监控(Runtime Monitoring)并避免对安全相关的存储器内容进行错误更改。

运行时监控  
 
在AUTOSAR操作系统SC2中,AUTOSAR要求具有运行时监控功能。然而,这对于安全相关的应用来说是不够的。AUTOSAR操作系统必须确保没有需要过多运行时间或产生太长时间中断的任务。然而正确且安全的任务序列和复杂的任务配置为开发人员带来了难以保证其安全与否的高度复杂性。相应的替代解决方案采用了根据ASIL D开发的程序流监控的形式,监视任务的执行时间和顺序以及任务中包含的功能。每个内核都创建了各自的程序流监视器,监视器通过软件中包含的检查点接收有关功能的执行信息(图2)。如果程序中的安全机制没有异常,这些检查点只能在正确的时间点、以正确的顺序通过。
 
中央看门狗管理器收集所有监视器的状态信息并触发看门狗程序。由于任务通常跨核相互依赖,因此无法单独管理每个内核。此外,AUTOSAR规范仅允许同步重新启动所有内核,因此必须将看门狗管理器作为整个ECU的中央管理模块。但程序流监视器在每个核上独立运行,并且能够跨核向中央看门狗管理器通知自己的状态。
 
内存保护和安全通信 
 
只有在硬件支持内存保护单元(MPU)时,内部存储才能完全避免干扰。这种内存保护机制可以确保应用程序只能访问预定义的某块内存区域(图3)。这些存储区域是针对每个内核单独定义的,但必须与其他内核共享硬件资源(RAM等)。在实现内存保护功能的过程中,操作系统担负着核心作用:在任务切换时,操作系统重新编程MPU以实现内存分区的切换。操作系统中负责内容切换的这一部分是与安全相关的组件,必须在运行中始终符合最高要求的安全级别。
 
从安全通信的角度来讲,一方面要防止数据被错误地覆盖,另一方面需要处理器内核之间切换任务时正确地交换数据。在AUTOSAR架构模型中,两个任务之间的数据交换通过虚拟功能总线(VFB)进行,VFB由运行时环境(RTE)实现。
 
在具有多核架构的安全相关ECU中,RTE必须满足以下的额外需求:必须允许跨内存分区的通信,同时能够区分通信路径是跨核(核间通信)还是在同一内核上运行的两个任务之间(核内通信)。其中,核间数据传输需要额外的协调机制,为此操作系统为RTE提供称为IOC(Inter-OS-Application Communicator)的功能,允许各个核上的任务和中断服务之间交换数据。
 
标准解决方案 
 
在多核ECU上实现ISO 26262定义的功能安全并非易事。然而,我们不需要在每次配置过程中都对安全功能进行重复设计,只需正确地使用即可。Vector为ECU开发人员提供适用于ASIL D的多核架构的操作系统、RTE和程序流监控。
 
一般而言,多核系统远比单核系统复杂。然而,基本软件配置过程则并非如此:一旦将软件分配到相应处理器内核,借助配置工具,多核系统的剩余配置工作并不比单核系统困难。开发人员可将任务和相关中断服务等配置组合在OS Application中,然后将它们分配给处理器内核(图1)。使用Vector的DaVinci Configurator Pro配置工具,只需点击几下鼠标即可完成。DaVinci Configurator Pro集成的RTE生成器会自动在软件模块之间配置正确的通信方法(核内或核间)。
 
当前,支持基于多核ECU的基础软件和配置工作的工具已经成熟。然而,很好地实现软件架构创建和软件组件分配到处理器内核却是比较困难的。ECU开发人员需要相关的专业知识和开发经验去对不同的参数进行评估。 
分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026620号