APP下载

一种基于OSEK规范的轻量级任务管理机制

2015-10-14

电子科技 2015年4期
关键词:任务调度组内中断

王 瑞

(中国航工业西安航空计算技术研究所 18室,陕西 西安 710065)

一种基于OSEK规范的轻量级任务管理机制

王 瑞

(中国航工业西安航空计算技术研究所 18室,陕西 西安 710065)

根据OSEK/VDX车载操作系统规范,设计了一种车载任务管理机制,以适应现有车载电控单元硬件资源有限的问题。该机制优化了车载任务管理机制的信息存储结构,重新设计了基于中断的分组任务调度机制和事件处理机制。并通过性能分析及与其他车载任务管理机制的比较分析,证明了该机制能在车载应用领域以较低的内存开销,提高了车载任务调度管理效率。此外,该机制还能在不增加硬件成本的前提下,应用于现有的车载电控单元,故具有一定的实用价值。

汽车电子;任务管理;电子控制单元;嵌入式软件

OSEK/VDX规范是1993年德国汽车工业协会为满足汽车电子控制软件发展需要而提出的,用于规范汽车电控软件结构体系。该规范中包含操作系统(OS)规范、网络管理规范、通信服务规范及OSEK实现语言规范[1-2]。

基于OSEK OS规范的操作系统,需要满足该规范规定的软件结构、任务管理、资源管理、应用模式等一系列要求。尤其在任务管理机制方面,OSEKOS规范针对汽车电子控制的特点做出了一系列特殊规定,旨在提高汽车电子控制软件的运行性能和效率。出于成本等因素的制约,大部分车载电控单元(ECU)的硬件配置较低,而现有的OSEK操作系统,其任务管理机制大多承袭自传统的PC操作系统[3-5],在资源利用、运行效率方面难以适应实际工业应用需要。因此,设计一种轻量级的符合OSEK规范的任务管理机制,有着重要的意义。

1 OSEK任务管理规范

OSEK OS中任务的概念与进程类似,是运行和调度的基本单位。OSEK OS规范将任务划分为基本任务和扩展任务两种类型[1]。其主要区别在于基本任务不会等待事件,而扩展任务可等待事件发生而挂起自身,如图1所示。

图1 任务调度状态转换

系统中所有任务在系统启动前全部创建完毕,任务在运行期间可被多次启动。为便于系统配置,针对任务管理特性,OSEK OS规范定义了4种一致类[6],下文按最复杂的ECC2配置对轻量级任务管理机制的原理进行说明,其功能区别如表1所示。

表1 OSEK一致类最低需求参数

任务调度是任务管理机制的核心。OSEK OS规范对任务调度的规定比较灵活,其支持的调度机制包括:全抢占调度、非抢占调度及混合机制。在混合机制中,任务是否被抢占由任务本身的属性决定。

2 任务管理机制设计

改进的任务管理机制属于一种轻量级的任务管理机制,其从任务组织方式和任务调度两方面对传统任务管理机制进行了改进及重构。旨在降低系统的存储代价和提高系统实时性。

2.1 任务存储结构

与PC 操作系统的进程管理概念类似,现有的OSEK OS中,需定义任务控制块(TCB)存储任务信息,并定义就绪任务表、阻塞任务表等相关链表进行组织[3-5]。由于车载ECU配置较低,某些ECU内存甚至<256 kB,这种任务信息存储结构不利于车载应用的扩展。轻量级任务管理机制设计了更为简单的任务存储结构,以一个任务信息数组TaskMangTbl来替代TCB以及其他任务相关链表的功能,该数组中每个单元存储一个任务的运行所需信息。每个单元的结构如表2所示。

表2 TaskMangTbl单元结构说明

每个任务信息只占用12 Byte,对于定义300个任务的系统来说,其任务管理结构只需占用3.5 kB的空间。任务信息中设定周期表示周期任务重复激活时间间隔;使能标志用于限制任务激活次数;初始延迟规定了任务首次运行延迟时间。任务组ID其含义较为特殊,在该任务管理机制中,任务被划分为若干任务组,每个任务组在TaskMangTbl中相邻存储,所有任务组在TaskMangTbl中按组号顺序依次存储。组ID即表征组号,又代表该组的优先级。

