随着科学技术的不断进步,实时嵌入式操作系统得以广泛应用,而VxWorks操作系统在绝大多数的嵌入式操作系统中具有良好的实时性效果,它于1983年由美国的WindRiver公司设计出来。正是因为VxWorks操作系统的高实时性的特性,它被广泛应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中[1]。
目前,对于航天事业的发展不断深入,对星务管理系统软件的功能越来越多,越来越复杂,同时性能要求也越来越高,而在这样的复杂多任务的情况下,同样需要保证任务处理的实时性[2]。
为此,本文以VxWorks操作系统为核心,分析星务管理系统软件的基本功能任务,结合VxWorks操作系统高效的实时性多任务调度、中断管理以及实时的系统资源等特点,设计讨论在诸多星务任务情况下,确保每个任务能够被合理调度,提高星务管理系统软件的高可实时性要求。
VxWorks操作系统采用微内核的设计风格,由微内核提供基本的多任务环境及对多任务进行管理[3]。在VxWorks操作系统中,每个任务都会具有就绪状态、挂起状态、延迟状态、休眠状态4种基本的状态[4]。
这些任务的状态会随着调用相应的系统函数发生从当前状态跳转为相应的下一个状态,在任何状态下的任务也都能够被删除。
VxWorks提供了两种任务调度算法:基于任务优先级的抢占式调度算法、基于时间片轮转的调度算法。对于具有多任务环境下的系统,必须采用以上的其中一种调度算法,并将CPU的资源赋给处于就绪状态的任务。而对于高实时性要求的系统,若能将以上两种任务调度的协调配合很好地实现在系统中,系统的实时性便能得到更好的保证。时间片轮转的调度及优先级的抢占式调度结合实例如图1所示。
图1中任务1和任务2的优先级相同,任务3的优先级高于任务1和任务2,任务4的优先级高于任务3。任务1和任务2按照基于时间片轮转的调度算法根据时间片的长度轮询占用CPU资源;当任务3来到时,抢占了任务1的资源,任务1被挂起,而任务3开始执行;当任务4到来时,抢占了任务3的资源,任务3被挂起,任务4开始执行;当任务4执行完毕后,任务3被唤醒继续执行;当任务3执行完毕后,任务1被唤醒并继续执行。
在复杂的星务管理系统软件中,需要考虑软件的复用性、各个任务的内聚性和耦合性,从而保证星务管理系统软件高可靠性[5]。为此,结合VxWorks操作系统的特点,可将星务管理系统软件分为4层:板级包驱动层、系统内核层、由VxWorks提供的公共系统函数层以及应用层。
图2为星务管理系统软件的结构图。
图2中,板级包驱动层提供与硬件接口的底层驱动程序,包括对中断控制器的初始化、定时器的初始化、串口的初始化等其他硬件的初始化;系统内核层是整个系统的核心层,它为多任务提供管理、任务间切换、调度分配CPU资源和对一些异常情况进行处理;公共系统函数层则起到了很好中间层作用,为应用层访问系统内核层提供了系统接口函数;应用层实现复杂的任务处理,如:姿态控制任务、遥测控制任务、轨迹控制任务、载荷控制任务、温度控制任务等。
由第1节介绍有关VxWorks多任务特性的设计思想,根据星务管理系统软件自身功能的需要,对任务进行合理有效的划分和优先级适当的设置,可以较好地简化星务管理系统软件的复杂度,也可以增加星务管理系统软件的稳定性。保证任务调度的正确性,则更好地保证了整个系统实时性[6]。
星务管理系统软件按照设置周期性地运行,通过内部总线和网络接收内部传感器和外部指令控制单元的命令和数据,经分析可对相应的任务进行控制操作。根据星务管理系统软件各功能特点,本文对一部分基本任务进行划分,各个任务的优先级由高到低分别为:(1)看门狗定时器中断处理任务;(2)遥控接收分析数据任务;(3)飞行轨迹任务;(4)姿态控制任务;(5)载荷控制任务;(6)遥测采集任务;(7)温度控制任务;(8)数据存取任务。
图3为星务管理系统软件任务运行关系图。
图3中,对于星务管理系统软件的初始化任务也可视为父任务,由父任务创建各个任务。设计中看门狗任务的优先级最高,这是为了保证系统在运行中,当出现异常情况导致整个系统死机或者瘫痪时,看门狗中断处理函数会被触发,令整个系统进入重启,保证了整个系统的安全性、可靠性;遥控接收分析数据任务的优先级要高于看门狗中中断处理任务以外的其他任务,遥控接收分析数据的结果将会影响到其他任务内的执行流程;数据存取任务的优先级最低,因为任何任务都可以抢占其CPU资源,所以需要为数据存取任务开辟一段较大的数据存储缓存,保证当被高于数据存取任务优先级的任务抢占资源后,不会丢失需要存储的数据,保证数据的完整性、可靠性。
通过以上分析不难得出,在对以上任务进行时间片划分时,对于看门狗任务以及遥控接收分析数据任务的时间片设置时间应尽量短,而其他任务的时间片设置应适当合理,进而保证整个系统的实时性。
在没有接收到指令要求改变卫星姿态,或者调整卫星运行轨迹时,姿态任务和轨迹任务应当会按照初始设定的姿态和轨迹执行[7],即这每个任务按照时间片轮转方式进行调度。
不同型号的处理器芯片有不同的工作频率,因此,设星务管理系统软件的调度周期为TS。以飞行轨迹任务、姿态控制任务、遥测采集任务和数据存取任务为例,分别为以上4个任务分配时间片,具体参数如表1所示。
根据表1可以确定星务管理系统软件的调度周期最小为:TS=20te。为了便于任务分配,可将星务管理系统软件的调度周期细化成几段小周期f。小周期f需要满足如下条件:
(1)小周期f≥最大执行时间(t);
(2)小周期f能够被星务管理系统软件的调度周期TS整除;
(3)因为调度执行发生在每个小周期的开始,为了便于确定在时限到达前,任务是否可以完成,要求在任务开始和到达时限之间至少有个小周期f的时间,可用式(1)表示:
综合以上3个条件得到的结构可以得出小周期f的取值为4te。由此可以绘制出一个调度周期为TS=20te的调度结果图,如图4所示。
图4中,T1、T2、T3和T4分别代表行轨迹任务、姿态控制任务、遥测采集任务和数据存取任务。根据表1和图4中对每个任务的时间片的划分,通过上述计算可以保证每个任务能够被正确、合理地调度,保证了整个系统的实时性。
星务管理系统软件的复杂多任务之间需要一些通信机制来协调各自的活动[5]。VxWorks操作体系提供任务间通信的方式包括:信号量、消息队列、管道、共享内存和Socket套接字等。在本系统软件中采用了信号量和消息队列两种任务间通信方式。
本文星务管理系统软件采用二进制信号量的同步和互斥功能,来改变每个任务的状态机。如图5所示,在遥控接收分析数据任务中,根据数据分析得到需要发生变化的任务指令,进而释放对应任务,如:姿态控制任务,令姿态控制任务改变原来姿态为当前指令需要的姿态。
在数据存取任务时,在数据缓存区二进制信号量的互斥功能,保证在写数据时不去进行读数据操作,读数据时不进行写数据操作,确保数据的准确性。
本文星务管理系统软件采用消息队列的FIFO方式,用于遥测采集任务和数据存取任务间的通信,根据需求设置消息的大小,当遥测传感器采集到数据后,将采集处理的数据通过消息队列发送给数据存取任务,并在数据存取任务占用CPU资源时将数据记录存储,如图6所示。
根据第2节对星务管理系统软件的设计分析,使用Tornado2.2开发环境中搭建星务管理系统软件,实现遥控接收分析数据任务、飞行轨迹任务、姿态控制任务、温度控制任务、数据存取任务等多任务之间的切换,以及多任务之间的通信。
采用Tornado2.2开发环境的WindViwe调试工具来观测星务管理系统软件多任务并发运行的结果,如图7所示。
图7中显示飞行任务、姿态控制任务以及读取数据任务在遥控指令任务的协调下,进行任务的切换和任务之间的通信,数据采集任务和数据存储任务的优先级要低于其他任务,并没有影响到采集数据任务以及采集数据的分析处理任务的运行。
在每个任务中加入输出语句代码来进一步验证本系统能够保证多任务合理的执行。通过Tornado2.2开发环境的调试后台观察结果,如图8所示。
从图8中可以看出,当姿态控制任务和轨迹任务接收到指令时,发生了姿态以及轨迹的改变;能够实时地检测、采集、分析温度变化,并根据温度的变化反应温度的适度情况。
通过以上验证描述,表明了对于星务管理系统软件的多任务的设计合理性,同时也能够保证软件框架的有效性,满足星务管理系统软件的实时性的要求。
本文描述了一个基于VxWorks实时操作系统的星务管理系统软件多任务实时性调度设计和实现。根据本文描述中的设计方法,通过模拟测试结果表明了多任务调度的可靠性、整体软件架构的有效性,并满足实时性的要求。本文描述的设计方法将移植到某架构平台上进一步进行验证。
全部0条评论
快来发表一下你的评论吧 !