DEENESPTFRRUARHIKOZHNL

模块 ara::exec — Execution Management

Spezifikation: AUTOSAR_AP_SWS_ExecutionManagement.pdf (R25-11) · 54 API-Records

模块指南人工智能生成

协调确定性进程生命周期并在 AUTOSAR Adaptive Platform 上执行状态切换。
AI 生成 未审核 模型: gemini-3.8-flash-medium · 推理强度: medium · 温度: 不可控 · 提示词: 499742989dc9 来源 未决问题(1)
因果锚点:R25-11 自 R25-11 起有效 为此规范版本重新合成。
译自德文指南gemini-3.8-flash-low · 2026-10-13 · 德文原文

协调确定性进程生命周期并在 AUTOSAR Adaptive Platform 上执行状态切换。

Execution Management 模块作为中央平台守护程序,管理 AUTOSAR Adaptive Platform 上 POSIX 进程的确定性生命周期(AUTOSAR AP SWS ExecutionManagement 第18页)。它通过 ExecutionClient 接收执行状态([SWS_EM_02003]),并通过启动和终止进程来异步实现 State Management 委托的功能组转换([SWS_EM_02278])。关键边界条件是禁止跨功能组的启动依赖关系,以及在超时违规时进行严格的错误升级(SWS ExecutionManagement 第65页)。

功能集群 Execution Management (EM) 构成了 AUTOSAR Adaptive Platform 的中央平台守护程序,用于 POSIX 用户空间中的确定性进程管理和生命周期控制(AUTOSAR AP SWS ExecutionManagement 第18页)。它严格分离策略决策 (Policy) 与技术执行 (Mechanism):State Management 指定目标状态,而 EM 控制进程创建、顺序和信号处理(AUTOSAR AP EXP SWArchitecture 第56页)。应用程序和平台服务通过 [SWS_EM_02562] ExecutionClient 经由 [SWS_EM_02003] ReportExecutionState() 报告其状态 [SWS_EM_02000] kRunning,而 State Management 则通过 [SWS_EM_02276] StateClient 请求状态切换(AUTOSAR AP EXP SWArchitecture 第48页)。

G OS Operating System (POSIX Kernel) EM Execution Management (daemon-based) OS->EM Start via main() / Process Spawning SM State Management (daemon-based) EM->SM Process Lifetime Control / undefinedStateCallback App Adaptive Applications / Platform Daemons EM->App Process Lifecycle (fork/exec, SIGTERM, SIGKILL) SM->EM StateClient::SetState() GetInitialMachineStateTransitionResult() App->EM ExecutionClient::ReportExecutionState()

上下文图:Execution Management 作为中央守护程序嵌入在 State Management、POSIX 操作系统和客户端进程之间。来源:AUTOSAR AP EXP SWArchitecture 第56页、AUTOSAR AP SWS ExecutionManagement 第18页、[SWS_EM_02003]、[SWS_EM_02278]。

由操作系统启动后,EM 初始化 State Management,并通过 [SWS_EM_02279] GetInitialMachineStateTransitionResult() 将其同步到机器状态 Startup(AUTOSAR AP SWS ExecutionManagement 第52页)。随后 [SWS_EM_02586] FunctionGroup 状态的转换通过 [SWS_EM_02278] SetState() 异步触发:EM 通过 SIGTERM 有序终止不再需要的进程,在遵循局部启动依赖关系的前提下启动后续进程,并在所有进程就绪后兑现生成的 Future(AUTOSAR AP SWS ExecutionManagement 第53页、SWS ExecutionManagement 第71页)。

Erfolgreicher Funktionsgruppen-ZustandswechselSMEMProcess A (alt)Process B (neu)SetState(targetState)Future<void>Use Case: 关闭不再需要的进程SIGTERM清理与终止进程已终止(EXIT_SUCCESS)Use Case: 启动目标状态的新进程CreateProcess(Process B)InitialisierungReportExecutionState(kRunning)Result<void>Use Case: 完成状态转换Future 已兑现(转换完成)

时序图:包含有序进程终止和进程重启的功能组成功状态切换。来源:AUTOSAR AP SWS ExecutionManagement 第53页、AUTOSAR AP SWS StateManagement 第26页、[SWS_EM_02278]、[SWS_EM_02003]。

