用Vx Works的信号量机制实现任务同步
信号量在进程同步中的应用及实现

解决进程同步 问题 的算法构架 如下 :
到其他合作进程发 来的消息 之前则阻 与 进程 的互斥 不 同 , 进程 同步时 的信
塞 自己, 直到其他合作进程 给出协调信 号 量 只 与 制 约进 程 及 被制 约 进 程 有
其 号后被唤醒而继续执行 。 进程之间的这 关 而不 是与整 组并 发进 程有 关 , 称
种相互合作等 待对 方消息 的协 调关系 之 为私有 信号量 。 私有 信号量 赋初 为
学 术 纵 横
FZA ・UsU0G EG AHNX EH ZNH N
信号量在进程同步中的应用及实现
口 逯 广 义
摘
要: 本文在阐述进程 同步基本 创建 的先后次序也都是不确定的 , 这就 互 斥信 号量 与所有 的并 发进 程有 关 , 个合作进程到达协调点后 , 在没有得 了公有 资 源 的数 量 ,初值 通 常 为 1 。
一
其二 : 由于进 程访问临界资 源 概念。进程就是进程实体的运行过程 , 值 只能由定义 在信号量上 的 P操 作原 对 出现 ;
而 界区 , 任何时刻只能 是系统进行 资源分配和调度 的一个独 语 和 V操 作原语来 改变 , Q是 个初 的那段资源称为I 所以在 立单位。 进程具有异 步性 即进程按各 自 始状 态为空 的队列 ,即信号量表 示某 有一个 进程进入 自己的临界 区。 独立的、不可预知的速度 向前推进 , 在 类 资源实体与进程 队列 有关 的整 形变 每个进程进 入临界 区之前 调用 P操作 争用临界资源时会 给系统造成混乱 , 于 量 。 根 据 进 程 是引入进程 同步 , 进程同步的主要任务 的制 约关 系信
一
w i s w i s= on- p a (): he < d o o ; t
VxWorks操作系统基础(适合初学者阅读)2024新版

系统库(System Library)
提供一系列操作系统服务,如文件操作、网络协议栈等。
驱动程序(Device Drivers)
与硬件设备交互,实现对硬件设备的控制和管理。
内核组成及作用
内核组成及作用
01
内核的主要作用包括
02 管理系统资源,如CPU、内存、I/O设备等 。
06
VxWorks文件系统操作指南
文件系统类型及特点介绍
RAM-based File System
基于RAM的文件系统,读写速度快,但数据在 关机后丢失。
TrueFFS
Wind River特有的闪存文件系统,提供磨损均 衡和掉电保护功能。
ABCD
DOS File System (dosFs)
兼容MS-DOS的文件系统,支持FAT12、FAT16 和FAT32格式。
01
VxWorks操作系统概述
VxWorks操作系统定义
VxWorks是一款由美国风河公司( Wind River)开发的嵌入式实时操 作系统(RTOS),专为需要实时响 应和高可靠性的应用而设计。
VxWorks提供了丰富的中间件和开发 工具,支持多种处理器架构和硬件平 台,广泛应用于航空、航天、通信、 医疗、工业自动化等领域。
在ISR中处理完中断事件后, 需要及时清除中断标志,避 免重复处理。
中断优先级设置和嵌套处理
01
VxWorks支持多级中断优先级,高优先级的中断可以打断低优先 级的中断处理。
02
中断优先级可以通过配置文件或动态调整进行设置,以满 足不同应用场景的需求。
03
在处理中断时,如果发生更高优先级的中断请求, VxWorks会自动保存当前中断的上下文信息,并跳转到更 高优先级的中断处理程序中。处理完成后,再恢复之前中 断的上下文信息并继续执行。这种机制称为中断嵌套处理 。
基于嵌入式操作系统VxWorks的多任务并发程序设计(6)

