AUTOSAR操作系统(AUTOSAR OS)深度解析(上)
1、OSEK OS
1.1 OSEK OS介绍
AUTOSAR OS是基于 OSEK OS发展而来,向下兼容OSEK OS,所以了解AUTOSAR OS之前我们了解一下OSEK OS。
OSEK操作系统(OS)是一个为分布式嵌入式系统所定义的单核操作系统。为适应汽车电子可靠性、实时性、成本敏感性的需求,OSEK OS特征如下:
1.2 OSEK OS处理等级
OSEK操作系统定义了三层处理等级:任务层(task level)、调度器的逻辑层(logicallevel for scheduler)和中断层(interrupt level)。如下图所示:
根据同一调度系统里任务的可抢占属性,任务层分为全抢占、非抢占和混合抢占(即既有可抢占任务也有不可抢占任务)。任务的执行时序由调度器(Scheduler)根据调度规则而决定。处理器中有一部分中断是不受操作系统控制的中断,称为一类中断,受操作系统控制的中断称为二类中断。
OSEK操作系统的优先级规则如下:
AUTOSAR OS 完全继承了上述特性。
1.3 OSEK OS任务
1.3.1 基本任务与扩展任务
Task是OS调度的基本单位,Runables和底层基础服务都运行在Task中。
OSEK 操作系统中有两种任务:基本任务(Basic Task)和扩展任务(Extended Task)。基本任务有三种不同的状态,分别为运行状态(running)、就绪状态(ready)和阻塞状态(suspending)。处于阻塞状态的任务由API函数或报警器(Alarm)激活进入就绪状态,处于就绪状态的任务由调度器决定是否启动进入运行状态,处于运行状态的任务可能被高优先级的任务或中断抢占从而进入就绪状态,任务运行结束后将自己挂起进入阻塞状态。与基本任务相比,扩展任务多了等待状态,当任务的运行需要等待某一或某些事件时进入等待状态(waiting),当任务所等待的事件被置位时,任务进入就绪状态。基本任务与扩展任务的状态机及其之间的切换如下图所示。
因为基本任务没有等待状态,所以只能够在任务启动和终结时进行同步,基本任务的优点是占用较少的内存和执行时间。扩展任务的优点是包含多个同步点,没有同步请求的麻烦,当进一步的工作出现信息缺失时,任务切换至等待状态;其缺点是占用较多的内存和执行时间。
1.3.2 OSEK OS任务符合类
根据不同的软硬件需求,OSEK OS定义了四种符合类(Conformance classes, CC),分别是 BCC1, BCC2, ECC1和ECC2 (B:Basic, E:Extend) ,各种符合类及其属性见下表。
属性 | BCC1 | BCC2 | ECC1 | ECC2 |
支持多次任务激活 | No | Yes | No | Yes |
每个任务级的任务数 | 1 | ≥1 | 1 | ≥1 |
基本任务 | Yes | Yes | Yes | Yes |
扩展任务 | No | No | Yes | Yes |
由上表可知,基本符合类BCC1和BCC2仅支持基本任务,扩展符合类ECC1和ECC2支持基本任务和扩展任务;一类符合类BCC1和ECC1不支持多次任务激活请求,每个优先级只能有一个任务;二类符合类 BCC2 和ECC2支持多次任务激活请求,每个优先级可以有多个任务。
1.4 OSEK OS优先级天花板模式
下图显示了一个优先级反转问题,两个任务对一个信号量的共同访问顺序(在全抢占系统中,任务T1优先级最高)。任务T4优先级低,占用信号量S1。T1抢占T4并请求相同的信号量。由于信号量S1已经被占用,T1进入等待状态。现在低优先级的T4被T1和T4之间优先级的任务中断和抢占。T1只能在所有低优先级任务都被终止并且信号量S1再次释放之后执行。尽管T2和T3不使用信号量S1,但它们在运行时延迟了T1。优先级更高的T1结果延后优先级低的T4运行。
另一个典型问题是死锁问题。在这种情况下,死锁意味着由于无限等待相互锁定的资源而无法执行任务。下面的场景导致死锁:任务T1占用信号量S1,随后无法继续运行,例如,因为它正在等待一个事件。因此,较低优先级的任务T2进入运行状态。它占用了信号量S2。如果T1再次准备就绪并试图占用信号量S2,它将再次进入等待状态。如果T2现在试图占用信号量S1,这将导致死锁。
为了避免优先级反转和死锁的问题,OSEK操作系统需要以下行为:
优先级天花板模式(ceiling priority)。即将访问共享资源的任务的优先级在占用资源的过程中提升至共享资源任务的最高优先级之上,从而避免优先级反转现象和死锁的出现。
优先级天花板可能导致优先级等于或低于资源优先级的任务出现时间延迟。该延迟受到任何低优先级任务占用资源的最大时间的限制。可能与正在运行的任务占用相同资源的任务不会进入运行状态,因为它们的优先级低于或等于正在运行的任务。当一个任务占用的资源被释放后,其他可能占用该资源的任务可以进入运行状态。
下图是实现优先级天花板模式的一个示例。任务T0的优先级最高,任务T4的优先级最低。任务T1和任务T4访问同一个资源。该系统清楚地表明,不需要无边界优先级反转。高优先级任务T1的等待时间小于Τ4占用资源的最大持续时间。
2、AUTOSAR OS
2.1 AUTOSAR OS介绍
AUTOSAR(Automotive Open System Architecture,汽车开放系统架构)是一种开放的、标准化的汽车电子软件架构。AUTOSAR OS(Operating System,操作系统)规范是AUTOSAR架构中的一部分,它定义了操作系统的相关特性和功能。
AUTOSAR OS 具有包括但不限于以下一些特点和功能:
为什么需要OS?相比于不带操作系统的“裸机编程”或者带简单时间轮询的操作系统,OS能够具备如下功能:
2.2 OS应用OS Application
AUTOSAR OS有个容器来支持五个对象(Tasks, ISRs, Alarms, ScheduleTables, Counters),这些对象形成一个内聚的功能单元,这个容器被称为OS-Application。如果使用OS-Application,则所有的task、ISR、Counters、Alarms 和 ScheduleTables 必须属于某个OS-Application。属于同一OS-Application的所有对象都可以相互访问。OS Application 分为两类,即 Trusted(可信的)和 Non-Trusted(非可信的)。Trusted OS Application 可以在监控或保护功能关闭的情况下运行,对内存或 OS API 的访问没有限制,若处理器支持,还可运行在特权模式,但默认不会引发内存相关故障,若发生内存故障,系统稳定性可能无法保证,或许需要关闭 OS。Non-Trusted OS Application 不允许关闭监控或保护功能,对内存或 OS API 的访问受到权限控制,也不允许运行在特权模式。
2.3 调度表Schedule Table
调度功能是OS的核心功能,注意负责任务的激活及切换,OSEK OS调度一般通过Alarm和Event来激活任务,AUTOSAR OS在以上基础上增加了调度表Schedule Table。
每个调度表至少有一个到期点(Expiry Point),一个到期点包含一个或多个Task/Event。
调度表可以配置为只运行一次或重复运行。
Alarm和Expiry Point区别如下:
一般来说,能用Schedule Table就不要用Alarm,因为Schedule激活Task时间同步性更好(没有for循环间隔代码),alarm是进行for循环轮询激活,时间上会存在一点差异。
2.4 时钟Counters
Counter分为软件Counter和硬件Counter。
2.4.1 Software Counter
Software Counter有以下特征:
2.4.2 Hardware Counter
Hardware Counter有以下特征:
2.5 警报Alarm
Alarm有以下特征:
由于对应AUTOSAR OS来讲,Alarm不是必须项,这里就不过多介绍。
2.6 事件Event
定义Event时需要关注三个要素:名字;所属的扩展任务;事件掩码。Event会触发扩展任务进入或者跳出Waiting状态。相关的函数接口包括:SetEvent, WaitEvent, ClearEvent。前两个接口函数会触发任务调度和上下文切换。
事件可用于为扩展任务提供多个同步点。同步的示例图如下图所示。扩展任务可以等待事件,这将导致任务进入等待状态。当系统中的任务或ISR设置事件时,等待任务将进入就绪状态。当它成为最高优先级的就绪任务时,OS将选择它来运行。
2.7 中断ISR
OSEK OS和AUTOSAR OS都将中断分为I类中断和II类中断。所有I类都认为是可信的,有最高的supervisor权限。II类中断可信度根据所在分区决定。当我们需要响应时间非常及时时可以使用I类中断。
2.7.1 I类ISR
对于I类中断,有以下特征:
2.7.2 II类ISR
对于II类中断,有以下特征:
II类中断发生时的状态图如下图所示:
2.7.3 中断延时
红色部分是硬件耗时,即程序跳转到中断向量表的时间,绿色部分是II类中断比I类中断多出来的延时时间,即OS对任务现场保护及跳转到中断服务函数的时间。
2.7.4 中断优先级
优先级排序:Task < Cat II ISR < Cat I ISR
一般而言,OS的系统时钟中断应设置为II类中断优先级最高,若较低则会影响系统实时性。
2.8 任务Task
同OSEK OS。这里不再复述。
3、总结
本篇主要对OSEK OS的一些知识点进行了描述,主要介绍了任务和优先级天花板模式,以及介绍了AUTOSAR OS中属于OS-Applicationd的对象,包括调度表,时钟,警报,事件,中断和任务。下一篇将继续介绍AUTOSAR OS的资源管理,分区,OS裁剪,OS保护,分区间通信,多核启动和下电,OS Error和Hook函数。
参考文档:《AUTOSAR_CP_SWS_OS》、《RTA-OS User Guide》、《OSEK/VDX Operating System Specification 2.2r3》、《ATOSAR多核操作系统及其应用》
作者:&等风来