为了确保实时性要求,EM 支持确定性进程预映射(Pre-Mapping)以避免缺页异常(SWS ExecutionManagement 第82页),并支持确定性 Worker 池与同步机制(SWS ExecutionManagement 第86页、SWS ExecutionManagement 第92页)。若进程超出了其启动时间窗,错误处理机制将介入:EM 会终止该进程,将 Function Group 置于未定义状态(Undefined State),调用已注册的回调([SWS_EM_02276]),并通过 [SWS_EM_02542] GetExecutionError() 以及模块错误域 [SWS_EM_02281] ExecErrc 提供错误详细信息(AUTOSAR AP SWS ExecutionManagement 第54页)。

Execution Management 的系统边界与功能角色

模块 exec(Execution Management,EM)构成了 AUTOSAR Adaptive Platform 的核心平台服务,用于在基于 POSIX 的用户空间(User Space)中实现确定性进程管理与生命周期管理(AUTOSAR AP SWS ExecutionManagement 第18页)。其架构特征在于控制决策(Policy)与技术执行(Mechanism)的严格分离:功能集群 State Management 做出上层运行模式与迁移决策,而 Execution Management 则作为执行实体,负责进程分配、启动顺序、监控和终止(AUTOSAR AP EXP SWArchitecture 第56页)。

Execution Management 为两种互补角色实现了原生 C++ 运行时接口:应用程序进程以及平台内部守护进程(如 Diagnostic Management、Platform Health Management 或 Communication Management)通过类 [SWS_EM_02562] ara::exec::ExecutionClient 向守护进程报告其执行状态(AUTOSAR AP EXP SWArchitecture 第48页、AUTOSAR AP SWS CommunicationManagement 第34页)。State Management 则通过接口 [SWS_EM_02276] ara::exec::StateClient 与守护进程交互,以请求 Function Group 迁移和机器迁移,并查询状态报告(AUTOSAR AP SWS ExecutionManagement 第17页)。

G OS Operating System (POSIX Kernel) EM Execution Management (daemon-based) OS->EM Start via main() / Process Spawning SM State Management (daemon-based) EM->SM Process Lifetime Control / undefinedStateCallback App Adaptive Applications / Platform Daemons EM->App Process Lifecycle (fork/exec, SIGTERM, SIGKILL) SM->EM StateClient::SetState() GetInitialMachineStateTransitionResult() App->EM ExecutionClient::ReportExecutionState()

上下文图:Execution Management 作为中央守护程序嵌入在 State Management、POSIX 操作系统和客户端进程之间。来源:AUTOSAR AP EXP SWArchitecture 第56页、AUTOSAR AP SWS ExecutionManagement 第18页、[SWS_EM_02003]、[SWS_EM_02278]。

状态架构与多级生命周期模型

Execution Management 中的状态管理在三个相互关联的层级上运行:上层 Function Group 状态(Function Group States)、从守护进程角度观察的外部操作系统生命周期状态(Process States)以及进程内部状态(Execution States)(AUTOSAR EXP PlatformDesign 第29页、AUTOSAR AP SWS ExecutionManagement 第62页)。在守护进程层级,已配置的进程通常依次经过链条 Idle、Starting、Running、Terminating 和 Terminated(AUTOSAR AP SWS StateManagement 第32页)。

对于进程内部视角,该模块定义了枚举 [SWS_EM_02000] ara::exec::ExecutionState。其中,可通过成员函数 [SWS_EM_02003] ReportExecutionState() 规范性地向 Execution Management 报告的状态是 kRunning。对于 Execution Management 而言,诸如 Initializing 等前置阶段是隐式状态,其在 POSIX 进程首次调度且在执行有效载荷代码之前立即开始([SWS_EM_02000]、AUTOSAR EXP AdaptivePlatformInterfacesGuidelines 第11页)。应用运行模式与电源模式(PowerModes)不属于操作系统状态,而是在逻辑上与活动的生命周期阶段 Running 绑定(AUTOSAR AP SWS StateManagement 第32页)。

G Idle Idle (在 Manifest 中定义) Starting Starting (implizit Initializing) Idle->Starting EM 创建进程 (分配资源) Running Running (ReportExecutionState: kRunning) Starting->Running App meldet kRunning Terminating Terminating (SIGTERM / 清理工作) Running->Terminating Zustandswechsel fordert Stop (SIGTERM) Terminated Terminated (进程已终止) Terminating->Terminated 进程终止 (EXIT_SUCCESS / 信号)

状态图:Function Group 状态与 Execution Management 中的生命周期阶段以及内部进程状态的关联。来源:AUTOSAR EXP PlatformDesign 第29页、AUTOSAR AP SWS ExecutionManagement 第32页、[SWS_EM_02000]。

确定性平台启动与初始化