基于嵌入式操作系统VxWorks 的多任务并发程序设计的多任务并发程序设计((6)――――综合实例综合实例作者作者::宋宝华 e e--mail:21cnbao@这一次连载我们将给出一个综合的实例,系统地用到连载1~5中所学的知识。
13 系统描述假设我们面对这样的一个通信控制系统,它由三大部分组成:运行于PC 机Windows 操作系统上的人机界面程序、运行于RISC 结构通用处理器上的VxWorks 操作系统和运行于数字信号处理(DSP )处理器上的波形处理软件。
RISC 处理器和DSP 都存在于目标电路板上,是一个典型的嵌入式系统硬件平台。
在Windows 的人机界面上我们可以编辑一些信息,经过TCP/IP 协议栈传递给VxWorks 操作系统,VxWorks 再控制DSP 将这些信息经过数字调制之后发送出去。
VxWorks 与DSP 通过共享内存(硬件意义上的同一片内存,即同一存储芯片的相同存储空间)通信。
系统整体框架如下图:上述框架来源于一个真实的开发项目,限于技术保密的原因,笔者不能透露其细节。
但是从上述简单描述中,我们应该大概已知道该系统的功能。
其实,这样的系统非常常见,是一种较通用的软硬件架构方式。
14 任务控制与调度整个VxWorks 上的波形控制模块需要运行如下几个并发的用户任务: // VxWorks 与DSP 之间的数据传递(1)SendDatatoDSP:VxWorks发送数据到DSP;(2)RecvDataFromDSP:VxWorks从DSP接收数据;// VxWorks与DSP之间的通信控制(硬件查询方式)(3)IsDspDataCome:查询DSP是否有数据向VxWorks传送;(4)IsDspReqData:查询DSP是否向VxWorks及上层请求报文;// VxWorks与Windows的数据传递(5)SendDataToWin:通过socket(基于UDP协议)向Windows上传报文;(6)RecvDataFromWin:接收来自Windows的通过socket(基于UDP协议)下传的报文。
vxworks系统及函数详解

VxWork介绍及编程VxWork介绍及编程一.嵌入式操作系统VxWorks简介VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。
良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。
它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。
在美国的F-16、FA-18 战斗机、B-2 隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。
实时操作系统和分时操作系统的区别从操作系统能否满足实时性要求来区分,可把操作系统分成分时操作系统和实时操作系统。
分时操作系统按照相等的时间片调度进程轮流运行,分时操作系统由调度程序自动计算进程的优先级,而不是由用户控制进程的优先级。
这样的系统无法实时响应外部异步事件。
实时操作系统能够在限定的时间内执行完所规定的功能,并能在限定的时间内对外部的异步事件作出响应。
分时系统主要应用于科学计算和一般实时性要求不高的场合。
实时性系统主要应用于过程控制、数据采集、通信、多媒体信息处理等对时间敏感的场合。
VxWorks的特点•可靠性操作系统的用户希望在一个工作稳定,可以信赖的环境中工作,所以操作系统的可靠性是用户首先要考虑的问题。
而稳定、可靠一直是VxWorks的一个突出优点。
自从对中国的销售解禁以来,VxWorks以其良好的可靠性在中国赢得了越来越多的用户。
•实时性实时性是指能够在限定时间内执行完规定的功能并对外部的异步事件作出响应的能力。
实时性的强弱是以完成规定功能和作出响应时间的长短来衡量的。
VxWorks 的实时性做得非常好,其系统本身的开销很小,进程调度、进程间通信、中断处理等系统公用程序精练而有效,它们造成的延迟很短。
vxWorks多任务编程初探(转)

vxWorks多任务编程初探(转)进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体。
而进程则不同,它是程序在某个数据集上的执行,是一个动态实体。
它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消,反映了一个程序在一定的数据集上运行的全部动态过程。
线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位。
线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。
线程可与属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。
根据进程与线程的设置,操作系统大致分为如下类型:1、单进程、单线程:MS-DOS大致是这种操作系统;2、多进程、单线程:多数UNIX(及类Unix的Linux)是这种操作系统;3、多进程、多线程:Windows NT(以及基于NT内核的Windows 2000、XP等)、Solaris 2.x和OS/2都是这种操作系统;4、单进程、多线程:vxWorks就是这种操作系统。
vxWorks只有一个进程(内存空间和资源分配),其任务的概念与线程大致相当,所有任务之间共享内存和其它资源。
vxWorks由一个体积很小的内核及一些可以根据需要进行定制的系统模块组成。
vxWorks 内核最小为8KB,即便加上其它必要模块,所占用的空间也很小,且不失其实时、多任务的系统特征。
vxWorks的内核主要包括:1、多任务:为满足真实世界事件的异步性,现代操作系统需提供多任务支持,由系统内核分配CPU给多个任务并发执行。
vxworks使用过程中的100个疑问与解答

vxworks使用过程中的100个疑问与解答1. VxWorks是什么?VxWorks是一种实时操作系统(RTOS),由美国Wind River公司开发,适用于嵌入式系统。
2. VxWorks有哪些特点?VxWorks具有高度可靠性、实时性、可移植性和可扩展性等特点。
3.如何安装VxWorks?安装VxWorks需要下载安装包,然后按照安装指南进行安装。
4.如何创建VxWorks任务?可以使用taskSpawn函数来创建任务,指定任务的入口函数、优先级等参数。
5. VxWorks如何进行任务间通信?任务间可以使用消息队列、信号量、共享内存等机制进行通信。
6.如何调试VxWorks程序?可以使用Wind River公司的调试工具Wind River Workbench进行调试。
7. VxWorks支持哪些开发语言?VxWorks主要支持C和C++开发,也可以使用汇编语言和Java等。
8.如何加载和运行VxWorks程序?VxWorks程序可以通过TFTP、FTP等网络协议加载到目标设备上,然后使用命令运行。
9. VxWorks是否支持多任务?是的,VxWorks支持多个任务的同时运行,并通过任务调度器进行任务切换。
10.如何实现任务间的同步?可以使用信号量、事件标志等机制实现任务间的同步。
11. VxWorks中如何实现中断处理?VxWorks提供了中断服务例程(ISR)和处理器驱动程序(DPC)来处理中断。
12.如何列出VxWorks系统中的任务?可使用taskShow命令列出系统中所有任务的详细信息。
13.如何获取任务的优先级?可以使用taskPriorityGet命令获取任务的优先级。
14.如何设置任务的优先级?可以使用taskPrioritySet命令设置任务的优先级。
15.如何控制任务的时间片轮转?可以使用taskDelay命令来控制任务的时间片轮转。
16.如何查看VxWorks系统的中断信息?可以使用intShow命令来查看系统中的中断信息。
VxWorks编程常用函数说明

taskSend() { if (OK != msgQSend(msgQID, "A", 1, NO_WAIT, MSG_PRI_NORMAL)) { printf("Message send failed!"); } }
if (select(width, &readFds, NULL, NULL, NULL) == ERROR) { /*监听*/ close(fds[0]); ... ...; close(fds[3]); return; } for(i=0; i if (FD_ISSET(fds[i], &readFds)) { ... ...; /* 进行读写操作 */
Init() { /* 创建管道 */
if (pipeDevCreate("/pipe/mypipe", 8, 1) != OK) { printf("/pipe/mypipe create fialed!\n"); } /* 创建互斥信号量 */ if ((semMID = semMCreate(SEM_Q_FIFO)) == NULL) { printf("Mutex semaphore create failed!\n"); } }
taskReceive() { uchar_t ch; msgQReceive(msgQID, &ch, 1, WAIT_FOREVER); /* 这里任务会阻塞 */ printf("Received from msgq: %c ", ch); }
VxWorks之认识(转)

VxWorks之认识(转)Tornado是WindRiver公司开发的用于嵌入式开发的一组产品,它包括32位实时操作系统VxWorks,集成开发环境(IDE,包括编译器等)。
下面是我阅读完VxWorks相关文档后的一些个人认识。
一.VxWorks操作系统VxWorks时实时多任务的嵌入式操作系统,它主要包括任务调度、I/O功能、文件系统、中断管理、内存管理、网络功能、内存管理、BSP(系统启动模块)等。
它的多任务的实现是由中断驱动的,即在每个系统时钟中断中,实现任务的调度。
VxWorks中的任务有优先级的概念。
与其它嵌入式操作系统相比,它有如下优点:1.任务之间的切换快,任务间通信手段多样;2.中断响应的延时短;3.内存管理安全:VxWorks把内存分成很多区域,包括内核区、用户区,并且采用虚拟内存管理的方法,这样大大提高了系统的安全性,并且增加了堆栈溢出的判断;4. I/O功能丰富,硬件驱动全面;5.文件系统强大;6.网络功能全面;7.对任务的实时监控;8. BSP(启动模块)的支持;9.多CPU的支持;10.系统各模块是单独的库,可以根据需要加载。
下面就详细讲述各部分内容。
1.多任务功能:VxWorks的任务有优先级的概念,其任务调度也是基于优先级考虑的,是抢占式的,VxWorks的任务有256个等级,0—255,数目越小表示优先级越高。
高优先级的任务可以打断低优先级的任务而抢先执行,只有在高优先级的任务执行完后,低优先级的任务才可以执行。
其调度算法有两种:完全抢占式的和循环分配式的。
完全抢占式的是除了高优先级任务可以打断低优先级任务外,在相同优先级的任务之间,不可以相互打断,并且同优先级任务不是同时执行的,只有等该任务执行完后,与其相同优先级的任务才可以执行;循环分配式除了具有抢占功能之外,相同优先级的任务是可以同时执行的,即系统时间片是在它们之间平均分配的,这样,相同优先级的任务可以同时执行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用其信号量机制 ,可以很好地满足某数据采集系统对数 据共享的要求 。
在使用二进制信号量时 ,要注意以下几点 : (1) 用途不同 ,信号量初始值不同 ; (2) 互斥访问资源时 ,semTake ( ) 和 sem Give ( ) 必须 成对出现 ,且先后顺序不能颠倒 ; (3) 避免删除那些其他任务正在请求的信号量 。
Abstract :Task synchronization for VxWorks to access critical resource mutually is applied. Binary semaphore is an important met hod to re2 alizing synchronization in VxWorks. The result consistent is improved when tasks are executed. The paper introduces binary - semaphore , researches t he techniques of solving mutex and synchronization ,and presents t he program frame in X - data gat hering system ,which use semaphore to control t he data gat hering ,stroing and quering tasks of 8 - receiveing channels sharing t he buffer. Key words :semaphore ;task ;synchronization ;mutex
}
2. 2 实现同步 同步[2 ]是指多任务在执行次序上的协调 ,不会出现与
时间有关的差错 。例如 ,有一输入任务 A 通过单缓冲区 向计算任务 B 提供数据 ,如图 3 所示 。
任务 A → 单缓冲区 →任务 B
图 3 任务 A 和 B 的同步 当缓冲区空时 ,任务 B 因不能获得所需数据而等待 , 当任务 A 把数据送入缓冲区时 ,便应向任务 B 发送一信 号 ,将它唤醒 ;反之 ,当缓冲区满时 ,任务 A 因无法再向缓 冲区中投放数据而等待 ,只有当任务 B 将缓冲区内数据 取走时 ,再向 A 发信号将 A 唤醒 。 为使任务 A 和 B 按顺序执行 ,只需让任务 A 和 B 共 享一个信号量 ,并设其初始值不可用 ,将 sem Give ( ) 置于 任务 A 之后 ,而在任务 B 之前插入 semTake ( ) 即可 。 例如 ,为单缓冲区创建二进制信号量 semSync ,初始 值不可用 :
VxWorks Semaphore Appl ied in Task Synchronization
CON G Wei ,WAN G Yong , YU Hong2kun
( Engineering College ,Airforce University of Engineering ,Xi’an 710038 ,China)
· 4 4 · 微 机 发 展 第 14 卷
2 用二进制信号量实现任务同步 2. 1 实现互斥
互斥[2 ] 是指多任务在访问临界资源时具有排他性 。 为使多个任务能互斥访问临界资源 ,只需为该资源设置一 个信号量 ,并将初始值设为可用 ,然后将诸任务的临界区 代码置于 semTake ( ) 和 Sem Give ( ) 之间即可 。
void Receive - Data () void Translate - Data () void Speed - Sinmulation() { …… {sem Take (semSync) ; {sem Take (semSync) ; ;放数据到缓冲区 ; sem Take (semMu (semSync) ; 数据编译 ;数据查询 } sem Give (semMutex) ; sem Give (semMutex) ; } }
例如 ,为某临界资源创建二进制信号量 semMutex ,初 始值可用 :
SEM - ID semMutex ;
semMutex = semBCreate ( SEM - Q - PRIORI T Y ,SEM - FULL) ;
互斥访问临界资源的任务描述如下 :
task (void) { …… semTake (semMutex ,WAI T - FOREV ER) ; ……;临界区 ,某一时刻只能由一个任务访问 sem Give (semMutex) ; ……
EV ER) ; semGive (semSync) ; …;/ 3 任务 B 取数据 3 / } }
由于 syncSem 的初始值不可用 ,这样 ,若任务 B 先执 行必然阻塞 ,只有在任务 A 执行完 sem Give ( semSync) 操 作后 ,使 semSync 可用 ,任务 B 方能执行 。
第
14 卷 第 7 2004 年 7 月
期
Micro微com p机ute r 发Dev e展lopment
VoJl
. 14 uly
No . 2004
7
用 VxWorks 的信号量机制实现任务同步
丛 伟 ,王 勇 ,于宏坤
(空军工程大学 工程学院 ,陕西 西安 710038)
3 信号量在某数据采集系统中的应用 某数据采集系统中有效地利用了 VxWorks 的信号量
机制 ,实现了 8 个接收通道的数据采集 、数据存储以及数 据查询等任务对缓冲区的共享 ,如图 4 所示 。
图 4 某数据采集系统中多任务共享缓冲区 数据采集任务先将数据放入缓冲区 ,然后数据编译 、 存储 、查询等任务才可以从缓冲区中取数据进行处理 ,所 以对同步的任务 ,一是要保证诸任务的执行顺序 ;二是要 保证数据编译 、存储 、查询等任务互斥地访问缓冲区 。 下面是笔者在开发“某数据采集系统”时用于访问公 共缓冲区的程序框架[3 ] : SEM - ID semMutex ,semSync ; void Task - Define (void) { …… semMutex = semBCreate ( SEM - O - FIFO ,SEM - FULL) ; semSync = semBCreate ( SEM - O - FIFO ,SEM - EMPT Y) ; Task - Receive = taskSpawn ( ……, ( FUNCPTR) Receive - Data , ……) ; Task - Translate = taskSpawn ( ……, ( FUNCPTR) Translate - Da2 ta , ……) ; Task - Simulation1 = taskSpawn ( ……, ( FUNCPTR) Speed - Sim2 ulation , ……) ; …… }
摘 要 :为了保证诸任务对临界 critical 资源 resource 的互斥访问 ,VxWorks 提供了任务同步机制 。二进制信号量是 Vx2 Works 系统中实现任务同步的一种重要手段 ,它保证了任务在并发时结果的一致性 。简要介绍二进制信号量 ,阐述用二进 制信号量解决任务互斥和同步的方法 ,并给出二进制信号量应用在某数据采集系统中的程序框架 。某数据采集系统中有 效地利用了 VxWorks 的信号量机制 ,实现了 8 个接收通道的数据采集 、数据存储以及数据查询等任务对缓冲区的共享 。 关键词 :信号量 ;任务 ;同步 ;互斥 中图分类号 : TP311 . 52 文献标识码 :A 文章编号 :1005 - 3751 (2004) 07 - 0043 - 02
当任务取二进制信号量时要调用 semTake ( ) ,结果取 决于调用时二进制信号量是否可用 。如果可用 ,信号量变 为不可用 ,任务继续执行 ;如果不可用 ,将任务挂起到阻塞
收稿日期 :2003 - 11 - 17 作者简介 :丛 伟 (1973 —) ,女 ,辽宁铁岭人 ,硕士研究生 ,从事机载 计算机软件的教学与研究 。
出版社 ,2003 .
© 1995-2005 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
0 引 言 VxWorks 中的任务 ,改善了资源利用率 ,提高了系统
吞吐量 。为了保证诸任务对临界资源的互斥访问 , Vx2 Works 提供了许多任务同步机制 ,如 :信号量 、禁止中断和 禁止抢占 ,其中信号量是实现任务同步的主要手段 ,也是 解决同步问题的最佳选择 。
在 VxWorks 的 wind 内核中有二进制信号量 、计数信 号量和互斥信号量三种类型 。为了使应用程序具有可移 植性 ,还提供了 POSIX ( 可移植操作系统接口) 信号量 。 所有的这些信号量快速 、高效 ,它们不仅被应用在开发设 计过程中 ,还被广泛地应用在 VxWorks 高层应用系统中 。
SEM - ID semSync ;
semSync = semBCreate ( SEM - Q - FIFO ,SEM - EMPT Y) ;
任务 A 和 B 的执行顺序描述如下 : taskA (void) taskB (void) { { …;/ 3 任务 A 放数据 3 / semTake ( semSync , WAI T - FOR2
参考文献 : [1 ] 孔祥营 ,柏桂枝. 嵌入式实时操作系统 VxWorks 及其开发
环境 Tornado[ M] . 北京 :中国电力出版社 ,2000 . [2 ] 汤子瀛 ,哲凤屏 ,汤小丹. 计算机操作系统[ M ] . 西安 : 西安
电子科技大学出版社 ,2000. [3 ] 罗国庆. VxWorks 与嵌入式软件开发[ M ] . 北京 :机械工业
队列 ,直到该信号量变为可用 。