数组TaskMangTbl为静态全局数组,采用这种任务存储结构具有两个优点:首先,根据上述分析,这种方式降低了运行期间的内存开销;另一方面,若将TaskMangTbl的内容设为标定数据项,当系统升级或改型时,只需修改对应标定项,整个任务管理机制的程序无需任何改动便可应用于新系统。

2.2 任务调度机制

轻量级任务管理机制支持OSEK OS规范中规定的全部调度方式。在该机制下,任务调度方式的安排是基于车载ECU软件的任务特性决定的:首先,在车载系统中,每个任务通常比较简单,且功能单一;其次,根据OSEK OS规范要求,所有任务在系统运行前定义,其运行时间、资源需求及重要程度均可预先配置并优化。

基于上述考虑,在配置系统时按功能和实时性将任务分组,并将同组任务存储在TaskMangTbl中相邻的区域。分组示例如表3所示。

表3 任务组分类示例

根据任务组织形式,其调度方式分为组内调度和组调度,其中组内调度由于任务优先级相同,采用非抢占调度方式,而组调度则采用抢占调度方式。

2.2.1 组内调度

组内调度是指系统对同组(同优先级)任务进行调度。由于同组任务信息在TaskMangTbl中相邻存储,因此机制设计了一种基于周期延迟计数的先来先服务算法来实现组内非抢占调度。在该算法中,任务按TaskMangTbl中存储顺序轮询,当轮询至某任务时,其剩余周期计数减1。当该任务剩余周期为0时,任务被调度执行,否则跳过继续轮询下一同组任务。其执行流程设置如图2所示。

图2 组内调度流程

可见任务调度点在剩余周期为0且该任务使能标志为1时。这种任务调度方式统一了周期任务与非周期任务的处理方式。

若任务为周期任务,其执行周期计Tcycle算如式(1)所示。

Tcycle=Tslot×Nset

(1)

式中,Nset为任务的设定周期;Tslot为计数间隔时间。若任务为非周期任务,Nset设置为1,此时算法退化为普通的先来先服务算法(FCFS)。这种调度方式无需系统判断任务类型,如何调度只取决于Nset的设置,因此,该方式不仅减少了系统信息存储与判断的开销,也有利于对任务修改与维护。

2.2.2 组调度

组调度方式是指系统对优先级不同的任务进行调度。组调度采用抢占的方式进行调度。抢占依据为任务优先级,并且分基本任务和扩展任务这两种类型分别进行不同处理。

以表3为例,0~1组为基本任务,该组任务用于初始化系统信息,因此只能被激活一次。实现方式为在主进程初始化时系统调用其组内调度函数如图2所示,当组内每个任务执行完毕后使能标志被置0,表示当前任务已被禁止,不能被再次激活。

表3中除0~1组外的其它任务为扩展任务,与基本任务不同的是,该类型任务可能会因为时间等待而进入等待态,此时任务让渡处理机并挂起自身。

由于任务分组且同组任务相邻存储,因此除非被优先级更高的任务组所抢占,获得处理机的任务组将占用处理机直到一次组内调度执行完毕,因此组调度通常以组为调度单位。为了降低系统开销,轻量级任务机制采用挂载中断来实现组调度。其原理是将除0~1组之外的每个任务组的组内调度函数挂载到对应外部中断的中断服务程序(ISR)中,且每一组的优先级要与其对应外部中断的优先级相匹配。例如当凸轮信号触发中断时,9号任务组对应的外部中断源触发外部中断,若该中断源为当前待处理最高优先级中断,则该任务组被调度运行。不同组的抢占调度依赖中断嵌套实现。以PowerPC体系为例,组调度的原理如图3所示。

图3 基于PowerPC的组调度原理

如图3所示,周期任务组(如表3中的组3)的组调度函数被挂载到定时中断的ISR中。因此其周期计数步进的单位Tslot等价于定时中断触发间隔时长。由于通常定时中断优先级较低,故该组任务会被优先级更高的任务组抢占。

