
VxWorks的信号量机制分析
VxWorks信号量是提供任务间通信、同步和互斥的最优选择,提供任务间最快速的通信。也是提供任务间同步和互斥的主要手段。VxWorks提供3种信号量来解决不同的问题。
二进制信号量:最快的最常用的信号量,可用于同步或互斥。
互斥信号量:为了解决内在的互斥问题如优先级继承、删除安全和递归等情况而最优化的特殊的二进制信号量。
计数信号量:类似于二进制信号量,但是随信号量释放的次数改变而改变。
二进制信号量
二进制信号量能够满足任务间的互斥和同步,需要的系统开销最小,因此也称快速信号量。二进制信号量可以看成一个标志,对应资源是可用还是不可用。当一个任务调用semTake ()请求一个信号量时,如果此时信号量可用,信号量会被清零,并且任务立即继续执行;如果信号量不可用,任务会被阻塞来等待信号量。
当一个任务调用semGive ()释放一个二进制信号量时。如果信号量已经可用,释放信号量不会产生任何影响;如果信号量不可用并且没有任务等待使用该信号量,信号量只是被简单地置为可用;如果信号量不可用并且有一个或多个任务等待该信号量,最高优先级的任务被解阻塞,信号量仍为不可用。
互斥
当两个以上的任务共享使用同一块内存缓冲区或同一个I/O设备之类的资源时,可能会发生竞争状态。
二进制信号量可以通过对共享资源上锁,实现高效的互斥访问,不象禁止中断或禁止抢占,二进制信号量将互斥仅仅限于对与之联系的资源的访问,并且比禁止中断和禁止抢占提供更精确的互斥粒度。使用时创建用于保护资源的二进制信号量,初始时信号量可用。
当任务需要访问这个资源时,首先取得这个信号量,所有其它想要访问这个资源的任务将被阻塞。当任务完成了对该资源的访问时,释放该信号量,允许其他任务使用该资源。因此所有对一个需要互斥访问资源的 *** 作由semTake ()和semGive ()对一起来实现。
semTake(semMutex,WAIT FOREVER)
临界区,某一时刻仅被一个任务访问
semGive (semMutex)
同步
信号量另一种通常的用法是用于任务间的同步机制。在这种情况下,信号量代表一个任务所等待的条件或事件。最初,信号量是不可用的。一个任务或中断处理程序释放该信号量来通知这个事件的发生。等待该信号量的任务将被阻塞直到事件发生、该信号量可用。一旦被解阻塞,任务就执行恰当的事件处理程序。信号量在任务同步中的应用对于将中断服务程序从冗长的事件处理中解放出来以缩短中断响应时间是很有用的。
互斥信号量
互斥信号量是一种特殊的二进制信号量,用于解决具有内在的互斥问题:优先级继承、删除安全和对资源的递归访问等情况。
对于一般的 *** 作系统,一般互斥信号量就是二值信号靓量,但VxWoks中有非同寻常的意义。另外一个典型就是,Linux内核也单独设立了互斥信号量。
互斥信号量与二进制不同点在于:
①定义一个互斥信号量时,其已经初始化完毕为可用,它仅用于互斥;
②仅能由取(semTake ())它的任务释放,即由同一个任务申请然后使用完毕后释放;
③因为semTake和semGive是成对出现的,因此不能在ISR 中释放(semGive ())。
优先级继承
优先级倒置发生在一个高优先级的任务被迫等待一段不确定时间,等待一个低优先级任务完成。VxWorks允许使用优先级继承算法,在互斥信号量中使用选项SEM-INVERSION-SAFE ,将使能优先级继承算法,优先级继承协议确保拥有资源的任务以阻塞在该资源上的所有任务中优先级最高的任务的优先级执行,直到它释放所拥有的所有信号量,然后该任务返回到正常状态。因此这个“继承的高优先级”任务受到不会被任何中间优先级任务抢占的保护。
删除安全
另一个互斥问题涉及到任务删除。在一个受信号量保护的临界区,经常需要保护在临界区执行的任务不会被意外地删除。删除一个在临界区执行的任务可能引起意想不到的后果,造成保护资源的信号量不可用,可能导致资源处于破坏状态,也就导致了其他要访问该资源的所有任务无法得到满足。
原语taskSafe()和taskUnsafe ()提供了防止任务被意外删除的一种方法。同时互斥信号量提供了选项SEM-DELETE-SAFE ,使用这个选项,每次调用semTake ( )时隐含地使能了taskSafe(),当每次调用semGive ()时隐含地使能了taskUnsafe ()这种方式,任务得到信号量时得到不会被删除的保护。
递归资源访问
互斥信号量能够被递归地获得。这意味着信号量能够被一个拥有该信号量的任务在该信号量最终被释放之前多次获取。递归对于满足一些子程序即要求能够相互调用但是也要求互斥访问一个资源非常有用。这种情形是可能的,因为系统需要跟踪哪一个任务当前拥有信号量。
计数器信号量
计数器信号量是实现任务同步和互斥的另一种手段,在具体实现上有点差异。计数器信号量除了像二进制信号量那样工作外,还保持对信号量释放次数的跟踪。与二进制信号量不同的时,计数型信号量每次释放,计数器加一;每次获取,计数器减一,当信号量减到0 时,试图获取该信号量的任务被阻塞。
正如二进制信号量,当计数信号量释放时,如果有任务阻塞在该信号量阻塞队列上,那么任务解除阻塞;但是如果信号量释放时,没有任务阻塞在该信号量阻塞队列上,那么计数器加一。
结 论
通过对嵌入式 *** 作系统VxWorks的多任务之间的通信机制的分析可以看出,信号量在实现多任务间的通信、同步和互斥中发挥着重要的作用。因此,深入理解和正确使用VxWorks的信号量,可以提高实时系统中多任务间通信的效率
vxworks
VxWorks 是美国 Wind River System 公司( 以下简称风河 公司 ,即 WRS 公司)推出的一个实时 *** 作系统。Tornado 是WRS 公司推出的一套实时 *** 作系统开发环境,类似Microsoft Visual C,但是提供了更丰富的调试、防真环境和工具。
VxWorks *** 作系统有以下部件组成:
内核(wind):
多任务调度(采用基于优先级抢占方式,同时支持同优先级任务间的分时间片调度)
任务间的同步
进程间通信机制
中断处理
定时器和内存管理机制
I/O 系统
VxWorks 提供了一个快速灵活的与 ANSI C 兼容的 I/O 系统,包括 UNIX 标准的Basic I/O(creat(), remove(), open(),close(), read(), write(), and ioctl()),Buffer I/O (fopen(), fclose(), fread(), fwrite(), getc(), putc()) 以及POSIX 标准的异步 I/O。VxWorks 包括以下驱动程序:网络驱动、管道驱动、RAM盘驱动、SCSI驱动、键盘驱动、显示驱动、磁盘驱动、并口驱动等
文件系统
支持四种文件系统: dosFs,rt11Fs,rawFs 和 tapeFs
支持在一个单独的 VxWorks 系统上同时并存几个不同的文件系统。
板级支持包 BSP(Board Support Package)
板级支持包向VxWorks *** 作系统提供了对各种板子的硬件功能 *** 作的统一的软件接口,它是保证VxWorks *** 作系统可移植性的关键,它包括硬件初始化、中断的产生和处理、硬件时钟和计时器管理、局域和总线内存地址映射、内存分配等等。 每个板级支持包括一个 ROM 启动(Boot ROM)或其它启动机制。
网络支持:
它提供了对其它VxWorks系统和TCP/IP 网络系统的"透明"访问,包括与BSD套接字兼容的编程接口,远程过程调用(RPC),SNMP(可选项),远程文件访问(包括客户端和服务端的NFS机制以及使用RSH,FTP 或 TFTP的非NFS机制)以及BOOTP 和代理ARP、DHCP、DNS、OSPF、RIP。无论是松耦合的串行线路、标准的以太网连接还是紧耦合的利用共享内存的背板总线,所有的 VxWorks 网络机制都遵循标准的 Internet 协议。
系列网络产品:
WindNet SNMP
WindNet STREAMS
WindNet 第三方产品,包括 OSI、SS7、ATM、Frame Relay、CORBA、ISDN、X25、
CMIP/GDMO、分布式网络管理等。
这些产品扩展了VxWorks的网络特性,并增强了嵌入式处理器的网络特性
虚拟内存( VxVMI)与共享内存(VxMP)
VxVMI 为带有 MMU 的目标板提供了虚拟内存机制。
VxMP 提供了共享信号量,消息队列和在不同处理器之间的共享内存区域。
目标代理(Target Agent)
目标代理遵循 WBD(Wind Debug)协议,允许目标机与主机上的 Tornado 开发工具相连。在目标代理的缺省设置中,目标代理是以 VxWorks 的一个任务tWdbTask 的形式运行的。
Tornado 目标服务器(Target Server)向目标代理发送调试请求。调试请求通常决定目标代理对系统中其它任务的控制和处理。缺省状态下,目标服务器与目标代理通过网络进行通信,但是用户也可以改变通信方式。
实用库
VxWorks 提供了一个实用例程的扩展集,包括中断处理、看门狗定时器、消息登录、 内存分配、字符扫描、线缓冲和环缓冲管理、链表管理和 ANSI C 标准。
基于目标机的工具
在 Tornado 开发系统中,开发工具是驻留在主机上的。但是也可以根据需要将基于目标机的Shell 和装载卸载模块加入 VxWorks。
总之,VxWorks的系统结构是一个相当小的微内核的层次结构。内核仅提供多任务环境、进程间通信和同步功能。这些功能模块足够支持VxWorks在较高层次所提供的丰富的性能的要求。
1、FreeRTOS是一个迷你的实时 *** 作系统内核。最大的特点是“小”,占用资源小,支持8位、16位、32位MCU平台。FreeRTOS提供了 *** 作系统基本的功能和组件,包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等。此外FreeRTOS还有一个最大的优势就是就是免费。不足之处,一方面体现在系统的服务功能上,如FreeRTOS只提供了消息队列和信号量的实现,无法以后进先出的顺序向消息队列发送消息;另一方面,FreeRTOS只是一个 *** 作系统内核,需外扩第三方的GUI(图形用户界面)、TCP/IP协议栈、FS(文件系统)等才能实现一个较复杂的系统,不像μC/OS-II可以和μC/GUI、μC/FS、μC/TCP-IP等无缝结合。
2、VxWorks不仅是一种嵌入式实时 *** 作系统,又是可以运行的最小基本程序。其内部有BSP(BoardSupportPackage,板级支持包),便于进行驱动程序的编写。此外,VxWorks具有强实时性、微内核设计、可裁剪性、可移植性和可靠性等特点,能较好地满足嵌入式开发的需求。缺点就是昂贵的价格让开发者望而却步。
以上就是关于怎么查看semtake vxworks全部的内容,包括:怎么查看semtake vxworks、什么是vxworks、freertos vxworks系统的优点和缺点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)