嵌入式实时操作系统设计及应用探讨
第二种方式就是系统调用。A-RTOS为了实现对内核及应用之间的保护,提供了两种运行形态:用户态和系统态。其中操作系统内核是运行在系统态的。因此用户态的应用是不能够直接调用系统内核提供的功能接口的,必须通过TRAP系统调用方式来进行。
此种方式下,当用户态的应用需要调用内核提供的系统调用时,首先要执行一组特殊的指令使系统进入系统态以便执行需要的系统调用,当调用完成后,内核将执行另一组特征指令将系统返回到用户态。
每种支持保护模式的系统都提供了专门的软中断命令来完成从用户态进入系统态的功能。系统挂接一个软中断处理函数,所有的系统调用都通过这个软中断进入并以不同的参数值(即系统调用号)来加以区分。
系统调用的另一种形式是称为CALL-LIB的调用库机制。此种机制类似于windows系统的动态链接库,可以满足动态加载和更新组件的需要,也是A-RTOS的特点之一。
区间调度机制
ARINC653规定,区间调度模式的主要特征是:1)调度单元是区间;2)区间没有优先级;3)调度算法是预先确定的,按照固定的周期重复,并且只能由系统集成者进行配置。每个循环中,至少要为区间分配一个区间窗口。
在A-RTOS中,为了方便系统处理和能更好符合ARINC653规范,对以上规定进行了一定程度的修订:调度单元是区间和系统进程;区间具有优先级。但这些修订不影响操作系统区间层POS以及应用程序使用者,所以在外部特性上并不与ARINC653规定违背。
除此之外, A-RTOS还引入两个系统区间:Kernel区间和Idle区间。Kernel区间优先级最高,用于为整个系统的运行提供支持;并且一些系统级进程,也属于Kernel区间,方便调度。Idle区间具有最低的优先级,用于填充系统时间。当系统中没有其他区间可以运行,就运行Idle区间。
A-RTOS区间的调度原则是首先基于优先级调度,对同一优先级的区间可使用时间片轮转调度或者基于时间窗的循环调度策略。
A-RTOS采用两级调度机制。系统中具有区间的优先级位图和每个优先级对应的就绪链表,每个区间中也包含系统进程的优先级位图和对应的就绪链表。利用优先级位图和就绪链表,可以很容易的实现对区间和系统进程的调度。图6给出了这种调度模型。
图6 A-RTOS的区间调度模型
调度模块首先根据系统中的区间优先级位图和区间就绪链表来进行区间调度,被调度到的区间再根据区间内的进程优先级位图和进程就绪链表进行系统进程的调度。此方法相对于一级调度方式而言,能够保证调度时间的确定性,系统调度时间不会因为区间和系统进程的多少而发生变化,符合实时操作系统的定义。
在进行基于时间窗调度时,两个系统区间实际上也会参与调度。Kernel区间的运行时间会计算在区间调度配置表中当前区间的运行时间上。因此对于某应用区间而言,它的运行时间实际上会包含系统区间的运行。
进程池机制
在A-RTOS中,进程池是指一组由系统进行维护的进程,这些进程能够为应用提供一组服务。应用通过系统提供的调用接口对系统提出应用请求,系统把应用的请求交给进程池,进程池自动选择一个空闲进程对其进行服务,当服务完毕以后,系统会回收该系统进程。
进程池主要应用在时钟定时器服务、中断服务和异步IO操作。
异步信号和异步IO机制
A-RTOS支持异步信号机制,允许在某种情况下COS以异步方式发送信号到上层的POS。异步信号的一个典型使用就是异步IO。这是由于在ARINC653的应用中,POS中的进程通过系统调用产生阻塞性IO请求的时候,如果IO不是异步的,则此时该进程就会阻塞,等待系统调用的返回。但是COS并不知道POS中的应用进程的存在,当其中的一个进程阻塞的时候,整个区间都会被阻塞。采用异步IO方式可避免这种情况的发生。
图7 异步IO工作流程示意图
当应用请求了阻塞性的IO服务时,A-RTOS会启动称为一个系统进程来进行应用请求的IO操作,这就是异步IO机制。A-RTOS将这种为实现异步IO操作而创建的系统进程称为worker进程。
如图7,在ARINC653的应用中,当POS中的一个进程调用异步IO系统调用时,该系统调用检查此IO是否为阻塞工作方式,如果是,则创建一个worker进程去完成这个要求的IO工作,并返回一个AIO_PENDING值到POS。POS检查到这个返回值以后,把正在进行异步IO调用的进程从就绪队列取下放到等待队列,然后进行重调度。当worker进程完成了要求的IO操作时,即发送异步信号到POS,从而唤醒原阻塞进程。
- FPGA在航空电子系统中的设计应用(06-05)
- 航空电子设备防雷设计的图形化用户界面(12-20)
- 航空电子系统的几种数据总线应用评述(02-05)
- VxWorks实时操作系统下MPC8260ATM驱动的实现(11-11)
- VXWORKS内核分析(11-11)
- 嵌入式实时操作系统设计探讨(10-15)