加入收藏 | 设为首页 | 会员中心 | 我要投稿 好传媒网 (https://www.haochuanmei.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

进程间的通信方式:简介

发布时间:2022-10-30 14:01:05 所属栏目:Unix 来源:未知
导读: 1.概述
IPC就是进程间通信(interprocess communication)的简称。传统上该术语描述的是运行在某个操作系统之上的不同进程间的消息传递(message passing)的方式。
为什么需要进程间通信呢

1.概述

IPC就是进程间通信(interprocess communication)的简称。传统上该术语描述的是运行在某个操作系统之上的不同进程间的消息传递(message passing)的方式。

为什么需要进程间通信呢?因为有些复杂程序或者是系统需要多个进程或者线程共同完成某个具体的任务,那么也就需要进程之间通信和数据访问。整个系统以进程粒度运行可以进一步提高系统整体并行性能和内存访问安全,每个进程可以有各自的分工。所以多个进程共同完成一个大的系统是比单个进程多线程要有很大的优势。

在Unix操作系统过去30年的演变史中,消息传递经历了如下几个发展阶段。

2.进程、线程与信息共享

按照传统的Unix编程模型,我们在一个系统上运行多个进程,每个进程都有各自的地址空间。Unix进程间的信息共享可以有多种方式。如下图总结所示:

unix丢进程_进程与进程之间的通信_unix进程通信

(1)左边的两个进程共享存留与文件系统中某个文件的信息。为访问这些信息,每个进程都得穿过内核(例如read、write、lseek)。当一个文件有待更新的时候,某种形式的同步是有必须要的,这样可以防止多个进程或者线程并发的写入,防止相互串扰,也可以保护一个或者读个读出者。如果Posix、消息队列、信号量和共享内存区域是使用映射文件实现的(不是必须条件),那么他们就是这种共享存留与文件系统的某个信息。

(2)中间两个进程共享驻留于内核中的某些信息。管道是这种共享类型的例子,SystemV 消息队列和System V信号量也是。现在访问共享信息的每次操作涉及对内核的一次系统调用。

(3)右边的两个进程有一个双方都能访问的共享内存区域。每个进程一旦设置好该共享内存区域,就能够根本不干涉及内核而访问其中的数据。共享内存区域的进程需要某种形式进行同步。

线程:

从IPC角度来看,一个给定的进程内所有的线程共享相同的全局变量(也就是说共享内存的概念对这种模型来说是内在的)。然而我们必须关注的是各个线程间对全局数据的同步访问。同步访问尽管不是一种明确的IPC的形式,但它确实伴随许多形式的IPC使用,以控制对某些共享数据的访问。

3.IPC对象的持续性

我们可以把任意类型的IPC持续性(persistence)定义成该类型的一个对象一直存在多长时间。下图展示了三种类型的持续性:

进程与进程之间的通信_unix丢进程_unix进程通信

(1)随进程持续的(process-persistent)IPC对象一直存在到打开着该对象的最后一个进程关闭该对象为止。例如管道和FIFO就是这种对象。

(2)随内核持续的(kernel-persistent)IPC对象一直存在到内核重新自举或显示删除该对象为止。例如System V的消息队列、信号量和共享内存去就是此类型对象。Posix消息队列、信号量和共享内存去必须至少是随内核持续的,但是也可以随文件系统持续的,具体取决于实现。

(3)随文件系统持续的(filesystem-persistent)IPC独显一直存在到显示删除该对象为止。即使内核重新自举了,该对象还是保持其值。Posix消息队列、信号量和共享内存区域如果是使用映射文件实现的(不是必需条件),那么它们就是随文件系统持续的。

在定义一个IPC对象 的持续性时我们必须要小心,因为他们并不是像看起来的那样。例如管道内的数据是在内核中维护的,但管道具备的随进程的持续性而不是随内核的持续性;最后一个将某个管道打开着用于读的进程关闭管道后,内核将所有的数据并删除该管道。类似的,尽管FIFO在文件系统中有名字,他们也只是具备随进程的特性,因为最后一个将某个FIOF打开的进程关闭FIOFunix进程通信,FIOF中的数据都将丢失。

进程与进程之间的通信_unix进程通信_unix丢进程

4.名字空间

当某个或者多个无亲缘关系的进程使用某种类型的IPC对象来彼此交换信息时,该IPC对象必须有一个某种形式的名字(name)或标识符(identifier),这样其中一个进程(往往是服务器)可以创建IPC对象,其余进程则可以指定同一个IPC对象。

管道没有名字(因此不能用于无亲缘关系的进程间),但是FIFO有一个在文件系统中的Unix路径名字作为其标识符(因此可用于无亲缘关系的进程间)。对于一个给定的iPC类型,其可能的名字的集合称为它的名字空间(name space)。名字空间非常重要,因为对于除管道以外的所有形式来说,名字是客户与服务器彼此连接以交换信息的手段。

(编辑:好传媒网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!