表3中组4~11任务的实时性通过外部中断的实时处理来保证。而对于周期任务,由于OSEK OS规范规定系统内任务在系统投入运行前必须配置完成,因此可以假设系统内周期任务的开始截止时间等实时性要求可通过合理的预先优化来保证。

2.3 事件处理

轻量级任务管理机制通过事件处理机制来实现扩展任务的等待状态如图1所示。下面以资源竞争为例,说明事件处理机制的实现原理。

资源竞争通过等待资源和释放资源两类事件来实现,涉及的存储结构包括:

全局变量IDLE_ST,该变量某位为1表示对应资源空闲,否则表示被占用;

资源等待变量WAIT_ST,该变量某位为1表示相关资源被某任务所等待,某位为0则表示对应项资源未被任何任务等待;

等待任务数组waitTskTbl,该数组为一结构数组,其中每个单元包含一个等待资源的任务相关信息,每单元的结构元素如表4所示。

表4 waitTskTbl单元结构元素说明

当waitTskTbl中的任务获得资源从等待态转移至准备态时,将该单元的有效标记置为0,则该单元可继续写入,由此便可降低移除数组中等待任务的开销。资源事件处理流程如图4所示。

图4 事件处理流程

如图4所示,在任务申请资源时需要判断空闲资源是否足够,若不够则等待;当任务执行完毕后需要判断资源释放后空闲资源是否满足等待任务的运行条件,若满足,则软件触发资源分配中断,根据优先级高低分配资源。

在改进的任务管理机制中可以采用两种方式预防死锁的发生:由于系统内所有任务在系统运行前配置。因此,可在配置任务时规划人物申请资源的顺序以规避环路等待条件,这种方式的优点在于无额外的系统开销;也可采用任务请求资源时一次性分配的方法以规避等待和保持条件。

3 分析与实验

3.1 调度过程分析

以表3中分组为例,系统内任务调度流程如下:

(1)当系统启动时,所有任务均处于准备态。

(2)当主程序首先调度初始化组0~1组,每个任务依次启动,运行完毕后进入阻塞态。由于初始化任务只激活一次,因此该组任务不会被重复激活;由于该组任务调度函数在主程序中挂载,因此可以被其他任务组抢占,被抢占的任务极其后等待运行的任务重新进入准备态。

(3)当定时中断触发时,周期任务组3任务被调度,任务经历状态与初始化组相同。当距上次激活时间T>Tcycle时,任务重新被激活,进入准备态。

(4)当外部中断源X触发中断时,由于外部中断优先级比定时中断高,对应任务组X抢占处理机,被抢占的周期任务及其后的任务回到准备态。任务组X的第一个任务进入运行态,该任务组按图1进行组内任务调度,每任务正常执行流程为:准备态→运行态→阻塞态,通常任务组X不会设置使能标志,因此可重复激活运行。

(5)当更高优先级的外部中断源Y触发中断时,引发中断嵌套,此时任务组X被任务组Y抢占,X当前任务及之后的任务进入准备态,Y的首任务进入运行态。

(6)当Y的某个任务Yt等待资源M时,Yt等待M的资源释放事件进入等待态,其他Y组任务继续进行组内调度。

(7)若Ys运行完毕释放资源M时,资源释放事件调用资源分配中断,如图4所示,该中断优先级较高,造成中断嵌套,Ys被抢占进入准备态,Yt进入运行态。

3.2 性能分析与实验

以300任务的系统为例,任务存储空间本身占用3.5 kB任务表空间,如表2所示;假设所有任务均处于等待状态,则事件机制最多占用4 kB,如表4所示。总占用内存空间<10 kB,因此其存储空间占用情况完全可满足大多数车载ECU的配置需求。

另一方面,任务调度过程只有当发生资源竞争时才需利用任务自身优先级来选择分配资源,如图4所示。在其他情况下,由于除初始化任务组外所有任务组均直接通过中断实现任务调度。因此任务调度延迟等价于相应中断延迟。而高优先级任务的实时性通过同样高优先级中断的中断嵌套来保证。

