• 102查看
  • 0回复

[Autosar] Adaptive Autosar执行管理需求汇总

[复制链接]

该用户从未签到

发表于 28-4-2024 19:14:26 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


前言

执行管理是AP的一个功能组件,负责平台初始化和应用的启动、停止,它基于一个或者多个manifest文件执行上述动作,比如说可执行程序何时启动以及在哪启动。

执行管理本意是代替Linux系统中的init进程或者systemd相关功能,是系统起来之后用户空间的第一个进程。

实际上,无论是开源的AP代码、商业版本的AP代码或者自研的AP代码,很少看到执行管理作为用户空间第一个进程存在而设计。

EM/执行管理是Adaptive Autosar基础的三大模块之一,这三个模块高内聚高耦合。我们先盘点一下执行管理模块的相关需求。

名词解释

    EM:执行管理

    Modelled Process:和描述文件有关联的进程

    Reporting Process:向EM报告状态的进程

    Non-Reporting Process:不期望向EM报告状态的进程

    Companion Process:由于Non-Reporting Process不报告状态,但是其它程序依赖这个程序,因此采用companion process代替Non-reporting Process报告状态

    Self-Terminating Process:运行程序自行终止并且退出码为Success的进程

    Unexpected Termination:退出码不是Success

    Execution Dependency:程序退出或者启动的依赖。(特指顺序依赖)

    Deterministic Execution Client:确定性执行管理客户端


AP标准下的执行管理需求汇总

程序(组)属性相关需求

    优先级、权限相关设置

    调度相关策略

    资源分配相关属性:RAM、CPU使用率、工作文件夹、内存资源监控

    程序ID

    无子进程

    程序入参、环境变量

    一个进程属于一个进程组


程序启动停止相关需求

    同一个实例可多次启动

    实例在启动前进行完整性和授权性校验

    程序应按顺序启动

    程序应按顺序退出

    支持程序重启


执行管理接口相关需求

    退出时应通知其他程序状态变更

    报告自身的资源消耗

    报告自身的程序状态(初始化、运行、关闭)


执行管理调度策略相关需求

    外部触发运行(周期性触发或者事件触发)

    周期性运行

    确定性冗余执行(软件锁步)

    时间触发运行


执行管理错误处理相关需求

    异常退出时记录日志,设置进程组状态


AP EM内部模块一览

执行管理内部需要和状态管理等其他AP模块联动,此外由于QNX和Linux的系统差异,需要对不同的操作系统平台进行功能抽象。相关的内部模块如下:

    Application Launcher\Worker

    Execution Manager

    Machine State Manager

    Process State Client

    Process State Notifier

    State Client

    Execution Client

    Config Loader

    Function Group Manager

    Function Group accessor

    Function Group channel

    Function Group client

    Function Group Controller

    AraLog

    Printf Log

    System Log

    Platform 抽象


执行管理相关模块需要解析配置,完成功能组的关联、程序状态的控制,对外需要连接各种State Manager、控制Machine的各种配置。相关的信息需要日志存储,由于不同的开发阶段有不同的需求体现,因此执行管理配置了多个日志功能。

部分系统/库函数调用一览

如果想自己实现一套执行管理的功能,并且可以在不同的平台下均可正常运行。那么,系统调用必须清楚。下面让我们看一下QNX和Linux平台下的部分系统调用。

QNX平台部分系统/库函数调用

    chdir

    getcwd

    posix_spawnattr_init

    posix_spawnattr_getxflags

    posix_spawnattr_setxflags

    posix_spawnattr_setrunmask

    posix_spawnattr_setcred

    posix_spawnattr_settypeid

    posix_spawnattr_setschedparam

    posix_spawnattr_setschedpolicy

    posix_spawnattr_setpgroup

    posix_spawn

    posix_spawn_file_actions_destroy

    posix_spawn_file_actions_init

    posix_spawn_file_actions_addclose

    sched_getscheduler

    sched_getparam

    setrlimit

    getrlimit

    schedctl

    APS_INIT_DATA

    pthread_attr_init

    pthread_attr_create

    pthread_attr_destroy

    pthread_attr_setnamenp

    pthread_join


Linux平台部分系统/库函数调用

    setgid

    setuid

    setpgid

    sched_getaffinity

    sched_setaffinity

    chdir

    execv函数族

    access

    fork

    setrlimit


从上述两个平台的接口可知,这两个平台的接口还是有部分不兼容的,虽然同是POSIX平台,但是不是完全使用的标准POSIX接口。

因此,在研发阶段,一定对平台相关的接口进行抽象,以便于实现跨平台。

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 14-5-2024 00:38 , Processed in 0.186096 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.