AUTOSAR Adaptive Platform 的启动遵循自操作系统内核发起的严格协调序列(AUTOSAR EXP SWArchitecture 第148页)。操作系统通过 Execution Management 的程序入口点 main() 启动它(AUTOSAR AP SWS ExecutionManagement 第52页)。自初始化完成后,Execution Management 立即创建 State Management 进程(AUTOSAR AP SWS StateManagement 第25页)。

一旦 State Management 完成初始化,便通过 ExecutionClient 使用 [SWS_EM_02003] ReportExecutionState(ExecutionState::kRunning) 向 Execution Management 报告其就绪状态(AUTOSAR AP SWS ExecutionManagement 第52页)。随后,State Management 通过 [SWS_EM_02279] GetInitialMachineStateTransitionResult() 进行同步,等待初始机器迁移至状态 Startup 完成;该方法返回一个 ara::core::Future<void>([SWS_EM_02279]、AUTOSAR EXP SWArchitecture 第151页)。只有在此 Future 成功兑现后,State Management 才会请求切换到后续的 Function Group 状态(AUTOSAR AP SWS StateManagement 第24页)。

平台启动直至初始功能组状态OSEMSMmain()Selbstinitialisierung &Manifest-AuswertungCreateProcess(SM)SM InitialisierungReportExecutionState(kRunning)Result<void>GetInitialMachineStateTransitionResult()Future<void>Future 已兑现(启动完成)SetState(FunctionGroupState &stateXYZ)Future<void>

时序图:从操作系统初始化经由 State Management 启动直至后续状态释放的平台启动流程。来源:AUTOSAR AP SWS ExecutionManagement 第52页、AUTOSAR AP SWS StateManagement 第25页、[SWS_EM_02279]、[SWS_EM_02003]。

Function Group 控制与异步状态迁移

状态切换在应用层通过类 [SWS_EM_02586] ara::exec::FunctionGroup 和 [SWS_EM_02324] ara::exec::FunctionGroupState 的代表实例进行建模。为确保确定性资源管理,FunctionGroup 不可复制([SWS_EM_02322]、[SWS_EM_02327]),仅可移动([SWS_EM_02328]、[SWS_EM_02329]),并可通过实例比较进行评估([SWS_EM_02267]、[SWS_EM_02268])。FunctionGroupState 将 Function Group 与目标状态关联([SWS_EM_02324]),并同时支持复制与移动语义([SWS_EM_02325]、[SWS_EM_02330]、[SWS_EM_02331]、[SWS_EM_02332]、[SWS_EM_02273]、[SWS_EM_02274])。

State Management 通过调用 [SWS_EM_02278] StateClient::SetState() 发起迁移,该调用同步返回一个 ara::core::Future<void>(AUTOSAR AP SWS StateManagement 第31页)。Execution Management 随后执行迁移链:在目标状态中不再配置的运行中进程将收到 SIGTERM 信号(AUTOSAR AP SWS ExecutionManagement 第53页)。在其终止后,EM 启动为目标状态预定的进程,并通过 [SWS_EM_02003] ReportExecutionState() 等待其状态报告(AUTOSAR AP SWS StateManagement 第26页、AUTOSAR SWS ExecutionManagement 第49页)。仅当所有相关进程均成功启动后,SetState() 的 Future 才会完成正向兑现(AUTOSAR AP SWS ExecutionManagement 第53页)。

启动依赖关系(Execution Dependencies)绝不能跨越单个 Function Group 的边界甚至跨越不同状态进行定义(SWS ExecutionManagement 第65页)。发生状态切换时,Execution Management 严格针对所请求目标状态(RequestedState)的进程执行启动依赖项解析(SWS ExecutionManagement 第71页)。若进程在初始状态与目标状态之间的启动配置存在差异,Execution Management 将强制对其进行重启(SWS ExecutionManagement 第65页)。

Erfolgreicher Funktionsgruppen-ZustandswechselSMEMProcess A (alt)Process B (neu)SetState(targetState)Future<void>Use Case: 关闭不再需要的进程SIGTERM清理与终止进程已终止(EXIT_SUCCESS)Use Case: 启动目标状态的新进程CreateProcess(Process B)InitialisierungReportExecutionState(kRunning)Result<void>Use Case: 完成状态转换Future 已兑现(转换完成)

时序图:包含有序进程终止和进程重启的功能组成功状态切换。来源:AUTOSAR AP SWS ExecutionManagement 第53页、AUTOSAR AP SWS StateManagement 第26页、[SWS_EM_02278]、[SWS_EM_02003]。

进程配置、内存分配与预映射

