1、VxWorks 操作系统及实时多任务程序设计刘尉悦 张万生 邢涛 王砚方(中国科技大学近代物理系,合肥, 230027摘要 :数字式声纳系统需要实时的显示其搜索、 跟踪结果, 同时对用户命令作出及时的响应, 并实时控制前端的硬件。本文介绍基于 VxWorks 实时操作系统和 X 窗口系统的显示及控制 程序设计。着重介绍本系统中基于 VxWorks 的实时多任务程序设计。关键词:实时,实时操作系统, VxWorks , X-Window一. 系 统概况本系统运行于 VME 总线系统 (MVME177上, 通过 VME 背板总线与各模件交换数据对 各处理模件进行控制并把信号处理结果显示。 MVME
2、177模件运行于嵌入式实时操作系统 VxWorks 下,人机交互界面基于 X 窗口系统。二. 嵌 入式实时操作系统 VxWorks 简介由于声纳系统在探测到某些目标后 (例如鱼雷 要迅速作出反应, 所以要求控制及显示 系统必须是实时操作系统。 实时操作系统, 要求能够随时打断正在执行的任务, 对内部和外 部发生的事件在确定的时间内作出响应。本系统采用的 VxWorks 是由美国 WindRiver 开发 的一种类 UNIX 的高性能嵌入式实时操作系统。 它是目前世界上用户数量最大的实时操作系 统。具有优越的技术性能、丰富的应用软件支持、良好的技术服务和可靠的系统稳定性。 VxWorks 的主要
3、性能特点有:1.高度可剪裁的微内核结构 VxWorks 的 所 需 要 的 存 储 器 空 间 大 约 为 8KB488KB(ROM、 620KB29.3KB(RAM,具有极好的可伸缩性。2.高效的多任务调度 VxWorks 支持中断驱动的优先级抢占式调度和时间片轮转调度, 并具有确定的、快速的上下文切换能力。3.灵活的任务间通讯手段 支持信号灯、消息队列、管道、信号和套接字等进程间通 讯和互斥手段。4.支持诸如 Ring buffer、 Link list 等共享内存技术。5.确定的、微秒级的中断延迟时间。6.适用于多种物理介质的 TCP/IP协议族支持和几乎所有常用的基于 TCP/IP协议
4、的应 用层协议。7.极其丰富的板级支持软件包(BSP , 支持多种处理器板。8.支持 POSIX 1003.1b (实时扩充 。9.快速、灵活的 I/O系统。10.支持 MS-DOS 、 RT-11和 RAW 等文件系统和网络文件系统 (NFS。11.灵活的启动方法,支持从 ROM 、本地磁盘以及网络启动。三. VxWorks 的一些技术特点VxWorks 的特点主要在于嵌入式和实时性。由于嵌入式的特点,系统内核只有任务管 理和简单的内存管理, 在此之上可以根据需要配置各种功能模块, 包括网络管理、 文件系统、 虚拟存储器等等。 实时性则体现在实时调度算法和实时内核 (高效的进程间通讯、 内存
5、管理等 。VxWorks支持 POSIX 标准, 所以 POSIX 的概念和接口以及一些策略都被支持, 但为了 提高系统性能, VxWorks 另有一套接口及实现策略称为 wind 内核,下面的讨论主要是针对 wind 内核而言的, POSIX 标准可以参见相关资料。h 任务在 VxWorks 中, 最小的程序运行单位称为任务 (Task。 每个任务包含有一段固定的代码 和数据空间,操作系统内核通过任务控制块(Task Control Block对它的执行、通讯、资源 等情况进行控制。任务具有就绪、阻塞、挂起和延迟等状态。与 Linux 和 WindowsNT 下的进程不同的是:在 VxWor
6、ks 中, 所有任务共同享有物理内 存,存在于统一的线性空间中,每个任务没有自己独立的代码段和堆,只有独立的动态栈, 任务中的地址即是真正的物理地址。 由于不需要进行地址空间映射, 在任务切换时的上下文 切换 (Context Switch时间大为减少, 符合实时操作系统要求快速响应的原则。 从这个意义上 来说, VxWorks 的任务更接近 Linux 和 WindowsNT 下的线程 (Thread。VxWorks 的代码段与堆共享减少了上下文切换时间,却带来了共享代码的可重入性 (Reentrancy问题。如一个函数被两个任务所调用,当其中包含对全局、静态变量等从堆中 分配空间的数据进行
7、访问时, 就有可能产生冲突, 从而引发错误。 在应用软件开发时要加以 注意,解决方法是使用局部变量(从栈中分配空间或使用信号灯对临界代码进行监控。h 任务调度VxWorks 有两种任务调度策略,优先级抢先调度和时间片轮转调度。这两种调度策略都是系统级的,与 POSIX 进程级的调度策略不同。即整个系统里要么是优先级 抢先调度,要么是时间片轮转调度;而 POSIX 标准下可以每个进程使用自己的调度策略。 系统共有 256个优先级。优先级抢先调度指的是一个优先级较低的任务正在执行中,另一个优先高的任务进入就绪状态, 则马上进行处理器抢先, 执行高优先级任务。 直到高优先级释放处理 器(完成、挂起、
8、阻塞 才继续执行低优先级任务。优 先级抢先调度可以保证实时系统的迅速响应特性, 但是也带来一个问题:当系统中存 在几个相同优先级的任务时, 就会使单一任务独占处理器直至完成。 所以加入了基于优先级 的时间片轮转调度方式。 在不同优先级的任务间以抢先方式调度, 相同优先级的任务则以时 间片进行轮转。h 存储管理在基本的 wind 内核中,任务直接操作线性物理内存,不存在虚拟存储等复杂的存储管 理策略,这主要是从性能来考虑的。不过 VxWorks 也提供支持 POSIX 标准的虚拟存储区和 共享内存(多处理器间共享组件。h 任务间通讯在任务间传递控制信息时,通讯量小, wind 内核支持各种 UN
9、IX 的通用手段:信号灯 (semaphore 、 消息队列 (Message Queue 、 管道 (Pipe 、 信号 (Signal 、 套接字 (Socket 。 信号灯主要用于对临界资源访问的同步和互斥; 消息队列多用于消息驱动机制; 管道是基于 文件系统实现的任务间按先进先出方式传送数据的通讯方式; 信号相当于软中断; 套接字机 制主要用于网络通讯。当任务间需要大量交换数据时,由于 VxWorks 直接操作物理内存,可以直接访问全局 存储区,不需要特别的手段,与 Linux 下的共享存储段申请和 WindowsNT 中的存储映射文 件方式不同。h 中断在 VxWorks 下,所有中
10、断服务程序都不属于任何一个任务,并且使用同一个栈进行数 据存储, 则中断将不会引起上下文切换, 以实现高效的中断响应。 中断与各任务之间可以通 过前面所述的各种手段进行通讯, 但要注意对中断服务程序有一些限制, 例如不能进行可能 导致阻塞的资源申请等等。h 文件系统VxWorks支持多种本地文件系统:MS_DosFS、 RawFS 和 RT-11FS ,用户可根据具体配 置选择;还支持网络文件系统 NFS ,可以没有局域文件系统。h 网络支持Vxworks支持多种物理介质的 TCP/IP协议族和几乎所有常用的基于 TCP/IP协议的应用 层协议如 ARP 、 BOOTP 、 SLIP 和 FT
11、P ,甚至其启动就是通过 BOOTP 或 FTP 方式取得系统 映象文件。以上简单介绍了一些 VxWorks 的技术特点,要注意这些特点都是跟 VxWorks 的特性 实时性与嵌入式密切相关的。四. X 窗口系统本系统采用美国 Peritek 公司的 VCL-V 图形控制器插件进行显示输出和输入控制, 户户 界面基于 X-Window 。 X 客户程序的开发选用美国 SeaWeed 公司的 SeaWindM 软件。X 是美国麻省理工学院 (MIT研制的一个可移植的网络透明的窗口系统。它具有设备独 立性和网络透明性的特点,即基于 X 开发的应用程序不需要重写或重新编译就可以在新的 显示硬件上执行
12、,并且在网络环境下用户通过 X 可在网络任一节点上运行 X 的应用程序而 不必考虑该节点的物理位置。五. 显 示与控制系统的具体实现本系统的功能主要是初始化各处理模件、 根据输入命令对各处理模件进行控制和对处理 结果的实时显示, 这些都是通过与相应子系统的数据通信来完成的。 对通信数据和策略的分 析是系统设计的关键。 系统与其它子系统中存在着这样几类通信数据:与前端模拟子系统的 控制信息与数据、 与数字信号处理子系统相关的控制信息和数据、 发射信号控制信息、 显示数据以及从键盘和鼠标获得的输入信息。这几类数据都是通过 VME 背板总线传输,通过对 VME 地址空间直接读写进行访问。其中由数字信
13、号处理子系统送来的数据是由数据更新事 件驱动, 为了满足实时性的要求, 需要在每组结果数据更新之前完成通信, 因此处理的优先 级需要很高。基于上面的考虑,系统划分为四个任务:系统监控、显示与输入、子模件控制和错误处 理。这些任务都设计为事件驱动流程,如图一示。 图一各任务流程框图系统监控 -提交和监控其它子任务。显示与输入 -实时显示信号处理结果和产生输入消息。子模件控制 -向各子模件发送控制参数和计算数据,由输入消息驱动。错误处理 -根据错误类型进行相应处理:显示错误信息、重启动各模件、中止系统, 由出错消息驱动。信号处理结果读取在显示和输入任务中完成, 其驱动事件为处理结果更新。 在被动声
14、纳 处理中, 短时间能量积累的结果每 64ms 更新一次, 平均功率谱结果每 1.5s 更新一次; 主动 声纳处理的幅度信息数据率为 1.3K/S,频域处理结果更新率为 5-10次 /秒。如果由信号处 理模件在数据更新后向 MVME177发送中断事件的话, 由于数据更新率差别较大, 可能造成瞬 间中断频繁,增加处理复杂度。所以采用定时中断,使用间隔为 50ms 的定时中断去检查数 据更新标志,既能保证实时数据刷新又能简化处理结构。各任务间的大批量数据传输利用 VxWorks 的共享内存直接访问,而传递控制消息多采 用消息队列(Message Queue 。在显示和输入任务中由两类驱动事件:键盘
15、、鼠标输入和显 示数据更新,显示刷新的优先级应该高于人工输入,所以在这里使用了信号(Signal 。当 任务接捕获信号时, 立即中断正在执行的流程, 转而进行信号服务处理, 完成后继续原处理 流程,可以保证显示的实时刷新各任务之间的通讯机制是由四个消息队列,一个定时中断和一个信号完成:消息队列 SystemMsg :包括系统开机、系统关机、系统复位、系统重启等,由错误处理 任务和用户键盘输入产生,由系统监控任务接收。消息队列 ParamModifyMsg :包括更改前端硬件参数、 DSP 参数等,由用户键盘输入产生,由子模件控制任务接收。消息队列 ErrorMsg :定义了各种错误类型,由各任
16、务的出错接口产生,由错误处理任 务接收。 图二 各任务优先级和消息传递示意图X 消息队列由显示和输入任务接收 (被 SeaWindM 软件包封装 。定时中断:由系统监控任务启动和停止,读取 DSP 处理结果。信号处理:由显示和输入任务注册,定时中断发送信号,接收到后进行数据显示。系统定义全局变量 System_Data,其数据类型为自定义的 System_Data_Struct结构,通过 System_Data实现任务间的数据交换。六. 结 语以上介绍了数字式声纳的显控系统的设计。基于 VxWorks 的多任务设计使系统的实时 性和稳定性都非常好。目前该显控系统已通过测试,达到了系统的设计要求
17、。Control And Display System Design On Digital Sonar Liu Weiyue, Zhang Wansheng, XingTao ,Wang Yanfang( University of Science and Technology of China,Heifei,230027Abstract This paper introduces real time control and display system design on digital sonar system, and multi-task programming on VxWorks is discussed.Key words: real time, real time operating system, VxWorks, X-Window