前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AutoSAR专题(二)OS

AutoSAR专题(二)OS

作者头像
xbai921031
发布2024-04-15 16:51:06
1580
发布2024-04-15 16:51:06
举报

AutoSAR OS的核心功能是基于OSEK OS,同时又对OSEK OS做了一些扩展。

OSEK OS提供的以下特性在AutoSAR OS中是支持的:

  • 基于固定优先级的调度
  • 对中断的处理
  • 中断的优先级高于任务
  • 针对操作系统服务的错误使用提供一些保护
  • 提供启动接口StartOS和StartupHook
  • 提供关闭接口ShutdownOS和ShutdownHook

AutoSAR OS还有以下特性:

  • 调度表(ScheduleTable)
  • 栈监控(Stack Monitoring)
  • OS-Application
  • 保护机制(Protection Facilities)
  • 系统可扩展性(System Scalability)
  • 钩子函数(Hook Functions)

01

调度表(ScheduleTable)

静态定义的任务激活机制:使用OSEK计数器和一系列自启动的Alarm。

运行时OS会依次执行每个到期点(Expiry Point),而这种执行机制是由OSEK计数器来驱动的。OS需要知道Expiry Point的执行顺序,由Offset来保证。

到期点(Expiry Point):

  • 任务或者事件激活的激活点
  • 从ScheduleTable开始的system tick的偏移量(Offset)

在运行时,操作系统会轮流执行每个Expiry Point上的Task和事件。

调度表执行有两种情况:

  • 单次触发,即调度表从开始到结束执行一遍
  • 重复触发,即调度表从第一个Expiry Point执行到最后一个Expiry Point,然后再回到第一个开始执行。每个Expiry Point的周期便是调度表的持续时长。

ScheduleTable的控制:

(1)OS提供StartScheduleTableAbs服务,在绝对值“Start”处开始处理ScheduleTable(当OS计数器的值等于Start+InitialOffset时,应该处理调度表上的初始到期点)。

(2)OS提供StartScheduleTableRel服务,以相对于OS计数器的“当前值”的"Offset"处开始处理ScheduleTable(当OS计数器的值等于Now+Offset+InitialOffset时,应该处理调度表上的初始到期点)。

示例一(绝对值调度):

如上图所示,给出一个调度表的Offset分别是2(InitialOffset),5,8,在计数器数值等于65533时调用函数接口StartScheduleTableAbs,传入绝对值“Start”为2,那么当OS计数器的值等于Start+InitialOffset=4时,开始处理调度表的第一个到期点。

示例二(相对值调度):

如上图所示,给出一个调度表的Offset分别是2(InitialOffset),5,8,在计数器数值等于65533时调用函数接口StartScheduleTableRel,传入相对Offset为2,那么当OS计数器的值等于Now+Offset+InitialOffset=1时,开始处理调度表的第一个到期点。

调度表的同步有两种方式:

  • 隐式同步
  • 显示同步

(这部分有点复杂,笔者没有深入研究过,作为使用而不是设计OS的人来说笔者认为知道一些概念就好,如果感兴趣读者可以自行研究,也欢迎一起讨论。)

02

栈监控(Stack Monitoring)

栈监控将在Task和Category 2 ISR进行上下文切换的时候对超出stack使用量的情况进行识别。

03

OS-Application

AutoSAR OS必须能够支持操作系统对象(Task,ISR,Alarm,Schedule Table,Counter)集合,这个集合称为OS-Application。

OS-Application分成两类:

  • 可信的(Trusted)
  • 不可信的(Non-Trusted)

Trusted

Non-Trusted

在监控或保护关闭的情况下运行

允许

不允许

访问内存,操作系统API

不受限制

受限制

在特权模式下运行

允许

不允许

04

保护机制(Protection Facilities)

1.存储保护(Memory Protection):

存储保护仅限于硬件支持存储保护的芯片。

存储保护的对象有:数据(Data),程序(Code)及栈(Stack)。

对栈的保护主要有以下原因:

  • 通过Stack监控可以快速检测到栈的溢出(Overflow和Underflow)
  • 为满足某些功能安全的约束

对数据的保护:

OS-Application可以有私有数据部分,属于同一OS-Application的Task和ISR共享这些数据区域。

对程序的保护:

程序段是可以由OS-Application私有,也可以在OS-Application之间共享(使用共享库),在不使用程序段保护的情况下,执行不正确的代码将导致一些违规。

2.时间保护(Timing Protection)

当任务和中断运行时错过其Deadline,实时操作系统就会发生错误。

Deadline是指任务和中断服务必须完成的那个时间点。

(Response Time <= Deadline <= Period)

示例:

假设有3个任务A,B和C,它们的优先级,执行时间,Deadline分别定义如上图所示。

假设这3个任务都在时间点0的时候开始执行,当任务执行时间,执行点,都如上图规定的时候,3个任务就会运行的比较正常,每个任务都满足其Deadline,如下图所示:

但是当任务A和任务B出现异常(任务A和任务B执行时间超过预期,任务B过早地到来),最终任务A和任务B都满足其Deadline,而任务C却由于任务A和任务B的异常运行没有满足其Deadline,如下图所示:

Task或者ISR是否能满足其Deadline由以下因素决定:

  • Task/ISR的执行时间
  • Task/ISR因为较低优先级的Task/ISR占用共享资源而产生的阻塞时间
  • Task/ISR到达时间的间隔率

为确保Task/ISR能满足Dealine,软件架构师在设计任务的时候就要考虑这些因素。

3.服务保护(Service Protection)

OSEK OS已经通过服务调用返回的状态码提供了一些服务保护,这将为服务保护提供基础。

05

系统可扩展性(System Scalability)

为了根据用户需求定制操作系统并充分利用处理器,划分了以下扩展等级(Scalability Class):

06

钩子函数(Hook Functions)

提供以下类型的钩子函数(Hook Function):

  • Startup Hook
  • Shutdown Hook
  • Error Hook

参考文献:

AUTOSAR_CP_SWS_OS

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 进击的程序喵 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档