1.应用软件在AUTOSAR架构中,应用软件位于RTE之上,由互连的AUTOSARSWC组成。这些组件以原子的方式封装了应用软件功能的各个组件。图1:应用软件AUTOSARSWC独立于硬件,因此可以集成在任何可用的ECU硬件上。为了便于ECU内部和内部的信息交换,AUTOSARSWC只通过RTE进行通信。AUTOSARSWC包含许多提供内部功能的函数和变量。AUTOSARSWC的内部结构,即它的变量和函数调用,通过头文件隐藏在公众视野之外。只有外部RTE调用才会在公共接口上生效。图2:SWCAUTOSARSWC还包含必须在运行时调用的函数。这些C函数在AUTOSAR中称为Runnables。Runnables不能自己执行;它们必须分配给操作系统的可执行实体。可以通过将Runnables的函数调用插入操作系统任务主体来执行此类分配。Runnables然后在调用OS-Task的上下文中循环和/或事件驱动。Runnables对任务的分配是按照图3和图4进行的。图3:AUTOSAR分层软件架构的映射-Runnables2.OS-Applications图4展示了图3关系的解释。根据这个图,AUTOSARSWC中的Runnables被分配给OS任务。图4:SWC到操作系统应用程序的映射AUTOSAR操作系统应用程序是操作系统对象(例如任务、ISR、调度程序、计数器和警报)的集合,它们构成了一个内聚的功能单元。属于同一操作系统应用程序的所有对象都可以相互访问。OS-Applications中的OS对象可能属于不同的AUTOSARSWC。RTE实现了一个内存区域,所有OS-Applications成员都可以不受限制地访问该内存区域,以促进SWC之间的高效通信。有两类操作系统应用程序:受信任的操作系统应用程序:“受信任的操作系统应用程序可以在运行时禁用监视或保护功能的情况下运行。它们可以不受限制地访问操作系统模块的内存和API。受信任的任何操作系统应用程序不需要在运行时强制执行它们的计时行为。当处理器支持时,它们可以在特权模式下运行。不受信任的操作系统应用程序:“不允许在运行时禁用监视或保护功能来运行不受信任的操作系统应用程序。它们限制对内存的访问,限制对操作系统模块API的访问,并且当处理器支持其时序行为时,它们是不允许在特权模式下运行。3.通信和代码共享根据图4和图3,一个OS-Applications可以包含多个AUTOSARSWC和关联的Runnables。只有Runnables才允许直接访问变量并执行各自内部的函数调用SWC.一个SWC的内部函数调用和变量是不能被其他SWC公开访问的,因为它们的定义不是由头文件提供给外部接口的,所以无法通过变量直接通信并执行其他SWC的代码。在图5中,代码共享示例说明了这一点,代码共享只允许在SWC内使用,不允许在OS-App的SWC之间共享申请。与其他SWC的通信应该通过RTE执行。Runnable4可能无法执行属于SWC2.2的功能。图5:OS-Applications中的代码共享4.应用软件中的内存分区AUTOSARECU中的应用软件可以由安全相关的SWC和非安全相关的SWC组成作品。根据ISO26262的要求,应保证不同ASIL等级的SWC之间的抗干扰能力。AUTOSAROS将OS-Applications放入一个专属的内存区域,以免被内存相关的故障所干扰。这种机制称为内存分区。操作系统应用程序相互保护,因为在一个操作系统应用程序的内存分区中执行的代码不能修改其他内存区域。AUTOSAROS规范中的相应要求如表1所示。表1:AUTOSAROS的内存分区应用软件-OS-Applications可以由具有不同ASIL等级的SWC组成。但是,具有不同ASIL等级的SWC不应分配给相同的操作系统应用程序。内存分区无法为相同的操作系统提供分配-应用程序的SWC之间的抗干扰性。操作系统仅防止其他操作系统应用程序执行不正确的访问。不会阻止有故障的SWC修改同一操作系统应用程序中其他SWC的内存区域。注意:有关任务级分区的详细信息有关信息,请参阅后续分区。5.SWCMixedASIL中的内存分区SWC可能由具有不同ASIL等级的Runnable组成,因此需要支持这些Runnable之间无干扰的执行环境。由于以下原因,不可能在不同的内存分区中执行一个SWC的不同Runnable:内存分区在OS-Applications级别执行。如图3和图4所示,一个SWC只能分配给一个OS-Applications,所以只有一个内存分区。另外,SWC的Runnables只能被OS-Applications的一个task调用。如图6所示,SWC的Runnables不能分发到多个OS-Applications的任务。图6:带分区的SWC内存分区不能用于分隔同一SWC中的Runnable。如果SWC需要包含不同ASIL的Runnable,并且这些Runnable需要独立执行且互不干扰,OS-Applications级别的内存分区是不够的,必须在任务级别进行内存分区。方法如图7所示。图7:任务级分区任务级内存分区相关要求列在AUTOSAROS规范表2中。使用弱词“可能”表示任务级的实现-级别分区对于AUTOSAROS是可选的。因此,并非每个AUTOSAROS实现都支持任务级内存分区。表2:AUTOSAR操作系统要求-任务级别的内存分区6.内存分区的实现可以使用内存分区机制在系统和软件级别实现各种技术安全概念。图8显示了一种可能的实现方式,而所有基本软件模块都在受信任/监控模式内存分区中执行(图8中以红色突出显示)。某些SWC在逻辑上被分组并放置在单独的不受信任/用户模式内存分区中(以绿色突出显示)。所选软件模块与基本软件模块属于同一受信任/管理模式内存分区(参见图8中以红色突出显示的第四个SWC)。可能有多个不受信任/用户模式分区,每个分区包含一个或多个SWC。在不受信任/用户模式内存分区中执行SWC被限制修改其他内存区域,而在受信任/监视内存分区中执行SWC不受限制。用于安全相关应用的现代微控制器通过专用硬件(内存保护单元(MPU))支持内存分区。注意:假设内存切片将在具有MPU或类似硬件功能的微控制器上实现。通过典型的MPU实现,不受信任的应用程序可以被授予访问微控制器地址空间的多个分区的权限。访问控制被定义为读取、写入和执行访问的组合。MPU的配置只允许在监控模式下进行。注:在某些微控制器实现中,MPU集成到处理器内核中。因此,MPU仅控制对关联内核的访问。其他总线主控器,如DMA控制器和其他内核,不受此分段MPU实例的控制。下表和用例说明了当内存保护单元的配置源自系统要求时的一组可能场景。注意:关于正在使用的特定硬件设备的功能,此表可能不完整。表3:内存保护配置方案图标说明:X-需要保护O-保护可选注:从性能上看,由于总线争用、接口仲裁等,可能会产生副作用。用例1:SWC在同一分区中。同一分区中的SWC可以访问彼此的RAM区域,因此可能会破坏彼此的内存内容。根据定义,SWC无法访问外围设备,因为它们不应该了解底层微控制器架构。当允许SWC直接访问外围设备时,可能会创建不安全的系统。用例2:不同分区中的SWC。不同分区中的SWC不能访问彼此的RAM区域,因此不能破坏彼此的内存内容。根据定义,SWC无法访问外围设备,因为它们不应该了解底层微控制器架构。当SWC被授予对外围设备的直接访问权限时,可能会创建不安全的系统。用例3:MCAL驱动程序MCAL驱动程序是读/写/初始化等功能的集合。它们必须由另一个实体执行,例如BSW或CDD。详情请参见图8。MCAL驱动程序需要对相应外围硬件模块的外围空间进行读/写访问。根据硬件架构,可能还需要处理器的监控模式。2.1.3检测和响应功能安全机制内存分区通过限制对内存和内存映射硬件的访问来提供保护。在一个分区中执行的代码不能修改另一个分区中的内存。内存分区可以保护只读内存段,也可以保护内存映射硬件。此外,在用户模式下执行的SWC对CPU指令(例如重新配置)的访问受到限制。内存分区机制可以在内存保护单元或内存管理单元等微控制器硬件的支持下实现。微控制器硬件必须由操作系统正确配置,以检测和防止不正确的内存访问。然后监视不受信任/用户模式内存分区中的SWC执行。如果在不受信任/用户模式分区中发生内存访问冲突或CPU指令冲突,则错误访问将被阻止并且微控制器硬件会引发异常。OS和RTE通过执行分区关闭或重启该分区的所有软件分区来排除有故障的软件分区。注意:操作系统的实际响应可通过保护挂钩实现进行配置。有关详细信息,请参阅操作系统SWS[i]文档。注意:AUTOSAR文档“应用程序级错误处理说明”[ii]提供了有关错误处理的更多信息。在文档中,解释了如何执行错误处理以及在哪里可以获得所需的数据(例如替代值)。此外,本文档还提供了有关如何在AUTOSAR中执行操作系统应用程序/分区终止和重启的详细说明(用户手册)。2.1.4限制1.具有相同ASIL等级的SWC的内存分区。ISO26262标准要求不同ASIL级别的SWC之间具有抗干扰性[iii]。但是,该标准不要求具有相同ASIL级别的SWC之间具有抗干扰性。允许使用由大量SWC组成的操作系统应用程序。如果单个SWC引起冲突,导致整个内存分区关闭或重新启动,则该内存分区的所有其他功能正常的SWC也会受到影响。2.内存分区不适用于受信任的操作系统应用程序。可信/监控模式内存分区在操作系统和一些MMU/MPU硬件实现的控制之外执行。3、任务级不支持内存分区。任务级分区的实现对于AUTOSAROS实现不是强制性的。因此,可能不支持操作系统应用程序中的抗干扰性。4.内存分区造成的性能损失。根据应用软件的架构以及微控制器硬件和操作系统的实现,内存分区的使用会降低性能。这种惩罚随着每个时间单位执行的上下文切换次数的增加而增加。5.没有基本的软件分区。当前的基础软件规范没有对不同供应商的不同ASIL级别的基础SWC进行内存分区。
