- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VxWorks中信号量实现任务间通信与同步机制分析
VxWorks中信号量实现任务间通信与同步机制分析
作者:万 柳,蔡 斌,郭玉东 ?? 时间:2006-10-27??来源:????
摘 要:文章就嵌入式操作系统VxWorks的一个核心问题———任务间通信与同步机制进行讨论,重点分析了信号量在任务间的同步与互斥中的应用。关键词:嵌入式RTOS;多任务;VxWorks;同步;信号量引 言多任务内核、任务调度机制、任务间通信和中断处理机制,这些都是VxWorks运行环境的核心。多任务处理和任务间通信是实时操作系统的基石。一个多任务环境允许将一个实时应用构造成一套独立任务的集合,每一个都有自己独立的执行路线和自己的系统资源,完成不同的功能。任务间通信的机制则允许任务间的同步和通信,以调整系统的行为。VxWorks中,任务间通信的机制包括从快速信号量到消息队列、管道、网络传输套接口。在一个实时系统中,可能有许多任务作为一个应用的一部分执行。系统必须为这些任务提供快速且功能强大的通信机制。内核也要提供能有效地共享不可抢占的资源或临界区所需的同步机制。本文描述了VxWorks任务间通信与同步机制的几种方法,重点讨论了信号量在任务间的同步与互斥中的应用。任务间通信为了提供完整的多任务系统的功能,VxWorks内核提供了一套丰富的任务间通信与同步的机制。这些通信功能使一个应用中各个独立的任务协调它们的活动。任务间通信与同步的机制包括:共享内存,数据简单的共享;信号量,基本的互斥和同步;消息队列和管道,同一CPU内多任务间消息传递;Sockets和远程调用,任务间透明的网络通信;Sinals,用于异常处理。共享数据结构任务间通信最直接有效的方法是访问共享数据结构。由于所有VxWorks任务共存于单一的线性地址空间,多任务间共享数据结构是非常方便的,如图1所示。 不幸的是,共享地址空间具有上述优点的同时,带来了未被保护内存的重入访问的危险。互斥 当用一个共享地址空间作为数据交换时,通过互斥访问避免资源竞争就变为必要。用来获得一个资源的互斥访问的许多机制仅在这些互斥所作用的范围上存在差别。实现互斥的方法包括禁止中断、禁止任务抢占和通过信号量进行资源锁定。 (1)中断禁止最强的互斥方法是屏蔽中断。这样的锁定保证了对CPU的互斥访问。这种方法当然能够解决互斥的问题,但它对于实时是不恰当的,因为它在锁定期间阻止系统响应外部事件。长的中断延时对于要求有确定响应时间的应用来说是不可接受的。因此不适合作为一种通用的互斥方法,但在涉及到ISR 需要互斥时,中断禁止又是必要的。但在任何情况下,应该使中断上锁时间尽量短。(2)抢占禁止禁止抢占提供了强制性较弱的互斥方式。当前任务运行的过程中不允许其他任务抢占,而中断服务程序可以执行。这也可能引起较差的实时响应,就象被禁止中断一样,被阻塞的任务会有相当长时间的抢占延时,就绪态的高优先级的任务可能会在能够执行前被强制等待一段不可接受的时间。为避免这种情况,在可能的情况下尽量使用信号量实现互斥。信号量VxWorks信号量是提供任务间通信、同步和互斥的最优选择,提供任务间最快速的通信。也是提供任务间同步和互斥的主要手段。VxWorks提供3种信号量来解决不同的问题。二进制最快的最常用的信号量,可用于同步或互斥。互斥为了解决内在的互斥问题、优先级继承、删除安全和递归等情况而最优化的特殊的二进制信号量。计数器类似于二进制信号量,但是随信号量释放的次数改变而改变。二进制信号量二进制信号量能够满足任务间的互斥和同步,需要的系统开销最小。二进制信号量可以看成一个标志,对应资源是可用还是不可用。当一个任务调用semTake ()请求一个信号量时,如果此时信号量可用,信号量会被清零,并且任务立即继续执行;如果信号量不可用,任务会被阻塞来等待信号量。 当一个任务调用semGive ()释放一个二进制信号量时。如果信号量已经可用,释放信号量不会产生任何影响;如果信号量不可用并且没有任务等待使用该信号量,信号量只是被简单地置为可用;如果信号量不可用并且有一个或多个任务等待该信号量,最高优先级的任务被解阻塞,信号量仍为不可用。互斥当两个以上的任务共享使用同一块内存缓冲区或同一个I/O设备之类的资源时,可能会发生竞争状态。二进制信号量可以通过对共享资源上锁,实现高效的互斥访问,不象禁止中断或禁止抢占,二进制信号量将互斥仅仅限于对与之联系的资源的访问,并且比禁止中断和禁止抢占提供更精确的互斥粒度。使用时创建用于保护资源的二进制信号量,初始时信号量可用。当任务需要访问这个资源时,首先取得这个信号量,所有其它想要访问这个资源的任务将被阻塞。当任务完成了对该资源的访问时,释放该信号量,
文档评论(0)