计算机操作系统——进程间通信(Interprocess Communication)

目录

类型

What?

Why?

IPC vs. Semaphores

     Semaphores

     高级通信工具

How——共享存储器系统(Shared-Memory System)

How——管道(Pipe)通信系统 

How——消息传递系统(Message Passing System)

How –客户机/服务器系统(Client-Server System)

实现方式

How——消息传递通信的实现方式

1、直接消息传递系统 

(1) 直接通信原语

(2)消息的格式

(3) 进程的同步方式

(4) 通信链路

2、信箱通信-间接通信

(1)信箱的结构

(2)信箱通信原语

(3)信箱的类型

实例

How –直接消息传递系统的实例

1、消息缓冲队列通信机制的数据结构

2、发送原语

3、接收原语


 

类型

What?

  • 独立进程:不与其他在系统内运行的进程共享数据。
  • 协同进程:受系统中其他运行进程的影响,或者影响其他运行进程。
  • 进程间的通信是指进程之间的信息交换。协同进程需要进程间通信机制,以便进行数据交换,即进程之间相互接受或者发送数据。

Why?

  • 信息共享。为应用程序提供并发访问数据的环境与机制。
  • 加速计算。将特定的计算任务划分为子任务,每个子任务可以并发进行。如果计算机系统又多核处理器,那么可以加快计算速度。
  • 模块化。如果我们构建一个模块化系统,可以将系统功能分割为不同功能的进程或线程。

IPC vs. Semaphores

     Semaphores

  • 效率低。传输的共享数据少。
  • 使用不方便。OS为进程之间的通信提供了共享存储器,而关于进程之间的通信所需要的共享数据结构的设置、数据的传输、进程的互斥与同步,都必须由程序员去实现。 

     高级通信工具

  • 使用方便,OS隐藏了实现通信的具体细节,向用户提供了一组用于实现高级通信的命令(原语),用户可以直接利用它实现进程间通信。
  • 高效传输大量数据。用户可以利用高级通信的命令(原语)传输大量数据。

How?

 

共享存储:shared memory

消息传递:message passing 

How——共享存储器系统(Shared-Memory System)

  • 通过系统中的共享数据结果或者共享存储区,实现信息通信。

(1)基于共享数据结构的通信方式。如Producer-Consum中的有缓冲界区。操作系统提供共享存储器,由程序员负责对公用数据结构的设置及对进程间同步的处理。

  • 适用于数据较少的通信,效率低下。属于低级通信。

(2)基于共享存储区的通信方式。为了传输大量数据,在内存中划出了一块共享存储区域,各进程可通过对该共享区的读或写交换信息。数据的形式和位置,甚至访问控制都是由进程负责,而不是OS。

进程向OS申请获得共享存储区中的一个区域,并将其附加到自己的地址空间中。其他进程如果要访问该区域,也要附加到自己的地址空间。属于高级通信。

How——管道(Pipe)通信系统 

管道:用于连接一个读进程和一个写进程,以实现他们之间通信的一个共享文件,又称为pipe文件。

发送进程/写进程向管道提供输入,以字符流的形式将大量的数据送入管道;接收进程/读进程从管道中读取数据。

首创与UNIX系统。能有效传输大量数据。

管道必须具备以下协调能力:

  • 互斥。当一个进程正在对pipe进行读/写操作时,其他进程必须等待。
  • 同步。当pipe中写入一定数量的数据时(如4KB),写进程应睡眠等待,直到读进程取走数据后再将其唤醒。反之亦然。
  • 确定对方是否存在。只有确定了对方已存在时才能进行通信。

How——消息传递系统(Message Passing System)

以格式化的消息为单位,将通信的数据封装在消息中,并利用操作系统提供的一组通信命令(原语),在进程间进行消息传递,完成数据交换。

多应用于分布式环境,即通信的进程位于网络中不同的计算机上。

(1)直接通信。直接使用OS提供的原语发送消息。

(2)间接通信。通过共享的中间实体(称为邮箱)进行消息的发送和接收。

How –客户机/服务器系统(Client-Server System)

