漫谈QNX(3)–进程间通信IPC

汽车安全 3年前 (2021) admin
914 0 0

漫谈QNX(3)--进程间通信IPC

在开始阅读之前,如果你对已介绍的内容还不了解的话,可以先阅读以下文章快速熟悉一下~,最后也感谢知乎@ 强大的宇宙的分享。

5分钟,带你了解汽车操作系统

漫谈QNX(1)–架构

漫谈QNX(2)–进程,线程,同步

漫谈QNX(3)--进程间通信IPC

既然有了进程process,那么不同进程间通信就很有必要了。两个进程之间要交换数据,控制,以及事件通知。

漫谈QNX(3)--进程间通信IPC

Message passing —比较传统的IPC方式是基于主从式构架(client-server),并且是双向通信。

漫谈QNX(3)--进程间通信IPC

再仔细来看的话,就是每一个process里面都有一个thread来负责通信。当一个线程在等待回信的时候,就会傻傻的等待,什么都不做了。直到收到回复信息。

漫谈QNX(3)--进程间通信IPC
傻等

Servers收到信息在通道上,Clients通过connection连接上channel,来发送信息。

漫谈QNX(3)--进程间通信IPC

一个进程可以有多个connections连接到另一个进程的channel上,是个多对一的关系。

漫谈QNX(3)--进程间通信IPC
多connections和多channels

Server创建Channel:

chid = ChannelCreate (flags);


Client连接上Server的channel:

coid = ConnectAttach(nd, pid, chid, _NTO_SIDE_CHANNEL, flags);


信息的发送:

status = MsgSend (coid, smsg, sbytes, rmsg, rbytes);


信息的接收:

rcvid = MsgReceive (chid, rmsg, rbytes, info);


接下来来点干货,看一个demo代码:

漫谈QNX(3)--进程间通信IPC
漫谈QNX(3)--进程间通信IPC

Massage之间的通信数据总是通过拷贝,而不是指针的传递。

那么如何设计消息传递策略呢?一个例子看一下:

漫谈QNX(3)--进程间通信IPC


Pulses脉冲

漫谈QNX(3)--进程间通信IPC

脉冲的通信方式很特别,就像喊命令,不需要回应,执行就好了。便宜还快速,也不会发生blocking的现象。

漫谈QNX(3)--进程间通信IPC
Pulse命令

一个例子:

漫谈QNX(3)--进程间通信IPC

Event Delivery

Event是一种notification。可是从thread到thread,也可以从kernel到thread。比如硬件打断kernel的通知,或者timer到期的通知。

漫谈QNX(3)--进程间通信IPC


Shared Memory

如果通过设置shared memory, 同样的物理内存可以被多个进程访问。

漫谈QNX(3)--进程间通信IPC
After setting up a shared memory region, the samephysical memory is accessible to multipleprocesses:

preocess进程间通过shared memory通信同步策略:

漫谈QNX(3)--进程间通信IPC
IPC for synchronization

IPC for synchronization

Client先准备好共享内存的内容,然后告诉Server一切准备好了。接着Server读取共享内存内容,并做处理。最后Server回复Client说搞定了。这样Client就可以继续准备下一个任务了。

IPC想想也是很重要的,如果你设计的系统功能需要几个process的相互协作,你就绕不开IPC这个概念,下次准备有机会在一个实际的例子里看看IPC到底有什么用,怎么用。

漫谈QNX(3)--进程间通信IPC

原文始发于微信公众号(Vehicle攻城狮):漫谈QNX(3)–进程间通信IPC

版权声明:admin 发表于 2021年11月19日 上午12:00。
转载请注明:漫谈QNX(3)–进程间通信IPC | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...