进程间的通信方式

进程通信的类型

共享存储器系统互斥访问共享空间
  1. 基于共享数据结构的通信方式
    要求进程公用某些数据结构,借以实现进程间的信息交换。操作系统只提供共享存储器,由程序员负责对公用数据结构的设置及对进程间同步的处理。仅适于传递相对少量的数据,通信效率低下,属于低级通信
  2. 基于共享存储区的通信方式
    在内存中画出一块共享存储区域,进程可通过对该共享区的读或写交换信息,实现通信,数据的形式和位置甚至访问控制都是由进程负责,而不是OS.这种通信方式属于高级通信。需要通信的进程先向系统申请获得共享存储区中的一个分区,并将其附加到自己的地址空间中,便可对其中的数据进行读、写,读写完成后,再将其返还给共享存储区。
管道通信系统只能单向传输,半双工通信

管道:用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。
管道机制必须提供下面三个协调能力:

  • 互斥:一个进程正在对pipe进行读/写操作时,其它进程必须等待。
  • 同步:当写进程将一定数量的数据写入pipe,便去睡眠等待,直到读进程取走数据后再唤醒。同样,当读进程读一个空的pipe时,也应该睡眠等待,直到写进程将数据写入pipe后才能将它唤醒
  • 确定对方是否存在,只有确定对方存在后才能进行通信。
消息传递系统高级通信方式

不借助任何共享存储区和数据结构,以格式化的消息为单位,将通信的数据封装在消息中。利用操作系统提供的通信命令,在进程间进行消息的传递,完成进程间的数据交换。

  1. 直接通信方式:发送进程利用OS提供的发送原语,直接将消息发送给目标进程
  2. 间接通信方式:发送和接受进程,都通过共享中间实体的方式进行消息的发送和接收,完成进程间的通信
实现方式
1. 直接通信原语
  • 对称寻址方式
send(receiver, message)
receive(sender, message)

发送进程和接收进程都要显示提供对方的标识符。不足之处在于:一旦改变进程的名称,可能需要检查所有其它进程的定义,有关对该进程的旧名称的所有引用都必须查找到,以便将其修改为新名称。

  • 非对称寻址方式
send(P, message)
receive(id, message)

在接收进程的原语中,不需要命名发送进程,只填写表示源进程的参数,即完成通信后的返回值,而发送进程仍需要命名接收进程

2.信箱通信(间接通信)

进程之间的通信需要通过某种中间实体来完成。该实体建立在随机存储器的公用缓冲区上,用来暂存发送进程发送给目标进程的消息。通常将中间实体称为邮箱,每个邮箱都有一个唯一的标识符,消息在邮箱中只允许核准的目标用户随时读取。所以,邮箱通信既可以实时通信,又可以非实时通信。
信箱的结构:

  1. 信箱头:存放标识符等描述信息
  2. 信箱体:存放消息
客户机——服务器系统
1.套接字
  • 基于文件型
    通信进程都运行在同一台机器环境中,套接字是基于本地文件系统支持的,一个套接字关联到一个特殊文件,通信双方通过对特殊文件的读写实现通信,原理类似于管道。
  • 基于网络型
    采用非对称方式通信,发送者需要提供接收者命名。通信双方的进程运行在不同主机的网络环境下,被分配了一堆套接字,一个属于接收进程(服务器端),一个属于发送进程(客户端)。
    过程如下:通信双方处于不同主机的网络环境下,被分配了一对套接字,一个属于接收进程(服务器端),另一个属于发送进程(客户端)。一般,发送进程发出连接请求时,随机申请一个套接字,主机为之分配一个端口,与该套接字绑定,不再分配其它进程。接收进程拥有全局公认的套接字和指定的端口(比如:ftp服务器监听端口时21,web或http服务器监听端口是80),并通过监听端口等待客户请求。因此,任何进程都可以向服务器进程发出连接请求和信息请求,以方便进程之间通信连接的建立。接收进程一旦收到请求,就接收来自发送进程的连接,完成连接,即在主机间传输的数据可以准确地发送到通信进程,实现进程间的通信。当通信结束时,系统通过关闭接收进程的套接字撤销连接。
  • 远程过程调用和远程方法调用
    远程过程(函数)调用RPC:是一个通信协议,该协议允许运行于一台主机系统上的进程调用另一台主机系统上的进程。负责处理远程过程调用的进程又两个,一个是本地客户进程,另一个是远程服务器进程,这两个进程通常被称为网络守护进程。一般情况下,这两个进程都是处于阻塞状态,等待消息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值