我的毕业设计报告,今天整理资料时发现的,发出来和大家分享一下:
计算机操作系统实验报告
VxWorks
嵌
入
式
实
时
操
作
系
统
姓名:@@@
学号:###
时间:2007-5-16
引言
随着科学技术的不断快速发展和对事件处理实时性要求的 提高,在目前的通信产品开发中,功能相对单一的单片机(如 C51)已经逐步被功能强大的嵌入式处理器代替。硬件工作量的 减少使得一些功能必须由软件完成,而软件代码的执行,必须依 托于运行稳定 、功能丰富 的操作系统。VxWorks是美国 Wind
RiverSystem公司的产品,是一种嵌入式操作系统(RT0S),它以良好的可靠性和卓越的实时性广泛地应用在通信、军事、航空航天等领域中。
VxWorks概述
VxWorks是美国WindRiver公司于1983设计开发的一种嵌入式实时操作系统 (RTOS),是Tomado II嵌入式开发环境的关键组成部分。的持续发展能力、高性能的内核以及友好的用户开发界面 ,使其在嵌入式操作系统领域占据一席之地。它以其良好的可靠性和卓越 的实时性被广泛应用在通信、军事、航空、航天等高精尖技术和实时性要求极高的领域内,如卫星通信、弹道制导、军事演习、航空导航等。在美国的F—l6、FA—l8战斗机、B一2 隐形轰炸机和爱国者导弹上,甚至连 1997年在火星表面登陆的火星探测器上也使用到了VxWorks
VxWorks为程序员提供了高效的实时任务调度、中断管理,实时的系统资源以及实时的任务间通信,该系统主要应用在单板机、数据网络(以太网交换机、路由器)和通信等多方面 。目前VxWorks操作系统的版本为 VxWorks V6.0,其核心功能主要有:微内核wind;任务间通信机制;网络支持;文件系统和I/O 管理;P0SIX标准实时扩展;C++以及其他标准支持。
这些核心功能可以与WindRiver系统的其他附件和Tornado 合作伙伴的产品结合在一起使用 。
(1)实时性设计
实时性是指能够在限定时间内执行完规定的功能并对外部的异步事件作出响应的能力 。实时性的强弱是以完成规定功能和作出响应时间的长短来衡量的VxWorks的实时性做的相当好.而处于整个实时性操作系统核心地位的就是高性能的微内核wind。这个微内核支持所有的实时性特征:快速任务切换、中断支持、抢占式和时间片轮转调度等。微内核设计使系统的开销很小,进程调度、进程间通信、中断处理等系统公用程序精练而有效,保证了对外部事件快速、确定的反应。
(2)可裁减性
用户使用操作系统的时候,并不是系统中每一样部件都要用到,例如图形显示以及一些设备驱动在某些嵌入式系统中往往并不使用。VxWorks由一个体积很小的内核及一些可以根据需要进行定制的系统模块组成,有时为了满足自己的需求,开发者也许要从100多个不同的选项中进行选择。许多独立的模块都是在开发时要使用而在产品中却不再使用的。另外,TCP、UDP、套接口和标准Berkeley服务可以根据需要将之移出或移入网络协议栈 。VxWorks内核最小为 8K,所占用的空间很小,且不失实时性、多任务的系统的特征。由于其高度的灵活性 ,用户可以很容易的对操作系统进行定制和开发,来满足自己的实际应用需要。
VxWorks是目前比较流行的嵌入式操作系统,依据其良好的持续发展能力、高性能的内核及友好的用户开发环境,在通信领域得到了广泛的应用。
VxWorks具有一个高性能的操作系统内核 Wind,主要特点包括快速多任务切换、抢占式任务调度、任务间通信手段多样化等同时任务切换时间短、中断时延小、网络流量大,与其他嵌入式实时操作系统相比有一定的优势。VxWorks的任务调度策略以抢占式调度为基础 ,同时也可以使用时间片轮转调度算法,这种调度策略能够及时地响应高优先级的任务,而同级任务则可以选择时间片轮转法使多个同优先级的任务并发执行。
VxWorks采用中断处理与普通任务分别在不同的栈中处理
的中断处理机制,使得中断的产生只会引发一些关键寄存器的存储而不会导致任务 的上下文切换,从而减少 了中断延迟。vx—Works的中断处理程序只完成在最小时间内通知中断已经产生,而将中断引起的非实时处理放在其他任务中完成,使得对中断的反应非常迅速。
VxWorks具有友好的开发调试环境 tornado,便于操作、配置和应用程序的开发调试,并可以运行到多种主机上,支持 Ul 、WindowsNT等。在 tornado中还可以增加或裁减系统功能 ,使应用程序的大小得到保障。
VxWorks具有很好的兼容性,是最早兼容 POSIX 1003.1b标准的嵌入式实时操作系统之一,同时支持 ANSIC标准。
VxWorks系统的任务调度机制
针对多任务系统而言,调度是指根据一定的算法 .将CPU 分配给符合条件的任务使用,不同的系统任务调度机制不同。本文介绍VxWorks系统的任务调度策略和算法.分析优先级倒置产生的原 因并给 出解决方案。重点阐述静态表方式的实现方法并给出C语言程序框架
嵌入式系统不但要满足应用的功能需求 ,更重要的是要满足应用提出的实时性要求 。因此,嵌入式系统的关键在于,采用各种算法和策略,始终保证系统行为的可预测性,即在系统运行的任何时刻、任何情况下,任务调度程序都能为每个任务合理地分配资源,使每个任务的实时性要求都能得到满足。Vxworks系统提供的调度算法主要针对非周期性任务,并没有提供调度和管理周期性任务的机制,而且在优先级抢占调度中也存在着优先级倒置等问题。这些问题的存在,严重地影响了系统的实时性和可预测性,降低了系统的性能。因此有必要对这些问题进行深入讨论 。
1 任务调度依据
VxWorks系统 中,每个独立的程序称为一个任务 ,为了便于Wind内核对任务实施管理和调度,每个任务都有自己的上下文 ,包括 :程序计数器 (PC)、延时定时器 (Priority)、时间片定时器 (Counter)和堆栈 (Stack)等 。
调度程序的功能是在所有处于就绪状态的任务中选择最值得运行的任务投入运行,选择任务的主要依据是任务上下文中的 Priority和Counter选项,其中
Priority是任务的静态优先级 ,Counter是任务剩余的时间片,他是决定一个任务可否处于运行状态的重要标志 。
2 任务调度策略
2.1 基于静态优先级的抢占调度
优先级是创建任务时 ,由系统或用户设置的整数;静态是指任务的优先级不随时间而改变 ,只能由用户进行修改。静态优先级指明了在被迫和其他任务竞争CPU 之前 ,该任务被允许的最大时间片,IPriority的值 。
所谓抢 占是指 ,如果系统发现有一个任务转为就绪态,并且该任务的静态优先级比当前正在运行的任务的优先级高,内核立即停止当前任务的执行,然后 切换到这个高优先级任务的上下文执行。
静态优先级是调度程 序选择任务投入运行的标志,优先级越高,该任务得到CPU 时间的机会也就越大。
2.1.1 优先级倒置
在静态优先级抢 占方式中,调度程序保证高优先级的任务先执行。但是由于任务间的资源竞争问题会使得一个高优先级 的任务被迫等待一个低优先级任务完成,才能执行。这种情况就是优先级倒置。
2.1.2 解决方案
(1)优先级继承
让拥有资源的任务以阻塞在该资源上的所有任务的最高优先级运行 ,直到他持有的所有资源全部释放然后该任务返 回正常优先级 。
(2)极限优先级
把临界资源赋予极限优先级,他等于此时系统中的最高优先级加 1。当任务到达临界区时,系统把极限优先级传递给该任务 ,使得他的优先级最高 ;当任务退出临界区后 ,系统恢复他的正常优先级 ,从而保证不会出现优先级倒置的情况。
2.2 基于动态优先级的轮转调度
动态优先级是指只要任务拥有CPU,优先级就随着时间不断减小 ,当他小于0时,标记任务可以重新调度。动态优先级指明了同优先级的任务共享 CPU 之前,允许占用CPU的剩余时间片,即Counter的值。 Counter的初值与函数TaskSpawn()中Priority参数的初值相同,在任务运行过程中,Counter不断减少 ,Priority保持不变,以便 在 Counter变为 0时对Counter重 新赋 值 。这说 明,任务在运行过程中, Counter的减小给了其他任务得 以运行的机会,直到 Counter减为 0时才完全放弃使用CPU。
2.3 静态表调度
用静态表构造周期任务的调度和管理程序 ,以满足VxWorks调度不同类型任务的需求。
(1)周期任务与静态表
周期任务是指每个周期运行一次的任务,其特点
有 :
①每个周期内任务运行一次。
②周期完成 ,任务被挂起,等待下一个周期到来 ,然后 再运行 。
③在规定周期内,任务若不能完成,将产生超时,要有相应的处理程序 。静态表是指在系统运行前根据各周期任务的实时要求用手工方式或辅助工具的帮助下生成一张任务的运行时间表,指明了各任务的起始运行时间以及运行长度,运行时间表一旦生成就不再变化,在运行时调度器只需根据这张表在指定的时刻启动相应的任务即可 。
(2)静态表调度管理的功能
为适应周期任务的调度要求,静态表调度管理提供以下功能 :
①建立静态表,登记周期任务的相关信息。
②周期任务一次运行结束,在静态表中记录任务的状态 ,并将其挂起。
③任务周期数到达时,判断该任务是否结束,在未超时的情况下 ,任务被挂起 ,否则报告并处理任务超时。
2 VxWorks的系统功能
VxWorks 的系统功能主要包括:任务的管理机制、任务间的通信机制。
2.1 任务管理机制
VxWorks是一个多任务环境。任何一个正在执行的程序都可称之为任务。
每一个任务都有自己的上下文。上下文保存在任务控制块中,是任务转为运行状态时要查看的CPU的环境资源和系统资源。一个任务的上下文包括:任务程序计数器、CPU寄存器和浮点寄存器、动态变量和调用函数的栈、标准输入输出的I/0分配、延时的时间、时间片的大小、内核控制结构、信号处理、调试和性能监视。
在VxWorks中,任务有多种状态,内核根据应用程序的需求调度任务状态的转换。主要的状态包括:
READY:任务已经得到所有需要的资源,只等待CPU分配运行时间;
PEND:任务由于某种资源不可用而阻塞。阻塞的任务可以参加系统任务调度;
DELAY:任务由于系统要求延时而进入睡眠状态;
SUSPEND:主要是因为调试才进入的状态。
任务被创建后首先进入 s.,spend状态,根据某种系统调用在状态之间进行转换。如调用taskAcfive就可以从suspend转到ready状态。任务初始化完成后处于 suspend状态。
在 VxWorks 中,基于优先级的抢占式调度算法是基本的任务调度机制,同时也可以选择时间片轮询算法。在抢占式调度机制中,每一个任务都有优先级,内核确保 CPU分配给最高优先级的任务。抢占式调度机制的核心是当有更高优先级的任务准备运行时,内核保存正在执行的任务的上下文的同时立即切换到更高优先级任务的上下文。Wind内核共有 256个优先级,0的优先级最高,255的优先级最低。任务在创建的时候优先级就已经被分配,在运行过程中可以调用系统功能修改任务的优先级。如果任务的优先级相同,可以采用时间片调度算法,CPU均匀分配给每个任务相同的运行时间。
2.2 任务间的通信机制
VxWorks提供了多种通信方式以满足各种形式的需求。1)共享内存。适用于简单的数据共享。2)信号量。在资源互斥和任务同步的情况下使用。VxWorks的信号量提供了最快的任务间通信机制。信号量作为任务等待运行的条件或事件 ,一般在中断服务程序(ISR)和任务之间使用。首先创建一个空的二进制的信号量,然后在 ISR中使用semGive释放,在任务中使用 semTak得到,并对产生 中断的事件进行分析和处理。3)消息 队列。在VxWorks中,主要的任务间通信使用消息队列。一般每个任务创建一个消息队列 ,消息队列使用 msgQCreate创建 ,其中的参数指定了可以容纳队列的个数、每个队列的长度。任务或 ISR使用msgQSend向指定的任务发送数据,任务使用 msgQReceive从指定的队列接收数据。如果没有数据,则任务进入阻塞状态并且被加到等待消息的任务队列 中等待 内核的调度。任务队列按照优先级或先进先出(FIF0)原则排序。消息的接收和发送都有时超参数 ,对于发送,如果 目的队列没有足够空间,则在时超范围内等待。对于接收,如果接收队列没有消息,则在时超范 围内等待接收时超参数也可以设置为WAIT-FOREVER如果没有消息则永远等待。
3 VxWorks的工程实现
具体实现包括 :BSP的建立 、项 目的建立和编译、VxWorks镜像的选择。
3.1 建立 BSP
板级支持包(Board Sevice Packet)的目的就是为 VxWorks提供硬件环境的接口,加电后配置 CPU的参数、初始化 RAM 和FLASH、驱动串口和网口、加载 VxWorks内核,建立最小 的 VxWorks系统。一般应用在调试阶段,是程序开发必不可少的步骤和调试手段。
BSP包括以下几个文件 :1)makefile。包含了一些宏定义,包括:处理器类型、RAM 和I M(FIASH)的大小、VxWorks拷贝地址、文件目录等。2)romlnit.S。屏 蔽中断,初始化 CPU关闭cache,初始化 RAM。3)config.h。包含所有的头文件和与 CPU相关的宏定义,如对 cache和 MMU的配置,对 RAM 和 ROM 的定位以及大小配置,外部总线地址映射等。4)bootConfig.C。完成各种系统调用和硬件的初始化 ,如初始化网VI、串VI、时钟,启动VxWorks最小多任务环境,从宿主机上下载VxWorks镜像。5) bootlnit.c。完成 flash中程序到RAM中的拷贝。目标板加电后,首先在 flash中执行 romlnit.s,完成对 CPU的初始化,然后执行 bootlnit.c,将代码从 flash拷贝到 RAM 中并执行各种基本 I/O的初始化并从开发板下载 VxWorks。BSP执行的大多数操作是各种发布版本必须的操作,所以 BSP的调试是 VxWorks应用开发的基础。BSP开发的难点在于 mmlmt.S文件,因为这个文件中的代码不能跟踪 ,没有什么调试手段 ,但是一些重要 的工作都在其中执行,如 RAM 的初始化、UPM 表的使用等。在通过串口或网口可以跟踪调试以前,点灯是最好的调试手段。
3.2 项目的建立和编译
通过编译环境 tornado可以建立 project。建立时一般选择 boomble启动类型,然后依据调试成功的 BSP建立项目。项目建立后,可以通过 tornado裁减 目标板不需要的系统组件,这样可以大大减小应用程序的长度。在 tornado中可以定义全局使用的宏定义和编译条件,然后生成需要的镜像(应用程序)。
3.3 VxWorks镜像
镜像是最后的应用程序,依据具体的BSP和project生成。根据不同的运行方式,可以分成 RAM 型和 ROM型。
VxWorks镜像:属于RAM型,在RAM中运行,由bootRon通过RS232或 RJ45从开发板或局域网下载到 RAM 中的RAM—LOW--ADDR处执行。这种形式的镜像一般在调试过程中使用 ,可以通过设置断点 、任务监视等手段跟踪代码的运行 ,能方便快速的定位问题并解决问题。VxWorks_-rom镜像:属于RAM 型,在RAM 中运行。应用程序固化在 flash或 rom中,加电后,拷贝至RAM 中的 RAM一ⅧGH—ADI)R处执行。这种形式的镜像应用最普遍。但是如果一旦应用程序有问题,则必须重新烧录flash 或rom,程序升级时不方便。VxWorks---rcaRes镜像:属于ROM 型。应用程序固化在 flash或rom中并在 flash或ton1中运行。这种方式应用在 RAM 资源比较少的情况下。
通过调试成功的BSP,使用串口或网口从主机上下载VxWorsk镜像并运行。在运行后,可以使用 target server对任务设置断点 ,查看变量、任务的状态等进行调试。调试成功后 ,重新建立项目文件,添加代码文件,生成 VxWorks--rom镜像文件 ,然后通过 BDM接口,使用 visionClick等烧录软件将 VxWork-rom固化到 flash或 rom中。
结 论
VxWorks十分灵活,有多达1800个功能强大的应用程序接口(API);同时它 的可靠性也非常高 .可以用于从防抱死刹车系统到星际探索的关键任务;而且 它的适用性很强,可以用于所有的流行 的 CPU平 台。它采 用的微内核结构.具有支持处理器种类多,网络协议丰富,兼容性和裁减性好等特点.同时具有程序动态连接和下载的功能。
参考文献:
[1]罗国庆.VxWorks与嵌入式软件开发 机械工业出版社 。2004.
[2]期刊《电脑知识与技术》VxWorks嵌入式实时操作系统的结构研究 同济大学软件学院
[3]期刊《现代电子技术》(半月刊)VxWorks系统的任务调度机制 空军工程大学工程学院
[4]网络协议分析论坛 http://www.cnpaf.net/收集了部分资料
[5]电子产品世界论坛http://bbs.edw.com.cn/收集了部分资料
评论内容:发表评论不能请不要超过250字;发表评论请自觉遵守互联网相关政策法规。