实时多任务系统应用极其广泛,几乎渗透到各行各业,系统分类也很复杂。在嵌入式系统中,实时多任务机制是依靠启动之后运行的一段后台任务管理程序实现的。应用程序运行在该管理器程序之上。后台根据各个任务的要求,进行资源管理、消息管理、任务调度、异常处理等工作。其首要目的是调度一切可利用的资源实现实时控制任务。
实时系统主要有两大类:软实时系统和硬实时系统。软实时系统的宗旨是使各个任务运行的越快越好,并不要求限定某一任务必须在多长时间内完成。在硬实时系统中,各任务不仅要执行无误而且要做到准时。大多数实时系统都是二者的结合。对于一个复杂任务系统,任务调度模式的选用是其系统架构的一个重点。无纸记录仪具有多层次的界面管理和较高的实时响应需求,由此选择与之相适应的系统任务调度模式是势在必行的。
本论文综合考虑了各任务响应的实时性需求,对任务进行了创造性的调整,进而将软实时系统和硬实时系统进行了有机的结合,规划出最为合理的任务调度模式。
1 记录仪实时多任务的特点
通常的实时多任务操作系统都比较庞大,对于由单片机(80C320)组成的实时系统是不适用的。由于单片机的运算能力和内存有限,要求实时操作系统具有简单实用、高效可靠的特性。就记录仪而言,其任务和功能是预知的,则内存和文件管理系统可简化,甚至取消[1]。因为任务对存储器的要求是明确的,这样就可以使用固定和独立的存储区域分配方案,无需通过OS来控制和分配。因此,实时多任务操作系统就可以简化为基于任务调度与时钟中断管理为核心的调度模块。记录仪中的任务状态有四种:运行、就绪、等待、挂起,睡眠状态并入等待,不再另加以区分。
2 任务的划分、组织和调度
2.1 任务的划分
在单片机实时多任务系统中,实现实时多任务机制的关键在于将系统功能合理地分解成各个任务模块。划分任务的原则:功能相对独立,并能与其他程序同时执行的程序划分为一个任务。但任务划分不能太细,否则将增加任务切换的系统开销,降低系统效率并影响系统响应的实时性。文献[2]指出,应尽量将关系密切的任务合并,减少任务间的通信。综合考虑任务的实时性和执行时间,记录仪的十个任务可分为三类:
(1)高优先级任务:下位机上传采样值的处理,虚拟通道组织,报警处理。这类任务实时性要求高,执行时间<0.1s,如采样值处理任务,记录仪要保存采样值作为历史数据,保存过程中要加上时标,采样值正确而时标错误的记录是无效的。
(2)低优先级任务:按键响应、显示、PID控制、流量积算。这类任务执行时间<0.2s,任务实时性要求一般。如按键响应任务,延迟0.5s是可以容忍的。
(3)后台任务:存储、打印、与管理机(PC)通信。这类任务的执行时间>1s,对实时性的要求最低。
2.2 任务的组织
系统上电,初始化每个任务的固定任务栈,建立任务队列状态表和任务控制表(TCB),这两张表是任务调度的依据。任务队列状态表由高优先级、低优先级、后台任务三张子表组成;任务控制表由任务首地址、状态寄存器、任务局部变量三部分组成,数据结构见图1。
2.3 基于消息驱动机制的任务调度
借鉴面向对象程序设计的思想,在记录仪程序中引入消息概念,将任务的执行条件转换为消息,由消息对相应的任务进行激活,并由任务调度模块实现调度。消息定义为:当某个事件(如中断或某任务完成)发生时,事件处理程序设置相应的标志,不同的标志代表不同的消息。事件处理程序可以是中断服务程序,也可以是执行后需设置的标志的任务,因此,记录仪中任务的调度是基于消息机制来驱动的。消息在多任务程序中的作用相当于桥梁,使任务间既相互独立又有机关联,任务之间不能直接调用,需借助消息,由任务调度模块实施。
中断服务程序由中断消息(标志)处理程序和中断任务处理程序两部分组成,前者仅仅完成消息(标志)处理就退出中断,而中断真正要完成的操作,是在任务调度模块的协调下,由中断任务处理程序来完成。如按下显示,则按键中断消息处理程序只产生一个按键消息(标志)就退出中断,而调度模块依据按键消息,调用按键中断任务处理程序获取键值,并产生显示消息。调度模块依据显示消息,调用显示任务程序。
3 实时多任务调度策略
多任务的系统,通常采用内核来管理各个任务,也就是通过内核为每个任务分配CPU时间,并负责任务之间的通信。根据任务的调度机制,可以分为非占先式内核和占先式内核。前者要求每个任务能够主动释放CPU等资源,后者则支持对当前任务的CPU使用权的剥夺,从而使更高优先级就绪任务得到CPU控制权进而执行。
嵌入式系统采用何种调度策略,通常要考虑三个因素:系统的处理能力,任务的数目,系统对响应时间和执行效率的要求。抢占式调度能改善高优先级任务的实时性,但系统开销较大;非抢占式调度恰好与抢占式相反。针对记录仪,提出抢占式和非抢占式的复合多任务调度策略。记录仪的正常工作周期为1s,调度模块的工作周期亦为1s,并将1s分为三个时段:0s-0.5s,0.5-0.8s,0.8s-1s,实时时钟在0s, 0.5s, 0.8s各产生一次中断,将Time-flag分别设置为0,5,8,并将Attemper-flag置为0。任务调度程序框图如图2所示。
在记录仪一个工作周期(1s)内,复合调度策略,允许高优先级任务三次抢占低优先级和后台任务,而低优先级任务具有两次抢占后台任务的权力。因此,高优先级任务的响应时间t≤0.5s,低优先级任务的响应时间t≤0.7s。由于抢占的次数有限,所以任务切换开销不大,有利于提高系统效率。
抢占式和非抢占式的复合多任务调度策略已成功应用于某记录仪,达到了预期的目标。