本系列文章将从以下六个方面来介绍AP平台核心技术:
继上一篇
状态管理State Management(SM)
State Management(SM)状态管理可以被视为作为执行管理和其他功能集群之间接口的中心功能集群,以定义自适应平台的行为。
状态管理的主要角色是实现一个或多个状态机,其操作协调一个或多个自适应应用程序集(功能组状态)和自适应平台(机器状态,特别是MachineFG功能组)本身,使得机器行为能够满足特定项目的系统设计要求,基于外部和内部条件和信息的逻辑组合。
此外,状态管理支持平台健康管理的错误反应,并基于诊断、更新和配置管理以及网络管理配置自适应应用程序的可用性。
3.1 状态管理(SM)概述
执行管理支撑进程级的启停控制,第一部分我们介绍了进程的启动顺序,大家可能会有疑问,进程应该何时被终止,如何被终止?谁来触发终止的动作?
其实进程的终止和启动一样,都是由EM来执行,所有的AP进程都是EM的子进程,EM有这样的能力。
但执行管理本身不做决策,而是由状态管理决定什么时候启动/停止应用。
状态管理是一种管理AUTOSAR自适应平台上的状态和事件的模块。它负责根据不同的功能需求和优先级,设置平台和应用程序的内部状态,
总结来说, 在AUTOSAR自适应平台中,EM和SM是两个相互配合的模块,用于管理进程的启动和终止。EM执行进程的实际操作,包括创建和销毁进程,而SM根据功能需求和优先级确定进程的状态。换句话说,SM指定进程的状态转换,EM根据指令进行进程的操作。
SM是一个ECU开发项目专用的功能集群,由系统集成商完成。它管理AUTOSAR自适应平台的所有操作状态方面,包括接收和处理事件,根据事件/请求的优先级设置相应的内部状态。状态管理可能有一个或多个状态机,根据项目的需要而定。
状态管理通过项目特定的ara::com服务接口和自适应应用程序进行通信,该接口由下面描述的“字段”组成。状态管理和其他功能集群之间的通信应通过每个功能集群定义的标准化接口进行。
AP平台中执行管理负责控制进程的启动和停止。EM根据机器清单和执行清单中的信息,将进程分配到不同的功能组和功能组状态。
功能组是一种逻辑分组,用于控制具有相同功能的进程。功能组状态是一种运行模式,用于指定哪些进程需要在该模式下运行。
举个例子:
假设进程1 2 3共同的完成了自动泊车功能,它们就是功能协同相关的进程,我们把它们划分到同一个功能组里。
假设进程4 5 6共同完成了OTA升级的功能,那么我们根据它们的功能,把它们划分到一个功能组里,根据功能组承载的功能,我们可以灵活的划分功能组的不同状态。
功能组是AUTOSAR的一个概念,它将功能相关的进程抽象为功能组进行统一的管理,以实现软件的复用和可移植性。
功能组可以包含一个或多个软件组件,每个软件组件都有自己的接口和运行时环境。功能组之间可以通过服务或API进行通信。
注意:一个进程必须分配到一个功能组。
EM要求每个机器必须有一个特殊的功能组,叫做“MachineFG”,它表示机器的整体运行状态。这个功能组有三个固定的功能组状态,叫做“机器状态”,它们是:
Startup:机器启动时的状态,EM会在这个状态下启动一些必要的进程,比如状态管理(SM)。
Shutdown:机器关闭时的状态,EM会在这个状态下停止所有的进程,并调用一个特定的进程来关闭操作系统(OS)。
Restart:机器重启时的状态,EM会在这个状态下停止所有的进程,并调用一个特定的进程来重启操作系统(OS)。
除了这三个固定的机器状态,还可以根据机器的实际需求,定义一些额外的机器状态,比如Diagnostics(诊断模式),Idle(空闲模式)等。这些额外的机器状态不是强制性的,可以根据不同的项目进行定制。
"MachineFG"是一个具有预定义名称的功能组,主要用于控制机器生命周期和平台级应用程序的进程。其他功能组是一种通用工具,用于(例如)控制用户级应用程序的进程。
功能组是一种逻辑分组,用于将具有相同或相似功能的进程聚合在一起。功能组可以有多个状态,表示该功能组所包含的进程的运行情况。
执行管理根据功能组的状态,决定是否启动或停止该功能组所包含的进程。这样可以提高执行效率,节省资源,实现动态调度。
Restart状态:
EM不执行操作系统的重启,为了重启系统,它要求至少有一个进程提供重启操作系统的机制,这个进程运行在Machine State的Restart状态下
Shutdown状态:
EM(执行管理)模块不直接执行操作系统的停止,而是依赖于一个特定的进程来提供关闭操作系统的机制。这个进程应该配置在Machine State(机器状态)的Shutdown(关闭)状态下,这是一个由EM管理的功能集群,它表示机器的生命周期阶段。
EM应该确保在名为MachineFG的功能组下有一个Shutdown状态,这是一个由SM(状态管理)模块管理的功能集群,它表示一组功能相关的进程的集合。当SM请求EM切换到Shutdown状态时,EM会执行相应的动作,例如停止其他应用程序进程,释放资源,切换到备份模式等。
SM在Shutdown模式下也应该保持运行,以便处理可能发生的错误或异常。Shutdown模式的目的是以干净的方式关闭机器(包括SM),但这个过程可能会失败或被中断,所以SM必须在Shutdown模式下保持存活,以便恢复或重启机器。
Off状态:
执行管理在启动时将所有功能组状态设置为Off,然后将机器状态切换到Startup(启动)。
EM根据进程的执行清单中定义的期望状态来决定哪些进程需要被启动或停止。当EM收到来自SM(状态管理)模块的状态改变请求时,EM会停止不符合新状态的进程,并启动符合新状态的进程。EM在完成进程的启动和停止后,会向SM确认状态已经改变。
功能组状态与进程状态转换对照表是一种管理进程生命周期的方法,它根据功能组的状态来决定哪些进程应该运行。如图:功能组FunctionGroupX 有5个状态,从off, state1到state4,每个状态对应一组进程的运行状态。
例如,当功能组状态为off时,所有进程都是关闭的;
当功能组状态为state1时,只有进程A是运行的;
当功能组状态为state4时,所有进程都是运行的。
通过改变功能组的状态,可以实现对进程的运行的控制。例如,如果只需要进程A运行,可以将功能组状态设置为state1。
EM根据清单文件和SM的状态请求,就可以确定每个功能组状态下的进程集合(类似功能组状态与进程状态转换对照表),从而实现控制进程的启动和停止。
3.3 状态管理的接口
Interfaces for State Managemen
StateClient 这个接口它让应用程序可以控制和监测FunctionGroup的状态变化,以及处理可能发生的执行错误。
StateClient接口中包含了以下几个方法:
GetExecutionError:这个方法可以查询某个FunctionGroup为什么会出现未定义的状态,以及导致这种状态的错误原因是什么。
GetInitialMachineStateTransitionResult:这个方法可以获取机器状态从初始状态到启动状态的转换过程中的结果,包括是否成功,有没有错误,以及转换所花费的时间。
SetState:这个方法可以为某个FunctionGroup请求一个新的状态,比如停止,暂停,恢复,或者重置。这个方法会返回一个布尔值,表示请求是否被接受。
StateClient:当创建这个接口的实例时,需要提供一个回调函数,用于处理FunctionGroup意外进入未定义状态的情况。回调函数会接收到发生错误的FunctionGroup作为参数,然后可以根据需要进行处理。
软件集群SoftwareClusters(SWCL)一种原子的、可更新的、可扩展的软件单元。一个SoftwareCluster包含所有与更新安装或部署一组新功能/应用程序相关的部分。
SoftwareCluster将软件按照功能或特性进行分组和管理,它可以提高软件的可更新性、可扩展性和可维护性。软件集群由一个或多个进程组成,实现了一组特定的功能或应用程序。软件集群可以部署在一个或多个机器上,也可以跨越多个机器,实现分布式或并行计算 。
软件集群的一个重要特点是它支持自适应诊断管理,这意味着它可以根据不同的软件集群提供不同的诊断服务和接口。每个软件集群都有自己的诊断地址,用于接收和处理来自软件集群内部或外部的诊断请求。每个诊断地址都对应一个诊断服务器实例,用于执行诊断任务和返回诊断结果。每个诊断服务器实例都有自己的ODX文件,用于定义诊断数据和逻辑 。
软件集群通常需要配置以下几项内容:
功能组(Function group):用来说明软件集群包含了什么样的功能,比如导航、泊车、通讯等。
进程:用来执行具体的软件代码,比如导航进程、泊车进程、通讯进程等。一个软件集群可以包含多个进程,但是它们要有相同的功能组。
软件集群设计 software cluster design 是对software cluster 的结构和行为的描述,它定义了software cluster 中的应用程序和服务的接口、依赖关系、通信协议等。software cluster design 也规定了software cluster 的部署方式和更新策略。
Machine state是指一个Machine的整体状态,它反映了该Machine上所有功能集群的功能组状态的综合情况。
Machine state由状态管理(State Management)模块控制和监视。
状态管理与项目强相关,它的主要角色是实现一个或多个状态机, 其操作协调一个或多个自适应应用程序集(功能组状态)和自适应平台(机器状态,特别是MachineFG功能组),使得机器行为能够满足特定项目的系统设计要求,基于外部和内部条件和信息的逻辑组合。
机器状态有三种可能的值:启动(Startup)、关机(Shutdown)和重启(Restart)。
应用程序实例(进程)是在AP平台上运行的软件单元,它有自己的内部执行状态(Execution State),用来表示进程的生命周期阶段,例如初始化状态,运行状态,终止状态等。执行状态由进程自己管理,并通过执行管理API ExecutionState枚举来公开。
执行管理(Execution Management)是一种控制和管理进程的组件,它根据执行清单(Execution Manifest)文件中的信息来启动和配置进程,并提供API来监控和控制执行状态。
执行管理还维护了进程状态(Process State),用来表示进程在系统中的角色,例如就绪状态,运行状态,阻塞状态等。
进程状态由执行管理根据执行状态的变化而更新。执行状态和进程状态是分开维护的,它们之间没有直接的依赖关系。这样可以让进程状态更灵活地适应未来的变化,而不影响进程的内部执行状态。
Process state从执行管理的角度描述进程的生命周期:
每个进程都是独立的,因此有自己的进程状态。进程状态代表执行管理对执行状态的内部跟踪。执行管理使用进程状态来解决执行依赖关系、管理超时等。
除了进程状态的现有值(Idle, Starting, Running, Terminating, Terminated)之外,实现可以根据需要添加自定义的状态,不影响基本的状态。
Idle状态:表示进程还没有被创建和分配资源,是进程的初始状态。
Starting状态:表示进程正在被创建和分配资源,是进程的启动阶段。
Running状态:表示进程已经被创建和分配资源,并向执行管理模块报告了kRunning执行状态,是进程的正常运行阶段。对于不报告执行状态的进程,执行管理模块会自动将其从Starting状态转换为Running状态。
Terminating状态:表示进程正在被终止,是进程的结束阶段。进程可以通过发送SIGTERM信号给执行管理模块来请求终止。
Terminated状态:表示进程已经被终止并释放了资源,是进程的最终状态。执行管理模块会观察所有进程的退出状态。
在AP中,自适应应用程序如何向EM报告执行状态呢?
主要有以下两种方式:
通过ExecutionClient接口:这是一种由AUTOSAR提供的标准接口,它允许自适应应用程序向EM报告执行状态,例如报告进程已经初始化完毕,或者请求终止进程等。EM会根据收到的执行状态报告来执行相应的操作,例如启动或停止其他依赖的AA,或者通知状态管理(State Management,SM)模块等。
通过操作系统接口:这是一种由操作系统提供的基本接口,它允许自适应应用程序向EM发送信号(Signal),例如发送SIGTERM信号来请求终止进程等。EM会根据收到的信号来执行相应的操作,例如释放资源,或者通知SM模块等。
执行管理启动的所有进程(即AUTOSAR自适应平台的所有进程和自适应应用的所有进程)应通过ExecutionClient接口向执行管理报告其执行状态。
注意:所有的EM API都位于ara::exec命名空间中。
执行管理会监控进程从创建到报告Running的时间,如果超时,则认为发生错误。
超时时间由每个进程的Exectuion Manifest配置,但特殊的不报告状态的进程这个时间为0。
发生超时后,EM会要求进程停止,如果进程不按要求停止,EM会请求OS直接杀死进程,当进程停止后,EM会根据配置重启几次,直到成功或最终失败。
同样,EM也会向SM报告不能满足状态转换。
进程停止超时
执行管理会监控每个进程停止的时间,默认超时时间在Machine Manifest中配置,但每个进程可以在Exectuion Manifest中重写这个超时时间。
当停止超时之后,EM会请求OS直接杀死进程(对于POSIX来说,使用SIGKILL信号)。
同时,EM会向SM报告错误,指明不能满足状态转换。
在VRTE的执行管理编辑器中,可以配置进程的启动和停止超时,如图所示,填写的时间参数以毫秒为单位。
3.10 状态金字塔
状态金字塔是一种图形化的表示AUTOSAR自适应平台上的状态和进程之间关系的方法,它有三个层次:车辆状态、机器状态和功能组状态。
每个进程都分配到一个功能组,每个功能组都隶属于一个ECU或Machine,每个ECU或Machine都安装在一个车辆上。
状态管理模块负责根据不同的事件和需求来设置和切换这些状态,从而影响相关应用程序进程的启动或停止。每个状态都有自己的状态机,可以独立地进行状态转换。ECU、功能组和应用程序都可以在不同的状态下打开或关闭。AUTOSAR提供了一个接口,让SM可以请求改变状态。
Machine State
机器状态是指自适应平台的一个功能集群,它表示平台的生命周期阶段,例如启动,关闭,重启等。
机器状态由状态管理模块来控制和确定,它根据其他模块或应用程序的信息和请求来决定机器状态的切换。
Function Group State
功能组状态是指自适应平台的一个功能集群,它表示一组功能相关的进程的集合,这些进程的启动或停止取决于功能组状态。
功能组状态由状态管理模块来控制和确定,它根据其他模块或应用程序的信息和请求来决定功能组状态的切换。功能组状态可以影响平台和应用程序的执行过程和资源分配。
Execution state
执行程序的状态,是指一个功能集群(Function Group)内部的一个进程(Process)或者一个自适应应用程序(Adaptive Application)的内部生命周期。它表示应用程序进程的运行时状况,例如就绪,运行,暂停,停止等。
执行状态由执行管理模块来控制和确定,它根据其他模块或应用程序的信息和请求以及执行清单中的信息来决定执行状态的切换。
Process state
进程状态,是指一个功能集群(Function Group)内部的一个进程(Process)或者一个自适应应用程序(Adaptive Application)的生命周期状态。进程状态有四种可能的值:未创建(NotCreated)、创建中(Creating)、已创建(Created)和销毁中(Destroying)。进程状态由进程管理(Process Management)模块控制和监视。
执行状态有四种可能的值:未启动(NotStarted)、启动中(Starting)、运行中(Running)和停止中(Stopping)。执行状态由执行管理(Execution Management)模块控制和监视。
本文作者:刘向,汽车嵌入式工程师
已完成
数据加载中