下面通过仿真比较实验来验证上述观点。实验硬件平台为我所自研的车载仿真平台。软件方面以μC/OS II为基础OS实现轻量级任务管理机制,参与比较的两种任务调度机制是源于μC/OS II的xOSEK[8]和原始的μC/OS II[9]。其时间性能的比较主要通过10 000次任务切换时间的平均值来体现,比较结果如表5所示。

表5 3种任务管理机制性能对比

通过实验结果可以看出,在内存开销和任务切换方面,轻量级任务管理机制较其他两种OS来说约有15%~20%的改进,但并未达到预期的性能。这是由于在轻量级任务管理机制中同优先级的任务采用的是一种改进的先来先服务算法,因此对于同组任务的切换反应迟钝。若针对OSEK预先配置任务的特点对任务集进行预优化,结果应该会有所改善。

4 结束语

本文介绍了一种基于OSEK规范的任务管理机制。该机制针对车载任务的特殊性优化了任务信息的存储结构,并为之设计了一种轻量级的任务调度机制和事件机制。分析与实验结果证明,该机制与传统的OSEK任务管理机制相比,在一定程度上降低了内存消耗和任务调度延迟,同时还能在不增加硬件成本的情况下,应用于现有的车载ECU中,因此具有一定的现实意义。下一步的工作重点是对任务创建机制的优化进行研究,以改善其同组任务响应等方面的不足。

[1] OSEK OS/ISO WG.OSEK/VDX operating system specification 2.2.3[S].Mbtech:Spohr,2005.

[2] Aotusar Group.Autosar operating system specification [EB/OL].(2008-09-11)[2014-08-01]http://www.autosar.org.

[3] 樊士一,周学海,陈香兰.基于μC/OS-II的车载操作系统设计[J].计算机应用与软件,2011,28(7):255-258.

[4] 蒋建春,臧丽斌,冯辉宗.基于OSEK/VDX规范的实时操作系统移植研究[J].计算机测量与控制,2012,20(7):205-208.

[5] 罗晓敏,涂时亮,唐志强,等.基于OSEK/VDX 的RTOS设计与实现[J].计算机工程,2012,38(6):247-249,252.

[6] 陈海兰,罗晓敏,涂时亮,等.基于AUTOSAR的实时操作系统设计与实现[J].计算机工程,2012,38(20):9-12,16.

[7] 胡琦,李红,赵民德,等.基于AUTOSAR的电控汽油机ECU软件设计与实现[J].浙江大学学报,2011,45(6):1119-1123.

[8] 王瑞,张东.基于OSEK/VDX标准的操作系统设计与实现[J].航空计算技术,2011,41(2):67-71.

[9] 任哲.嵌入式实时操作系统μC/OS-II原理及应用[M].北京:北京航空航天大学出版社,2009.

A Lightweight Task Management Mechanism Based on Osek/Vdx

WANG Rui

(Eighteenth Laboratory,Aeronautical Computing Technique Research Institute,Xi’an 710065,China)

A lightweight task management mechanism based on OSEK/VDX is designed to solve the problem of hardware resource shortage in the Vehicle System.The mechanism consists of an improved task information structure,a packet scheduling method and a event handling method which are based on the interrupt mechanism.Its performance analysis and comparison with other task management mechanisms show that the mechanism will improve the memory consumption and scheduling efficiency.The mechanism can be used in the existing vehicles’ electronic control unit without additional cost and therefore is of practical value.

automotive electronics;task management;electronic control unit;embedded software

2014- 09- 22

王瑞(1983—),男,硕士,工程师。研究方向:嵌入式操作系统,车载动力控制软件。E-mail:wwwangrui@163.com

10.16180/j.cnki.issn1007-7820.2015.04.024

TP316.2

A

1007-7820(2015)04-086-05

猜你喜欢

任务调度组内中断
用心说题 提高效率 培养能力
基于改进NSGA-Ⅱ算法的协同制造任务调度研究
基于时间负载均衡蚁群算法的云任务调度优化
基于FPGA的中断控制器设计*
跟踪导练(二)(5)
千里移防,卫勤保障不中断
云计算环境中任务调度策略
云计算中基于进化算法的任务调度策略
合作学习组内交流讨论时间的遵循原则
合作学习“组内交流讨论时间”注意问题