在实际系统中,除了标准应用外,还存在未集成状态报告的进程(Non-reporting Processes)。此类进程在启动后会自动转换至执行状态 Running(SWS ExecutionManagement 第44页)。为了依然能确保依赖链的可靠性,可以在其前面接入一个项目专用的伴随进程(Companion Process),该伴随进程负责评估 Non-reporting 进程的功能就绪状态,并在启动依赖的后续进程之前代为报告 [SWS_EM_02003] kRunning(SWS ExecutionManagement 第44页、SWS ExecutionManagement 第48页)。

在资源需求方面,参数 resourceConsumption.memoryUsage 限制了进程自身可分配的主存大小,在 POSIX 系统上通常通过 RLIMIT_AS 实现(SWS ExecutionManagement 第82页、SWS ExecutionManagement 第104页)。为确保时间确定性与功能安全,Execution Management 支持预映射(Pre-mapping):如果在清单中激活了 Process.preMapping,EM 会将进程的代码段和数据区预先完全映射到物理内存中(SWS ExecutionManagement 第82页)。这避免了首次访问时按需加载(Demand-Loading)所导致的延迟,确保了安全关键错误处理例程的持续可用性,并防范了后续因文件系统损坏而导致的错误(SWS ExecutionManagement 第82页)。

确定性执行时间与同步模型

针对硬实时关键型应用,Execution Management 提供了确定性执行机制(SWS ExecutionManagement 第79页)。周期性进程通过等待点 API 与客户端交互,该 API 控制服务发现、初始化、执行和终止等模式(SWS ExecutionManagement 第79页)。并行数据处理通过 Worker Pool 进行抽象:为确保数据确定性,禁止在 WorkerRunnable 的并发实例之间进行数据交换(SWS ExecutionManagement 第86页)。

为了同步多个冗余或分布式进程,引入了 DeterministicSyncMaster(SWS ExecutionManagement 第92页)。在事件驱动激活模式下,由可配置的策略(例如 N 选 M 多数表决机制)决定何时发送同步响应(SWS ExecutionManagement 第92页)。在周期性激活模式下,初始阶段执行一次性同步,随后由全局时间戳缓冲区确定启动周期,并通过本地计数器和期限监控自主控制后续周期(SWS ExecutionManagement 第92页)。Sync-Master 既可以作为独立进程提供,也可以作为库集成在软件锁步(Software Lockstep)框架中(SWS ExecutionManagement 第94页、SWS ExecutionManagement 第95页)。

发生错误时的行为

在发生错误时,该架构根据通用容错模型划分为错误检测(Error Detection)与随后的错误恢复(Error Recovery)(SWS ExecutionManagement 第86页、SWS ExecutionManagement 第107页)。如果在 Function Group 状态切换期间发生启动超时——例如正在启动的进程未在参数化期限内发送 [SWS_EM_02003] ReportExecutionState(kRunning)——Execution Management 将中止常规流程(AUTOSAR AP SWS ExecutionManagement 第54页)。

在这种情况下,内部升级推测可能包括通过 SIGKILL 强制终止故障进程;在耗尽配置的重启尝试次数后,受影响的 Function Group 将进入未定义状态(Undefined Function Group State)(AUTOSAR AP SWS ExecutionManagement 第54页、[SWS_EM_02542])。 问题 Q-5a8b6ad2e9e22eb4 (未决)进入未定义状态时,Execution Management 会触发在实例化 StateClient 时传入的回调 undefinedStateCallback([SWS_EM_02276]、[SWS_EM_02561])。State Management 随后可通过 [SWS_EM_02542] GetExecutionError() 查询关联事件 ara::exec::ExecutionErrorEvent,该事件提供故障 Function Group([SWS_EM_02546])与错误代码 [SWS_EM_02541] ExecutionError([SWS_EM_02545])([SWS_EM_02542])。若 Function Group 重新处于已定义状态,则 GetExecutionError() 失败([SWS_EM_02542])。

启动超时错误处理SMEMProcess BSetState(targetState)Future<void>CreateProcess(Process B)opt启动超时已过且未达到 kRunningTimeout erkanntSIGKILLFunktionsgruppe in Undefined State versetzenundefinedStateCallback(ExecutionErrorEvent)带错误兑现 FutureGetExecutionError(state)Result<ExecutionErrorEvent>

时序图:状态迁移期间进程启动超时时的错误处理。来源:AUTOSAR AP SWS ExecutionManagement 第54页、[SWS_EM_02278]、[SWS_EM_02276]、[SWS_EM_02542]。

