Linux 进程间通信(一)概述

版权声明:转载请声明 https://blog.csdn.net/qq_40732350/article/details/82081874

         希望读者已经知道了进程是一个程序的一次执行, 是系统资源分配的最小单元。 这里所说的进程一般是指运行在用户态的进程, 而由于处于用户态的不同进程间是彼此隔离的, 就像处于不同城市的人们, 他们必须通过某种方式来进行通信, 例如人们现在广泛使用的手机等方式。 下面将讲述如何建立这些不同的通信方式, 就像人们有多种通信方式一样。


        Linux 下的进程通信手段基本上是从 UNIX 平台上的进程通信手段继承而来的。 而对UNIX 发展做出重大贡献的两大主力 AT&T 的贝尔实验室及 BSD(加州大学伯克利分校的伯克利软件发布中心) 在进程间的通信方面的侧重点有所不同。

前者是对 UNIX 早期的进程间通信手段进行了系统的改进和扩充, 形成了“System V IPC”, 其通信进程主要局限在单个计算机内;

后者则跳过了该限制, 形成了基于套接口(Socket) 的进程间通信机制。

而Linux 则把两者的优势都继承下来, 如图 所示。

UNIX 进程间通信(IPC)         包括管道、 FIFO 及信号。
System V 进程间通信(IPC) 包括 System V 消息队列、 System V 信号量及 SystemV 共享内存区。
Posix 进程间通信(IPC)        包括 Posix 消息队列、 Posix 信号量及 Posix 共享内存区。
现在在 Linux 中使用较多的进程间通信方式主要有以下几种。‘


1.管道(Pipe) 及有名管道(Named Pipe):

无名管道可用于具有亲缘关系进程间的通信。
有名管道除具有管道所具有的功能外, 还允许无亲缘关系进程间的通信。


 2.信号(Signal):

信号是在软件层次上对中断机制的一种模拟, 它是比较复杂的通信方式, 用于通知进程有某事件发生, 一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一样的。


3.消息队列(Messge Queue):

消息队列是消息的链接表,包括 Posix消息队列和 SystemV 消息队列。 它克服了前两种通信方式中信息量有限的缺点, 具有写权限的进程可以按照一定的规则向消息队列中添加新消息; 对消息队列有读权限的进程则可以从消息队列中读取消息。


 4.共享内存(Shared Memory):

可以说这是最有效的进程间通信方式。 它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。 这种通信方式需要依靠某种同步机制, 如互斥锁和信号量等。适用于传输大量信息。


 5.信号量(Semaphore):

实质就是个计数器(其实就是一个可以用来计数的变量,可以理解为int a),通过计数值来提供互斥和同步。

6.套接字(Socket):

这是一种更为一般的进程间通信机制, 它可用于网络中不同机器之间的进程间通信, 应用非常广泛。

 


 

猜你喜欢

转载自blog.csdn.net/qq_40732350/article/details/82081874
今日推荐