第二章 进程通信

第二章 进程通信

By齐浩坤

第二章 进程通信By齐浩坤

1同一节点上的进程间通信

一、无名管道PIPE

二、命名管道FIFO

三、消息队列Message queue

四、共享内存shared memory

2不同节点上进程间通信

一、报文传递原语

二、远程过程调用

三、组通信(原子性 要么全被接受 要么丢弃)

在分布式计算系统中,"同一物理节点上的进程"指的是运行在同一个计算机硬件上的不同程序实例。每个物理节点通常是指一台独立的计算机,这可以是个人电脑、服务器或者任何能执行计算任务的设备。

同一物理节点上不同进程之间的通信:进程间通信IPC实现。管道、消息队列、共享内存、信号、命名管道、信号灯、内存映象

不同物理节点上的进程通信:规定通信协议,经过物理层、数据链路层、网络层、传输层 进行通信。

1同一节点上的进程间通信

一、无名管道PIPE

无名管道只能在有亲缘关系的进程之间使用(父子进程和兄弟进程),并且与创建无名管道的进程一起存在

二、命名管道FIFO

命名管道拥有文件访问权限,可以在彼此无关的进程之间使用

三、消息队列Message queue

队列中的消息能够以随意的顺序进行检索,因为可以通过消息的类型把消息从队列中检索出来

四、共享内存shared memory

使用共享内存技术,不同进程可以同时访问相同的内存区域。能够通过共享它们地址空间的若干部分,然后对存储在共享内存中的数据进行读和写,从而实现彼此直接通信。

  • 一个进程调用shmget创建一个共享内存区或返回一个已存在的共享内存其

  • 进程调用shmat将一个共享内存区附加到进程的虚拟地址空间上

  • 使用完毕后进程调用shmdt从进程的虚拟地址空间分离一个共享内存区

  • 进程利用shmctl对共享内存段的相关参数进行操作

  • 所有操作完成后,由创建进程负责删除

2不同节点上进程间通信

第三条也就是“原子性”。不同节点上的进程通信必须要使用中间件协议,因为分布式系统中的节点可能运行在不同的硬件和操作系统上,中间件提供了一个统一的通信层,使得这些不同的系统能够无缝交互。

通信原语用于分布式进程间的通信和同步,通信原语是分布式操作系统内核与服务层之间的接口。在松散耦合分布计算系统中,实现进程通信的方法是 报文传递和远程过程调用PRC

一、报文传递原语

报文传递允许一个进程将共享数据拷贝到另一个进程的地址空间中,从而实现进程通信,它是通过一个进程向另一个进程发送一个包含共享数据的报文来完成的。(适用于两个不同的计算机或者处于一个系统中但不共享内存)

并行并行指的是把数据或者操作分割成若干个子任务分别在不同的计算机节点上完成

同步同步是确保系统中的不同部分(进程、线程、节点)在时间上协调一致的过程(通信延迟、始终偏差都会影响同步,当并发读写共享数据的时候,需要同步机制避免数据冲突和不一致。同步机制包括锁、时间戳、一致性协议)

通信原语为:send(b.msg)和receive(a.msg)

报文传递的通信原语可以通过阻塞原语和非阻塞原语来实现:

1、阻塞原语(同步原语):报文传递操作(发送或接受)完成之前,执行该操作的进程会被挂起,不继续执行后面的代码

  • 阻塞发送:send一直被阻塞直到发送的信息到达被接受并受到接收方应答

  • 阻塞接受:receive一直被阻塞直到要接受的信息到达并被接收

2、非阻塞原语(并行原语):允许进程在发送或接受操作完成之前继续执行任务,也就是控制权回到了进程本身,不在缓冲区内核。通常与轮询(polling)或中断机制结合使用,以检查信息是否到达

通常分布计算系统中会存在缓冲区,用来存放信息。

二、远程过程调用

远程过程调用(PRC)允许一个进程使用一个简单的过程调用 ,通过网络与一个远程的进程通信,不仅能传递报文,还能传送调用参数和返回结果(数据结构也行)。PRC后被阻塞后等待返回值。所以PRC提供同步。

1、有以下三种参数传递类型:

  • 输入参数,这种参数只用于顾客向服务员传递信息

  • 输出参数,服务员向顾客传递信息

  • 既输入又输出的参数:顾客和服务员可以双向传递

2、数据类型的支持:可以复杂的数据结构

3、参数打包:为了进行有效的通信,参数和较大的数据结构需要进行打包。就是将信息平面化并进行压缩,打包和拆包由代理程序Stub完成

4、PRC顾客和服务员的结合:在使用RPC之前,服务员必须先向端口管理员申请通信端口注册,然后进行监听。顾客通过访问端口管理员得到访问服务员的句柄,这个句柄用于指引和底层的socket结合。整个过程对程序员来说是透明的,也就是PRC的目的 透明性

