QNX操作系统信息传递

本文深入探讨了QNX操作系统中的信息传递方式,重点聚焦于信号机制。通过学习,读者将了解QNX如何使用信号来实现进程间的通信,以及这些信号在系统管理和任务协调中的关键作用。
摘要由CSDN通过智能技术生成



一、QNX消息概述
QNX消息可以分为同步消息和异步消息。异步(脉冲)消息主要体现的是一种通知机制,同步消息主要是说消息在传递过程需要双方相互配合的过程。
二、QNX消息传递几个基本概念
1、频道与链接
消息传递是基于服务器与客户端的模式来进行的,QNX6抽象出了”频道“(Channel)这个概念。一个频道,就是一个服务的入口;至于这个频道到底具体有多少线程为其服务,那都是服务器端自己的事情。一个服务器如果有多个服务,它也可以开多个频道。而客户端,在向“频道”发送消息前,需要先建立连接(Connection),然后将消息在连接上发出去。这样同一个客户端,如果需要,可以与同一个频道建立多个连接。
2、名字空间(name_space)
在客户端与服务器通信中,为了让客户端方便的知道服务器的nd/pid/chid, 服务器进程可以注册一个路径名,与服务频道的nd, pid, chid关联起来。客户端就只要请求连接版务器路径名就可以了。

三、QNX同步信号下客户端服务器通信

1、客户端模型
1)调用name_open(PATH)连接到服务器频道获得一个连接ID
3)调用API发送消息等待服务器应答
4)收到应答完毕调用name_close()关闭连接

2、服务器模型
1)调用name_attach注册一个名字空间并且创建一个频道
2)接收并处理消息
3)应答消息处理结果
4)name_detach从名字空间删除该名称

3、客户端服务器消息传递过程
1)服务器注册一个名字空间等待客户端连接
2)客户端连接到名字空间
3)客户端调用MsgSend接口给服务器发送消息,客户端处于发送阻塞
4)服务器调用MsgReceive接口接收数据,客户端处于应答阻塞
5)服务器处理完毕消息,调用MsgReply函数发送应答消息
6)客户端从MsgSend函数返回,解除阻塞

4、利用多路消息传递提高效率
用iov_t来“汇集”数据。也就是说,可以一次传送几块据。Header同databuf是两块不相邻的内存,但传递到服务器端的ReceiveBuffer里,就是连续的了。
SETIOV(&iov[0], &header, sizeof(header));
SETIOV(&iov[1], databuf, datalen);
MsgSendvs(ConnectionId, iov, 2, Replybf, ReplyLen);

5、消息传递的方向与MsgDeliverEvent()
客户端给服务器发送消息,服务器不能立刻应答而客户端不想等待。遇到这种情况,正确的做法是,告诉客户端,请求一段时间后会得到处理,客户端得以继续运行,一旦服务器完成任务,服务器需要一些方式告诉客户端请求完成。

客户端: 准备一个“通知事件”(Notification Event),并把这个事件用MsgSend()发给服务器端,意思是:“如果xxx情况
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值