AutoSAR OS的核心功能是基于OSEK OS,同时又对OSEK OS做了一些扩展。
OSEK OS提供的以下特性在AutoSAR OS中是支持的:
AutoSAR OS还有以下特性:
01
—
调度表(ScheduleTable)
静态定义的任务激活机制:使用OSEK计数器和一系列自启动的Alarm。
运行时OS会依次执行每个到期点(Expiry Point),而这种执行机制是由OSEK计数器来驱动的。OS需要知道Expiry Point的执行顺序,由Offset来保证。
到期点(Expiry Point):
在运行时,操作系统会轮流执行每个Expiry Point上的Task和事件。
调度表执行有两种情况:
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 | |
---|---|---|
在监控或保护关闭的情况下运行 | 允许 | 不允许 |
访问内存,操作系统API | 不受限制 | 受限制 |
在特权模式下运行 | 允许 | 不允许 |
04
—
保护机制(Protection Facilities)
1.存储保护(Memory Protection):
存储保护仅限于硬件支持存储保护的芯片。
存储保护的对象有:数据(Data),程序(Code)及栈(Stack)。
对栈的保护主要有以下原因:
对数据的保护:
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能满足Dealine,软件架构师在设计任务的时候就要考虑这些因素。
3.服务保护(Service Protection)
OSEK OS已经通过服务调用返回的状态码提供了一些服务保护,这将为服务保护提供基础。
05
—
系统可扩展性(System Scalability)
为了根据用户需求定制操作系统并充分利用处理器,划分了以下扩展等级(Scalability Class):
06
—
钩子函数(Hook Functions)
提供以下类型的钩子函数(Hook Function):
参考文献:
AUTOSAR_CP_SWS_OS