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