1.什么是进程通信

进程通信是进程之间的信息交换。

进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立

为了保证安全,**一个进程不允许直接访问另一个进程的地址空间。**但是进程之间的信息交换又是必须实现的,为了保证进程间的安全通信,操作系统提供了一些方法。

进程通信包括:共享存储,消息传递和管道通信

2.共享存储

操作系统为进程通信开辟了了共享的地址空间,两个进程对共享空间的访问必须是互斥的(互斥访问通过操作系统提供的工具实现,如 P,V 操作)。

  • 基于数据结构的共享

    比如空间里只能放一个长度为 10 的数组,这种共享方式速度慢、限制多,是一种低级通信方式。

  • 基于存储区的共享

    在内存中画出一块共享存储区,数据的形式、存放位都由进程控制,而不是操作系统。相比之下,这种共享方式速度更快,是一种高级通信方式。

3.管道通信

管导通信基础

Lw8KTP.png

管道通信的原理

Lw8Jyj.png

4.消息传递

进程间的数据交换以格式化的消息为单位,进程通过操作系统的“发送消息/接收消息”两个原语进行数据交换。

  • 直接通信方式

    格式化的消息包括消息头消息体,消息头包括:发送进程 ID,接收进程 ID,消息类型,消息长度等格式化的信息(类似于计算机网络中的“报文”)。进程 1 创建一个消息发送给进程 2 的消息缓冲队列,进程 2 再从消息缓冲队列中读取消息。

    Lw8y6J.png

  • 间接通信方式

    与直接通信原理基本相同,只不过消息要先发送到中间实体(信箱)中,因此也称“心想通信方式”。进程 1 通过发送原语将消息发送到信箱中,进程 2 通过接收原语接收属于自己的消息。

    Lw8o1e.png

5.知识回顾

Lw8bnA.png