最近在做嵌入式开发相关的事情,接触到一种新的操作系统,叫VxWorks。VxWorks不仅是一种嵌入式实时操作系统,又是可以运行的最小基本程序。其内部有BSP(Board Support Package,板级支持包),便于进行驱动程序的编写。此外,VxWorks具有强实时性、微内核设计、可裁剪性、可移植性和可靠性等特点,能较好地满足嵌入式开发的需求。
实时多任务
非实时应用系统可以利用单进程或多进程结构按照事件发生的顺序一次处理,而实时系统则要求按照发生事件的轻重缓急(优先级)来安排处理顺序。对于某些任务,强实时系统甚至要求在给定时间内处理完成。这一点从根本上决定了实时多任务机制的基本功能。
任务的状态
任务被创建后,其状态可以在有限的范围内迁移,从而构成一个简单的有限状态机。任何任务在某一时刻只能处于一种状态,基本状态包括:挂起状态(Suspend)、准备状态(Ready)、阻塞状态(Pend)、延迟状态(Delay)和运行状态(Running)。各种状态的含义及转移状态图与非实时系统类似,此处不做赘述。
任务的调度方式
任务调度最主要的因素是任务的优先级(Priority)。VxWorks支持256个优先级(0~255),数字越小优先级越高。任务调度的另一个因素是调度算法。VxWorks支持两种调度算法,第一种是基于优先级的抢占式调度算法,另一种是同一优先级任务之间所采用的时间片轮转算法,系统默认为第一种算法。
-
基于优先级的抢占式调度算法。
-
算法的基本思想:顾名思义,一个具有更高优先级的任务一旦进入ready状态,将抢占当前运行任务的CPU资源,进行上下文切换后进入运行状态。
-
算法的优点很明显,且符合大多数实时系统的调度需求,因此是最常见的一种选择。
-
缺点是:在多个任务具有相同优先级的情况下,如果当前执行的任务一直不被阻塞,它将一直占有CPU,从而造成其他同优先级或者低优先级任务无法执行。
</
-