这里的soocket就是网络通信的底层实现,是计算机网络中的理论,分布式计算系统中不需要关心。

5、PRC的认证:在分布计算系统中,顾客可能需要对服务员的身份进行认证,或者服务员希望对顾客的身份进行认证。

6、PRC语义:调用语义确定了同一个调用的多次重复请求所造成的后果。由于网络延迟,调用的请求或者结果都可能丢失。导致进程重复发送请求对系统造成损坏

  • 恰好一次语义

  • 最多一次语义

  • 至少一次语义

  • 多次中最后一次语义

  • 幂等语义

服务员分为有状态服务员和无状态服务员:

  • 有状态服务员:意味着它在处理客户端请求时会保留关于客户端的状态信息。这就像是一位服务员记住了顾客的喜好

  • 无状态服务员:无状态服务器则不保留任何关于客户端的状态信息。这就像是服务员不记得顾客的任何信息

7、报文传递实例:socket进程通信

8、RPC实例 SUN PRC

  • 编写RPC说明文件

  • 编写顾客程序,该程序调用远程过程

  • 编写服务员程序,该程序主程序由rpcgen自动生成 只需要编写服务过程程序

  • 编译:rpcgen编译说明文件 cc编译顾客程序和服务员程序

  • 不同机器调用

9、RPC实例 DEC PRC

DEC是一个由os开发的中间件系统 作为一个抽象层在网络操作系统和分布式应用程序之间 实现透明性

三、组通信(原子性 要么全被接受 要么丢弃)

有时候通信不仅仅存在于两个进程之间,而是涉及两个以上的多个进程。组通信就是指一个报文能够被发送到多个接收者的通信。

  • 捎带顺序语义:这种语义保证了如果报文捎带了标识这些报文之间关联的一些信息,那么报文就能够以一种正确的顺序接收

  • 一致顺序语义 :所有接收者按完全相同的顺序接受报文,但是,一组报文的发送顺序和被接收的顺序可能是不同的(组重叠)。

  • 全局顺序语义:这种语义要求所有的接收者严格地按照报文的发送顺序接收。这就需要一个全局时钟,也就是说不同系统中进程的时钟是必需经过同步或使用全局时间戳 。

封闭组(closed group)和开放组(open group)。进程组是封闭的,是指只有这个组的成员才允许向这个组发送报文,组外的进程不能向整个组发送报文,但是可以向组内的某个成员发送报文。进程组是开放的,是指系统中的所有进程都允许向这个组发送报文。

对等组(peer group)和分级组(hierarchical group)。所谓对等组是指组内的所有进程是平等的,没有一个进程处于主导地位,任何决定都是所有进程集体作出的。在分级进程组中,组中进程存在着级别,例如一个进程为协调者(coordinator),其它进程为工作者(worker)。

组寻址(group addressing)。每个进程组必须有一个地址,正如一个进程必须有一个地址一样。组寻址的实现方法分为三类:由系统内核实现的方法(组播、广播、单播)、由发送进程实现的方法(根据发送进程维持的目的地址表)和预测寻址的实现方法(报文中的预测表达式,就是一个布尔表达式,计算为真则保留,假则丢弃或上述其他办法)。

1、ISIS中的组通信

  • 同步系统:任何一个事件按照严格的顺序发生,对于每个事件所需的完成时间本质上来说可以假定为0,发送的报文立即到达接收进程。不可实现

  • 松弛同步系统:一个事件会花费一定的时间,但所有的事件对所有的参加者来说表现出同样的顺序。ABCAST\GBCAST 组成员发送信息

  • 虚同步系统:如果两个报文是因果相关的,那么所有的进程必须按同样的顺序接收这两个报文。如果两个报文是并发的,那么不同的进程可以按不同的顺序接收这两个报文。 CBCAST

时间戳确保了即使报文可能因为网络延迟而不是同时到达每个进程,每个进程都能按照相同的顺序来处理这些报文。当一个进程接收到多个报文时,它将根据报文的时间戳来排序,确保最早的报文先被处理,然后是下一个时间戳的报文,依此类推。一致的全局顺序:所有的进程都将采用这种基于时间戳的排序机制来处理报文,这样无论它们是如何收到报文的,所有进程最终处理报文的顺序都将是一致的。使用ABCAST协议的两阶段提交过程保证了分布式系统中的一致性和顺序,从而解决了分布式系统中的一致性问题。这是在需要严格顺序一致性的系统中保持全局状态同步的关键机制。这种机制在诸如分布式数据库的事务处理、复制状态机以及其他需要跨多个节点维护一致状态的系统中至关重要。

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值