网络环境下的主流通信机制
(1) 套接字 (socket)
  • 同一个台主机上多个应用程序之间的通信。解决多对程序同时通信时端口和物理线路的多路复用问题。
  • 通信标识类型的数据结构,包含了通信目的地址、通信端口号、通信网络的传输层协议、进程所在的网络地址,针对客户或服务器的不同系统调用(API)。
  • a. 基于文件型:同一机器,一个套接字关联到一个特殊的文件,通信双方通过对这个特殊的文件读写实现通信。其原理类似管道。
  • b. 基于网络型:非对称方式通信,即发送者需要提供接收者的命名(naming)。网络环境,一对套接字,一个是接收进程(服务端),一个是发送进程(客户端)。例如Web请求http
  (2)远程过程调用 RPC(remote procedure call)和远程方法调用
  • 通信协议,用于通过网络连接的系统。允许运行于一台主机/本地系统上的进程,调用另一台主机/远程系统上的进程,而对程序员表现为常规的过程调用,无需额外编程。在面向对象编程中又称为远程方法调用。
  • 本地客户进程和远程服务器进程,也称为网络守护进程(daemon)。通常这两个进程都是处于阻塞状态,等待消息。 
(2) RPC的主要步骤
  • RPC使用户调用远程过程时,像调用本地过程。
  • 存根stub。在每个能独立运行的远程过程都一个独立的存根(客户端和服务端)。客户存根(client stubborn)
  • 客户端调用远程过程时,RPC系统调用对应的stub,将它作为参数传递给远程过程。该stub定位服务器的端口并封装参数*stub使用消息传递机制,把消息发送给服务器。服务端的stub接收消息并调用服务器上的过程。如果又返回值,过程类似。
  • windows系统中,stub代码是由MIDL(Microsoft Interface Definition Language)编译的。

 

实现方式

How——消息传递通信的实现方式

1、直接消息传递系统 

1、直接消息传递系统:利用OS提供的发送命令,直接把消息发送给目标进程。

(1) 直接通信原语

a. 对称寻址:
  • send(receiver, message)  // 向接收进程发送消息
  • receive(sender, message) // 接收消息。sender为发送进程的名字
不足:一旦改变进程的名称,需要检查所有其他进程的定义,找到对该进程旧名称的所有引用,以便将其修改为新名称。不利于进程定义的模块化。
b. 非对称寻址方式:接收进程需要与多个发送进程通信,无法事先指定发送进程。
  • send(P, message)    // 向接收进程P发送消息
  • receive(id, message)  // 接收消息。id为发送进程的id或名字

(2)消息的格式

  • 定长消息格式
  • 变长消息格式

(3) 进程的同步方式

  • 发送进程阻塞,接收进程阻塞(两个进程间无缓冲)
  • 发送进程不阻塞,接收进程阻塞(常用)
  • 发送进程和接收进程均不阻塞(常用)

(4) 通信链路

  1. 通信前用显式的“建立连接”原语请求OS建立一条通信链路,使用完后拆除。多用于计算机网络通信。
  2. 利用OS的发送原语自动建立链路。多用于单片机系统
  • 单向通信链路。只允许发送,或者相反。
  • 双向通信链路。进程间相互发送。

2、信箱通信-间接通信

  • 进程间的通信通过某种中间实体(共享的数据结构等)来进行,中间实体建立在公用缓冲区上。该中间实体称为邮箱/信箱。
  • 每个邮箱有唯一的标识符。只允许核准的目标用户随时读取。

1)信箱的结构

        a. 信箱头。标识符、所有者、信箱口令、空格数等。
        b. 信箱体。有若干个可以存放消息的信箱格组成,信箱格的数目与每格的大小在创建信箱时确定。
        可以单向 /双向传输。

 

 

2)信箱通信原语

  1. a. 邮箱的创建和撤销。创建者进程应给出邮箱的名字、邮箱的属性(公用、私用、共享等);对于共享邮箱,还应给出共享者的名字。
  • 进程不再需要使用邮箱时,可用撤消原语,释放资源。
  1. b. 消息的发送和接收原语
  • send(mailbox, message)
  • receive(mailbox, message)

(3)信箱的类型

  • 操作系统创建,用户创建,创建者是信箱的拥有者。
  • a. 私用信箱。用户进程创建,可以读取。其他用户可以将消息发送到该信箱。创建进程消失时,该信箱消失。
  • b. 公用信箱。系统创建,提供给核准进程使用。进程可以发送/读取。系统运行期间始终存在。
  • c. 共享信箱。创建时指明是可以共享的,指出共享进程/用户的名字。创建者和共享者可以发送/读取自己的消息。
  • 四种关系:11;多对11对多;多对多。

实例

How –直接消息传递系统的实例

  消息缓冲队列通信机制,send/receive原语

1、消息缓冲队列通信机制的数据结构

(1)消息缓冲区

  

(2)PCB中有关通信的数据项
PCB 中增加消息队列队首指针,同步的互斥信号量 mutex 、资源信号量 sm。

 

 

2、发送原语

3、接收原语

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钢铁大侠.

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值