- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
QNX消息传递及其在线程间通信的应用QNX嵌入式实时多任务操作系统的消息传递和微内核体系结构的特点,创建线程的方法,消息传递的基本原理,以及阻塞式消息传递在线程间通信的实现方法,并给出了实例代码。
? 关键字:QNX? 消息传递? 线程间通信? 阻塞
1?? 引言
QNX操作系统支持多线程,并遵循POSIX线程标准。QNX的进程间通信(IPC)有多种形式,消息传递是最基本的方式,其它还包括代理(proxies),信号(signals),信号灯(semaphore ),共享内存(shared memory),管道(pipes)等,但它们都是建立在消息传递基础之上的。可见消息传递在QNX OS中的重要性,所以本文主要介绍消息传递,并通过实例给出主要编程代码。
当进程中只含有一个主线程时,线程间通信也就是进程间通信;当进程中有多个线程时,线程间通信既可以是不同进程的线程间通信,也可以是同一个进程的线程间通信。消息传递既是进程间通信的一种方式,也是同一进程的两个线程间通信的方式。本文统称为线程间通信。
2??????? ?QNX操作系统
2.1 QNX的微内核结构
QNX嵌入式实时多任务操作系统是由加拿大著名的QNX Software Systems LTD专为PC机开发的操作系统。1999年8月QSSL公司发布了QNX Neutrino 2,它是符合线程规范的、完全以线程进行调度的操作系统。QNX提供多任务、优先级驱动的抢先式调度和快速的上下文切换,是实时应用软件的理想开发平台。通过微内核结构和基于消息的IPC ,QNX 在有效性、模块化、和简单性方面达到独一无二的程度。
消息传递和微内核体系结构是QNX最大的特点,也是与其它OS最大的不同。微内核实现四种服务:IPC、底层网络通信、进程调度、中断派遣;完成两件基本的功能:消息传递和调度。整个QNX OS是由微内核调度管理的一组进程的集合,其体系结构见图(1)。
消息传递是微内核体系结构的核心。在Neutrino 下,取代把OS模块直接绑到内核上,而是通过消息传递完成模块间通信,使得OS具有真正的模块化结构。?????????????
QNX优异的微内核体系结构使之在实时控制、嵌入式系统等领域软件开发中具有强大的生命力。由于它的高可靠性、强实时性、好的扩展性、以及技术先进性和开放性,使它在PC中得到广泛的应用。
2.2 QNX的线程
进程与线程是现代操作系统进行多任务处理的核心内容。QNX微内核支持线程的处理,支持绝大部分的POSIX 标准的线程原语,并且也定义了许多自己的函数。QNX线程的创建,最常用的方法是调用POSIX pthread_create () 函数,其函数原型如下:
# include ?????? pthread.h
int??? pthread_create ( pthread_t???? * thread , const pthread_attr_t???????????? * attr , void? * ( *? start_routine) ( void? *) , void ?????? * arg? ) ;
?????? 函数中有四个变量,它们的含义如下:
?????? thread??????????? pthread_t结构的指针,用来存放线程ID ;
?????? attr??????????????? 属性结构;
?????? start_routine?? 创建线程后,开始执行子线程的函数,即线程的入口函数;
?????? arg? ???????????? 传递给线程入口函数的参数;
3??????? QNX的消息传递
3.1 QNX消息传递的基本原理
消息传递是一种阻塞式的通信,发生在两个线程之间,以客户/服务器(C/S)模式实现。两个线程分别为客户端和服务端,客户端向服务端请求服务。在这种C/S模式中线程有三种状态状态:运行、就绪和阻塞。当一个线程因为它必须等待某些消息协议的结束而不能继续执行时,就称线程进入阻塞。阻塞有三种状态:RECEIVE阻塞,SEND阻塞,REPLY阻塞。典型的消息传递“发送—接受—回应”
状态转移图见图(2)。
在服务端,起初,服务端等待客户端的消息,在消息到来之前,服务端就处于RECEIVE阻塞;当有消息到来时,服务端就进入就绪(READY)状态,并能够运行;而后它根据客户端的请求,回应客户端。而在客户端,起初,客户端自己单独运行,直到需要向服务端发送消息,则从就绪状态转为SEND 阻塞或REPLY阻塞,具体要根据当时服务端的状态确定。在服务端给与回应后,客户端就从阻塞状态转为就绪状态,准备运行。
消息传递还提供一种非阻塞式的通信,是利用脉冲信号(pulse)实现,本文不作介绍。
3.2 QNX消息传递的实
文档评论(0)