命名空间 ara::sm::s2r
用户指南人工智能生成
为自适应应用程序协调挂起到 RAM(Suspend-to-RAM)状态的进入和退出。
为自适应应用程序协调挂起到 RAM(Suspend-to-RAM)状态的进入和退出。
命名空间 ara::sm::s2r 协调挂起到 RAM(Suspend-to-RAM)机制,以优化 AUTOSAR Adaptive Platform 中的关闭和启动时间(SWS StateManagement §7.5 “Interaction with Suspend-to-RAM Functionality”)。通过中心组件 S2RHub 和已注册的 S2RSatellite 实例,在进入操作系统休眠状态之前通知具备 S2R 功能的进程,并在唤醒时将其重新转入常规运行模式。作为一项关键边界条件,通过内部 StateMachine 方式的使用严格排除了通过 C++ API 进行的访问,同时 IAM 检查为所有涉及的进程上下文提供保护([SWS_SM_00684])。
上下文
命名空间 ara::sm::s2r 在 State Management 模块内提供用于协调挂起到 RAM(S2R)的功能。该机制的目标是通过利用基于 RAM 的操作系统休眠状态代替完全关机和冷启动,从而优化机器的关闭和启动时间(SWS StateManagement §7.5 “Interaction with Suspend-to-RAM Functionality”)。在切换到操作系统的挂起(Suspend)状态之前,必须停用不支持 S2R 的功能载体,并及时通知其可执行文件被标记为 suspendToRamAware 的进程(SWS StateManagement §7.5 “Interaction with Suspend-to-RAM Functionality”)。
核心中枢由类 S2RHub 构成,该类控制与抽象类 S2RSatellite 的实例之间的通信(SWS StateManagement §7.5.1 “S2R Hub”)。S2RHub 的编排既可以在内部通过 State Management 的 StateMachine 方式进行,也可以在外部通过 C++ API(例如在 SMControlApplication 中)进行;这两种方式严格互斥([SWS_SM_00684]、SWS StateManagement 第96页)。对 Hub 的访问和 Satellite 的注册受 Identity and Access Management(IAM)保护([SWS_SM_00706]、[SWS_SM_00714]、[SWS_SM_00715])。
上下文图:State Management、S2RHub、S2RSatellite 和 IAM 之间的交互。来源:SWS StateManagement §7.5.1 “S2R Hub”、[SWS_SM_00684]、[SWS_SM_00715]。
生命周期
ara::sm::s2r::S2RHub 的实例化取决于架构方式:在 StateMachine 模式下,一旦动作列表元素 EnterSuspendToRam、EnterSuspendToRamOS 或 LeaveSuspendToRam 终止,State Management 就会自动创建该实例([SWS_SM_00690])。在调用构造函数 ara::sm::s2r::S2RHub::S2RHub 时,通过 IAM 检查当前进程上下文是否与配置 SuspendToRamHubMapping.process 一致([SWS_SM_00706])。仅允许获得授权的进程执行实例化([SWS_SM_00714])。
Satellite 通过工厂方法 ara::sm::s2r::S2RSatellite::Create 进行初始化([SWS_SM_00716])。由于 S2RSatellite 是抽象类,很可能会实现特定于应用程序的派生类以提供具体的反应(Interpretation)。 问题 Q-e4747345883235e0 (未决)在 Hub 上的注册通过主动调用 ara::sm::s2r::S2RSatellite::Offer 来执行([SWS_SM_00710])。Hub 根据 SuspendToRamSatelliteMapping.process 验证 Satellite 的进程上下文([SWS_SM_00715])。Satellite 保持处于活动注册状态,直至其通过 ara::sm::s2r::S2RSatellite::StopOffer 重新注销([SWS_SM_00710]、[SWS_SM_00713])。
关于状态机的生命周期,存在一项边界条件:负责挂起状态的状态不得配置动作列表元素 LeaveSuspendToRam([SWS_SM_CONSTR_00035])。该元素专门保留给唤醒时的返回阶段(SWS StateManagement 第98页)。
使用路径
该命名空间的典型使用分为注册、休眠状态准备、操作系统挂起以及随后的重新唤醒:
- 注册:支持 S2R 的应用程序创建其 Satellite 并调用
ara::sm::s2r::S2RSatellite::Offer,以在 Hub 上进行注册([SWS_SM_00710])。Hub 与 Satellite 之间的通知大概率通过平台内部的进程间通信进行(Interpretation)。 问题 (未决) - 请求挂起:控制层调用
ara::sm::s2r::S2RHub::RequestToEnterSuspendMode([SWS_SM_00701])。在StateMachine方式中,这由元素EnterSuspendToRam触发,其中其配置值maxActionItemDuration作为超时参数传递([SWS_SM_00689])。 - 通知 Satellite:Hub 寻址所有已注册的 Satellite,并促使执行回调
ara::sm::s2r::S2RSatellite::EnterSuspendMode([SWS_SM_00701]、[SWS_SM_00711])。一旦所有 Satellite 均已响应、已注销或发生超时,RequestToEnterSuspendMode就会返回([SWS_SM_00702])。 - 暂停操作系统:通过调用
ara::sm::s2r::S2RHub::EnterSuspendToRamOs(或通过动作列表元素EnterSuspendToRamOs)启动操作系统的实际休眠状态([SWS_SM_00692])。 - 协调唤醒:重新启动后调用
ara::sm::s2r::S2RHub::RequestToLeaveSuspendMode([SWS_SM_00703]、[SWS_SM_00691])。Hub 指示 Satellite 执行回调ara::sm::s2r::S2RSatellite::LeaveSuspendMode([SWS_SM_00703]、[SWS_SM_00711])。 - 注销:如果进程不想继续参与,则通过
ara::sm::s2r::S2RSatellite::StopOffer注销([SWS_SM_00710]、[SWS_SM_00713])。
时序图:用于准备和终止挂起到 RAM 的调用顺序。来源:[SWS_SM_00701]、[SWS_SM_00702]、[SWS_SM_00703]、[SWS_SM_00707]、[SWS_SM_00710]、[SWS_SM_00711]。
错误场景
在各类的交互中会出现特定的错误条件:
- 创建 Hub 时的 IAM 违例:如果在调用构造函数时进程上下文与
SuspendToRamHubMapping.process不一致,则会触发违例InsufficientPermissionsViolation并报告安全事件SEV_ACCESS_CONTROL_SM_IAM_ACCESS_DENIED</a>([SWS_SM_00706])。 - 拒绝未经身份验证的 Satellite:如果
S2RSatellite的上下文与SuspendToRamSatelliteMapping中保存的进程不同,Hub 将拒绝注册([SWS_SM_00715])。 - Satellite 上的身份验证要求:如果设置了配置项 Force IAM switch,则
ara::sm::s2r::S2RSatellite::Create失败并返回错误代码kAuthenticationRequired([SWS_SM_00716])。 - 通信超时:如果被寻址的 Satellite 在挂起或唤醒阶段未在期限
timeout内响应,则该操作返回错误代码kCommunicationTimeout([SWS_SM_00707])。 - 退出挂起模式时出现问题:如果至少有一个 Satellite 对退出挂起模式的请求给予带有
kRejected的否定响应,则RequestToLeaveSuspendMode以kAtLeastOneHadIssuesToLeave确认总体结果([SWS_SM_00707])。 - 并发 API 使用:在内部
StateMachine方式之外同时使用S2RHub的 C++ API 是被禁止的,并会导致不一致([SWS_SM_00684])。
本指南基于 AUTOSAR_AP_SWS_StateManagement 规范(Release R25-11)。
此版本没有元素数据
类
S2RHub class.
S2RSatellite abstract class.
类图
Abgerundete Rahmen = Namespace- bzw. Klassen-Scopes; hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); graue Boxen = namespace-fremde bzw. externe Basisklassen. Klicken öffnet die jeweilige Klassen- bzw. cppreference-Seite.
gemini-3.8-flash-low· 2026-10-13 · 德文原文