实时操作系统在星载计算机中的应用
因此,使用RTEMS有一定的局限性,当RTEMS不适合使用时,可以考虑自行研制星载实时操作系统。下面以笔者开发的SAR-RTOS为例介绍星载实时操作系统的设计。
3 星载实时操作系统的设计
3.1 实时操作系统内核的原理
实时操作系统(RTOS)的核心是其内核。笔者认为:通用操作系统的本质特点是硬件资源的管理者,而RTOS的本质特点是引入了多任务和实时性的保证。当然引入多任务也是提高实时性的一种方法。实时性的保证主要是靠任务调度方法和任务调度时机来决定。引入多任务相应地带来了任务竞争与同步、任务的切换等问题。而这些问题在现代操作系统理论里已经有了比较完备的解决方案。
实时操作系统内核原理,概括起来就是:引入了多任务,并且为每个任务分配自己的堆栈空间,由任务调度器来决定让哪个任务获得CPU。被挂起的任务把当前的CPU状态保存在自己的堆栈区中,获得CPU的任务把它被挂起时保存的CPU寄存器从堆栈区中恢复,这样新任务就从挂起时的状态重新执行,从而完成了一次任务切换。而信号量、消息队列、邮箱、事件等系统提供的服务是为了解决多任务间对资源的竞争以及任务间的通信和同步。它们的共同点是从实现的角度,有效为复杂的数据结构作支撑,而对于用户来讲用法很简单。例如信号量(Semaphore),建立好(Create)后,对其进行的操作就只有等信号(Pend)和发展信号(Post)。
3.2 星载实时操作系统的设计要素
(1)总体设计
星载RTOS的设计属于复杂的软件设计,因此应该按照软件工程规定的V型模型的开发方法实话开发。在总体设计中,应确定操作系统的结构、支持的任务数、采用的调度方案、提供哪些系统服务等问题。在SARRTOS的体系结构设计中采用了将整体式和客户/服务器模型结合的方法。将它定义为四个层次:硬件层、硬件接口层、OS层和应用层,如图1所示。
(2)任务调度
为了保证系统的实时性,可以采用基于优先级的抢占式调度,也就是一旦更高优先级的任务就绪,就能获得CPU的使用权,使任务响应时间最短。SAR-RTOS中就是采和了这种调度方案,调度时间确定、速度快、实时性好。
javascript:window.open(this.src);" style="cursor:pointer;"/>
SAR-RTOS中关于任务管理的实现方法为:考虑到星载系统的ROM和RAM资源有限,为了保证SAR-RTOS的微内核性,将其设计为最多能支持64个任务。给每个任务赋予不同的优先级,以优先级为基础建立任务就绪表。当某个任务就绪时,将就绪表中相应位置位,执行任务调度时按照优先级矢量位图算法查找任务就绪表,找出最高优先级任务,执行任务切换。
任务切换需要完成以下工作,但需要注意的是执行任务切换属于临界区代码(不可被中断),必须关中断,切抽象完成后再开中断:
*判断需要调度的任务是否是当前正在运行的任务,如果是就不切换,避免不必要的切换,缩短CPU执行时间;
*将被挂起的任务CPU寄存器压入堆栈;
*将当前堆栈指针保存在即将挂起任务的任务控制块中;
*把高优先级任务的CPU寄存器从堆栈中恢复;
*将高优先级任务的任务控制块中保存的堆栈指针恢复;
*执行中断返回指令,让高优先级任务运行。
(3)任务管理
任务在RTOS中通常同时作为系统调度和资源分配的最小单位,也是用户编写应用程序的基础,对任务的管理是RTOS最基本的功能。对任务的管理内容包括任务状态的设计以及任务状态变迁的实现。在SAR-RTOS中任务的状态总共有四种,如表1所示。
表1 SAR-RTOS中的任务状态
运行态(Running) | 任务占有CPU,并得以执行的状态 |
就绪态(Ready) | 任务已经具备运行的条件,等待内核调度 |
阻塞态(Block) | 任务由于某种原因被迫放弃CPU的使用 |
休眠态(Dormant) | 任务不具备争取CPU的使用资格的状态,也就是说不会被调度 |
任务状态的变迁如图2所示。
(4)任务间通信与同步
任务间的同步与通信是多任务操作系统都需要解决的问题。实时操作系统的核心就是要支持多任务的并发执行,相应地也就引入了任务与任务之间、任务与中断服务程序之间必须协调动作、相互配合的问题。即常说的任务间的同步与通信问题。所谓任务间的同步是指多个任务中发生的事件存在某种时序关系,必须协同动作、相互配合,以共同完成一个任务。任务间通信就是任务在运行时与别的任务进行信息交换。其实,同步本质上也是一种信息交换,是为了保证在正确的时间和条件下进行信息交换,使任务间不会产生混乱。在现场操作系统中已经对任务的同步与通信有比较完备的解决办法。信号量以及事件机制等都是RTOS常用的同步机制,RTOS为任务间通信提供邮箱及消息队列等服务。
在SAR-RTOS中,提供的任务间通信的服务包括:消息邮箱(Message Mailbox)和消息队列(Message Queue);提供的任务间同步的服务包括:信号量(Semaphore)和事件标志(Event Flag)。
(5)时间管理
RTOS由于其实时性,在系统运行过程中必须提供可靠的时间保证,因此RTOS通常都在硬件定时器的基础上提供系统时钟服务。每一个时钟滴答(Tick)就是一次系统的脉动,指挥系统各部分协调工作,因此定时管理是RTOS的基础。时间管理一般提供以下功能:
*管理日历时间和日期,有的系统也可以是相对时间;
*任务等候消息、信号量、事件的超时时间或者任务长期占用CPU的超时时间;
*在预定时间间隔或指定时间到达后唤醒一个指定任务。
(6)其它服务
内存管理和I/O管理,以及中断管理等服务不是系统必需的服务,可根据不同的应用需要决定是否提供上述服务,在SAR-RTOS中上述三种服务都提供。
(7)星载操作系统的可靠性措施
星载软件的可靠性设计是关键,通常可以采用如下措施:
*将任务的重要参数以“三取二”的方式保存在任务控制块中;
*通过任务的状态检查,对检测不正常的任务进行相应的出错处理;
*采用看门狗技术,实现冷热启动的判定。当盾门狗启动后,从程序跑飞的地方自动往下执行;
*可以在内存中开辟一段系统内存区,定时将CPU环境和主要参数放入其中。
4 两种方法的比较
选用成熟的RTOS(如RTEMS)可以有效地缩短开发周期,代码质量可以得到保证;自行开发RTOS代码需要经过严格的测试,难度相对更大,开发周期更长。但可以根据需要增减相关功能,有更大的灵活性。如果使用RTEMS支持的CPU,那么推荐使用RTEMS作为星载软件的开发,毕竟RTEMS经过了十多年的验证,源代码公开也有几年的时间,这样的代码质量和可靠性应该是很高的。如果由于条件限制不能使用RTEMS,可以自行研制星载RTOS,但必须按照软件工程的开发方法,从设计、编程到测试,每一项都需要严格把关。
把RTOS引脚到星载计算机系统,能使星载软件从传统的单线程前后台系统转向多任务编程,不至于一个环节的失效就引起整个软件的失效,增加了可靠性。另一方面,使用操作系统后,使星载软件的平台软件和功能软件分离,用户可以集中精力编写应用程序,提高开发效率。而且如果使用相同的RTOS,一些通用的模块或任务可以在不同型号继承和使用,提高软件的复用性。引入 星载RTOS将带来星载软件开发的一次技术变革。