IPC(Inter-process communication)进程间通信,进程间通信包括同一设备上的不同进程和不同设备上的不同进程。不同设备上的不同进程通信就涉及到网络。
进程间通信有几种稳定、有效的的方式几乎被所有的操作系统采用:共享内存(Shared Memory)、管道(Pipe)、Unix Domain Socket和 RPC(Remote Procedure Calls 远程调用)。
(共享内存) 例子一:进程一与进程二通过“共享内存”通信
step1:进程一在内存中申请一块共享区域,申请的共享区域与某个特定key绑定。
step2:将共享区域映射到进程一的空间(这样才能进一步操作)。
step3:进程二调用api通入同一个key将共享区域映射到进程二。
step4:对共享区域读写进程信息交换。
step5:完成通信后,各个进程撤销之前的映射操作
step6:删除共享区域,回收内存。
(管道不做介绍)
(Unix Domain Socket) 我们因为学习TCP/IP协议才接触到Socket。Socket在网络通信领域广泛应用 被称为Network Socket;Socket在同一机器上的进程间通信也是完全能够胜任的,但是执行效率不理想。因此出现了Unix Domain Socket专门针对单机内的进程间通信。(Network Socket与UDS的区别:前者是以TCP/IP协议栈为基础的,需要分包、重组等一系列操作,而后者的实现机制上不是依赖这些协议的)
(RPC) RPC涉及到的通信双方通常运行于不同的机器中。RPC机制中开发人员不需关心中间传输过程怎样实现。一个完成的通信步骤:
1,客户端进程调用Stub接口。
2,Stub跟操作系统要求打包,并执行系统调用
3,由内核完成与服务端的具体交互。,
4,服务端Stub解包并调用与数据包匹配的进程。
5,进程执行操作
6,服务端逆向将数据返回给客户端。