- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VxWorks的多任务通信机制
VxWorks的多任务通信机制 杭州海康威视数字技术有限公司 陈军科 一、 VxWorks操作系统介绍 VxWorks实时操作系统式由美国WindRiver公司推出的一个运行在目标机上的高性能、可裁减的嵌入式实时操作系统,VxWorks的核心是高性能的微内核wind,其具有快速任务切换、中断支持、抢占式和时间片轮转调度机制等特点,保证对外部事件的快速反应。除了微内核,VxWorks还包括了I/O系统、文件系统、TCP/IP网络系统、图形系统、虚拟内存管理、板极支持包BSP (Board Support Package)等模块,而BSP层的存在使VxWorks可以方便地移植到各种硬件平台。在目前的嵌入式操作系统市场,VxWorks占据着80%以上的市场份额,广泛地应用于通信、消费电子、交通运输、工业控制、航天航空等领域。 二、 VxWorks的多任务通信机制 通常,在一个实时系统中,存在着多个并发的任务来协同实现系统的功能,操作系统必须为这些任务提供快速且功能强大的通信机制。在VxWorks系统中,有信号量(semaphore)、消息队列(message queue)、管道(pipe)、事件(event)等通信机制,对一个系统开发人员来说,如何合理地使用这些通信机制,是系统能够长期高效、可靠、安全运行的关键。 1、 信号量(semaphore) 在VxWorks种,信号量是提供任务间同步和互斥的最快速、开销最小的机制,VxWorks有三种不同类型的信号量: (1) 二进制信号量:可用于2个任务之间的同步工作。如任务A必须在任务B完成特定的动作以后才能进行,在这种情况下,任务A可以获取信号量而处于阻塞(pend)状态,任务B在完成特定的动作后释放该信号量。一般来说二进制信号量适用于一对一的任务之间的同步。 (2) 互斥信号量:主要用于任务之间共享数据区的互斥保护,具有优先级反转、安全删除、递归等特性。在有2个或2个以上的任务共享一个数据区的时候,必须使用互斥机制进行保护。 (3) 计数器信号量:类似于二进制信号量,但是对信号量的释放、获取有计数功能,而二进制信号量则只有0和1两种状态。 VxWorks提供了一组管理信号量的函数接口供开发者使用,包括创建、删除、获取、释放等。虽然信号量具有快速、开销小的优点,但也有它的局限性,首先它无法提供额外的信息,其次对于一个任务必须与多个任务进行同步的情况,信号量也无能为力。因此在许多场合,信号量必须与其它通信机制配合使用来完成任务之间的通信。 2、 消息队列(message queue) 消息队列是VxWorks提供的单个CPU中的任务之间通信的主要机制之一。消息队列允许基于FIFO或基于任务优先级方式排队消息,一个消息队列的消息数目和消息长度可以由开发者在创建消息队列时指定。在理论上,VxWorks允许多个任务向同一个消息队列发送消息,或者从同一个消息队列接收消息;而在实际应用中,一般来说只有一个任务从消息队列接收消息,有一个或多个任务发送消息,即这个消息队列有多个生产者,而只有一个消费者。消息队列时单向的,对于需要进行双向通信的两个任务,必须使用两个消息队列。消息队列非常适合于Client-Server结构的任务之间的通信,如图一,任务Client1和Client2都需要任务Server的服务,它们通过消息队列“Request Queue”向任务Server发送请求和参数,任务Server处理请求后分别通过“Reqpy Queue 1”和“Reqpy Queue 2”向这两个任务返回结果。 图一 Client-Server 任务之间使用消息队列进行通信 在VxWorks中,消息队列是一种代价比较高的一种通信机制,因此在使用时应该使消息的长度尽量短,而且应避免在需要十分频繁通信的场合使用消息队列。另外消息队列中的消息是排队的,即使是完全相同的消息,后面的消息也不会覆盖前面的消息。 3、管道(pipe) 在VxWorks中,管道是一种通过虚拟的I/O设备来实现的消息队列通信机制。使用函数pipeDevCreate()和pipeDevDelete()来生成和删除管道,管道一经生成后,任务之间就可以使用标准I/O操作主要是read()和write()进行通信。管道的优点在于它是一个I/O设备,与标准的VxWorks I/O一样,可以使用select机制,而有了select机制,一个任务很方便地使用多个异步I/O设备,如任务要处理同时从串口、管道、socket接收到的数据,就可以使用select。 4、事件(event) 在5.5版本之前,VxWorks并没有事件这一通信机制。事件(event) 最早出现在pSOS实时操作系统中,在风河公司收购了pSOS之后
文档评论(0)