为了实现统一的错误处理,该模块具备错误域 [SWS_EM_02286] ara::exec::ExecErrorDomain(可通过 [SWS_EM_02290] GetExecErrorDomain() 获取,标识名称通过 [SWS_EM_02287] Name() 获取,文本消息通过 [SWS_EM_02288] Message() 获取)。特定的执行错误由枚举代码 [SWS_EM_02281] ExecErrc 表示(如 kNoCommunication),并通过 [SWS_EM_02291] MakeErrorCode() 构造。当启用异常处理时,错误可通过 [SWS_EM_02289] ThrowAsException() 作为 [SWS_EM_02283] ExecException 抛出。此外,析构函数 [SWS_EM_02002] ~ExecutionClient() 确保先前接管的 SIGTERM 处理程序被重置回其初始值,而在创建进程时传入的中止回调则在接收到终止信号时生效([SWS_EM_02560]、[SWS_EM_02562])。更深层次的恢复操作(Recovery Actions,如进程重启或转入应急运行模式)将与 Platform Health Management 协同编排(AUTOSAR SWS ExecutionManagement 第54页)。

进一步详细证据

以下概览将主要规范要求与依据出处归类至所涉及的主题领域:

主题领域主要依据出处功能含义
进程状态报告[SWS_EM_02000], [SWS_EM_02003], [SWS_EM_02562]定义 ExecutionState、创建 ExecutionClient 以及报告 kRunning。
Function Group 控制[SWS_EM_02278], [SWS_EM_02586], [SWS_EM_02324]通过 SetState() 进行异步状态迁移,实例化 FunctionGroup 和 FunctionGroupState。
平台启动[SWS_EM_02279], AUTOSAR AP SWS ExecutionManagement S. 52State Management 同步至初始机器状态 Startup。
错误处理与回调[SWS_EM_02276], [SWS_EM_02542], [SWS_EM_02281]注册 undefinedStateCallback、查询 ExecutionErrorEvent、错误域 ExecErrc。
内存确定性SWS ExecutionManagement S. 82对进程进行完全预映射,以避免按需加载引起的延迟。

本模块指南是基于 AUTOSAR Adaptive Platform Release R25-11 的规范数据自动生成的。

function: 42 class: 6 enumeration: 2 variable: 2 type alias: 1 struct: 1

ara::exec

Defines a class representing the Execution Management error domain.

继承自 ara::core::ErrorDomain

Defines a class for exceptions to be thrown by the Execution Management.

继承自 ara::core::Exception

The ara::exec::ExecutionClient API provides the functionality for a Process to report its Execution State to the Execution Management.

Represents an execution error event which happens in a Function Group.

Class representing Function Group defined in meta-model (ARXML)

Class representing Function Group State defined in meta-model (ARXML)

ara::exec::StateClient is an interface of Execution Management that is used by State Management to request transitions between Function Grou

Returns a reference to the global ExecErrorDomain object.

const ara::core::ErrorDomain & GetExecErrorDomain () noexcept;

Creates an instance of ErrorCode.

ExecErrc 枚举

Defines an enumeration class for the Execution Management error codes.

enum class ExecErrc : ara::core::ErrorDomain::CodeType {...};

Defines the internal states of a Process. Scoped enumeration of uint32_t. Please note that ara::exec::ExecutionState includes only states reportable by the Process to Execution Management and therefore does not include enumerations e.g. the "Initializing" state mentioned in Figure 7.2 and Figure 7.12, which are an implied states for Execution Management. The Initializing state starts when Process is first scheduled (so no code executed yet) and ends when kRunning is reported ([SWS_EM_01004]). The Terminating state starts when termination is requested by Execution Management and ends when the Process terminates ([SWS_EM_01404]). For the reasons mentioned, Execution Management assumes that Process is in initializing state until kRunning will be reported by it.

enum class ExecutionState : std::uint32_t {...};
ExecutionError 类型别名

Represents the execution error.

using ExecutionError = std::uint32_t;

命名空间

模块的 UML 类图

Abgerundete Rahmen = Namespaces; hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); graue Boxen = modulfremde bzw. externe Basisklassen. Klicken öffnet die Klassenseite.

G cluster_1 ara::exec nara__exec__ExecErrorDomain631 ExecErrorDomain nara__core__ErrorDomain335 ara::core::ErrorDomain nara__exec__ExecErrorDomain631->nara__core__ErrorDomain335 nara__exec__ExecException556 ExecException nara__core__Exception792 ara::core::Exception nara__exec__ExecException556->nara__core__Exception792 nara__exec__ExecutionClient880 ExecutionClient nara__exec__ExecutionErrorEvent906 «struct» ExecutionErrorEvent nara__exec__FunctionGroup511 FunctionGroup nara__exec__FunctionGroupState299 FunctionGroupState nara__exec__StateClient893 StateClient