如图显示了AP的架构。自适应应用程序(AA)运行在 ARA(AUTOSAR自适应应用程序运行时)之上。ARA由功能集群提供的应用接口组成,功能集群属于自适应平台基础或自适应平台服务。自适应平台基础提供 AP 的基本功能,自适应平台服务提供AP 的平台标准服务。任何 AA 也可以向其他 AA 提供服务,如图中的非平台服务。
从AA的角度来看,功能集群的接口,无论是自适应平台基础还是自适应平台服务的接口,都无关紧要–它们只是提供指定的C++接口或AP未来可能支持的任何其他语言绑定。在引擎盖下确实存在差异。此外,请注意,在ARA(AUTOSAR Runtime for Adaptive applications)接口之下,包括在AA上下文中调用的 ARA(AUTOSAR Runtime for Adaptive applications) 库,可以使用 ARA 之外的其他接口来实现 AP 的规范,这取决于AP实现的设计。
POSIX API的语言绑定基于C++,C++标准库也是ARA(AUTOSAR Runtime for Adaptive applications)的一部分。关于OS API,只有PSE51接口(POSIX 标准的单Process 配置文件)作为ARA(AUTOSAR Runtime for Adaptive applications)的一部分可用。选择PSE51 的目的是为现有的 POSIX 应用程序提供可移植性,并实现应用程序之间的无千扰。
应用程序的生命周期由执行管理(EM)管理。应用程序的加载/启动通过使用EM的功能进行管理,需要在系统集成时或运行时进行适当配置才能启动应用程序。事实上,从EM的角度来看,所有功能集群都是应用程序,除了EM本身外,它们也以同样的方式启动。图 4.2 展示了 AP 内和 AP 上不同类型的应用程序。
请注意,应用程序何时启动或终止不是由EM决定的。名为状态管理(SM)的特殊FC是控制器,它根据系统设计对EM发出指令,对不同状态进行仲裁,从而控制整个系统的行为。由于这里的系统指的是AP及其应用程序运行的整台Machine,因此内部行为的实现是针对具体项目的。SM还与其他 FCs交互,以协调整个Machine的行为。SM 只应使用标准 ARA 接口,以保持不同 AP 栈实现之间的可移植性。
应用程序交互
关于AAs之间的交互,PSE51不包括IPC(Inter-ProcessCommunication),因此AAs之间没有直接的交互接口。通信管理(CM)是唯一明确的接口。CM 还为 Machine 内和Machine 间提供面向服务的通信,这对应用程序是透明的。无论服务和客户端应用程序的拓扑部署如何,CM 都会处理服务请求/回复的路由选择。请注意,其他 ARA 接口可能会在内部触发 AAs 之间的交互,但这并不是一个明确的通信接口,而只是各 ARA 接口所提供功能的副产品。
非标准接口
AA 和功能集群可使用任何非标准接口,但这些接口不得与标准 AP 功能相冲突,并且必须符合项目的 Safety/Security要求。除非它们是纯应用本地运行库,否则应注意尽量减少使用,因为这将影响软件在其他 AP 实现中的可移植性。
需要 AP 操作系统才能提供多进程 POSIX 操作系统功能。每个 AA 都是作为一个独立的进程实现的,具有自己的逻辑存储器space和 namespace。请注意,单个AA可能包含多个进程,这可以部署在单个AP实例上,也可以分布在多个AP实例上。从模块组织的角度来看,每个进程都由操作系统从可执行文件实例化。可以从单个可执行文件实例化多个进程。此外,AA 可能构成多个可执行文件。
所有这些 Process(进程)都可以是单线程 Process(进程) 或多线程 Process(进程)。不过,根据 Process(进程)所属逻辑层的不同,它们可以使用的OS API也不同。如果 Process(进程)是运行在 ARA 上的 AAs,则只能使用PSE51。如果 Process(进程)属于功能集群,则可以自由使用任何可用的 OS 接口。总之,从 OS 的角度来看,AP 和 AA 只是一组Process(进程),每个 Process(进程)都包含一个或多个线程–这些 Process(进程)之间没有任何区别,但是否提供任何分区取决于 AP 的实现。这些Process(进程)通过 IPC 或任何其他可用的 OS 功能进行交互。请注意,AA Process(进程)不能直接使用IPC,只能通过ARA进行通信。
四、基于库或基于服务的功能集群实施
如下图所示,功能集群可以是自适应平台基础模块或自适应平台服务。如前所述,它们通常都是Process。要与同为Process 的 AAs 交互,它们需要使用 IPC。为此,有两种可供选择的设计方案。一种是"基于库"的设计,即由功能集群提供并链接到 AA 的接口库直接调用 IPC。另一种是"基于服务"的设计,即 Process 使用通信管理功能,并将服务端代理库链接到 AA。代理库调用通信管理接口,在 AA Process 和服务端 Process之间协调 IPC。请注意,AA 是直接使用通信管理功能执行IPC,还是通过代理库与服务端直接混合执行 IPC,这取决于实施情况。
选择功能集群设计的一般准则是,如果只在本地 AP 实例中使用,则基于库的设计更合适,因为它更简单、更高效。如果从其他 AP 实例以分布式方式使用,建议采用基于服务的设计,因为无论客户 AA 和服务位于何处,通信管理都能提供透明的通信。属于自适应平台基础的功能集群是"基于库"的,而自适应平台服务则是"基于服务"的,正如其名称所示。
最后要注意的是,只要FC符合定义的RS和SWS,就允许FC的实现不包含Process,而是以库的形式实现,并在 AA Process 的上下文中运行。在这种情况下,AA 与 FC之间的交互将是常规的过程调用,而不是如前所述的基于IPC的交互。
功能集群之间的交互
一般来说,功能集群之间可以通过 AP 的特定实现方式进行交互,因为它们不受限于ARA 接口,例如 PSE51 就限制了 IPC 的使用。事实上,它可以使用其他功能集群的ARA 接口,这些接口都是公共接口。功能集群之间的一种典型交互模式是使用功能集群的受保护接口,提供实现功能集群特殊功能所需的特权访问。
此外,AP18-03 引入了 Inter-Functional-Cluster(IFC)接口的新概念。它描述了 FC 向其他 FCs 提供的接口。请注意,它不是 ARA 的一部分,也不构成对 AP 实施的正式规范要求。提供这些接口的目的是通过明确 FCs 之间的交互来促进 AP 规范的制定,同时也可为 AP 规范的用户提供更好的 AP 架构视图。FC SWS 的附件中描述了这些接口。
Machine/硬件
AP将其运行的硬件视为 Machine 。这样做的理由是为了实现一致的平台视图,而不考虑可能使用的任何虚拟化技术。 Machine 可以是真正的物理 Machine 、完全虚拟化的Machine、准虚拟化的 OS、OS 级虚拟化容器或任何其他虚拟化环境。在硬件上,可以有一台或多台 Machine ,一台 Machine 上只能运行一个 AP 实例。一般认为,这种"硬件"包括一个芯片,承载一个或多个 Machine 。不过,如果 AP 实现允许,也可以由多个芯片组成一台Machine 。