操作系统学习笔记-7:进程通信

进程 A 无法直接访问进程 B 的地址空间,反之亦然,所以提供一块可以供 AB 访问的共享空间。这块共享空间属于互斥的临界资源。

1.1 基于数据结构

各个进程共用某些数据结构,借以实现进程间的信息交换。比如共用一个长度为 10 的数组。这种共享速度慢、限制多,属于低级通信方式。

1.2 基于存储区

在内存中划出一块共享存储区,各个进程通过对这个共享区的读写交换信息、实现通信。数据的形式、存放位置都由进程控制,而不是操作系统。相比之下,这种共享方式速度更快,属于高级通信方式。

2. 消息传递

进程通过操作系统提供的“发送消息/接受消息”两个原语进行数据交换,而数据交换的基本单位是一个格式化的消息,该消息包括消息头和消息体。消息头包括:发送进程 ID,接受进程 ID,消息类型,消息长度等格式化的信息。

2.1 直接通信方式

发送进程发送消息之前,首先申请一个缓冲区,之后把消息复制到缓冲区,再通过发送原语把缓冲区发送给接受进程,缓冲区首先到达接受进程的消息缓冲队列队尾。接受进程通过接受原语读取队列消息,并复制到本地变量。

2.2 间接通信方式

也叫做信箱通信。发送进程发送的消息首先到达一个消息容器,接受进程再从消息容器中接受消息。

3. 管道通信

管道又名 pipe 文件,其实就是在内存中开辟一个大小固定的缓冲区。它采用的是半双工通信,一个时间段内只能实现单向的传输。另外,管道也是互斥的临界资源。管道写满的时候,写进程会被阻塞,直到读进程把数据读走;而管道空的时候,读进程会被阻塞,直到写进程把数据读入。这里要注意,管道与我们之前说过的生产者、消费者使用的缓冲区不同。 写会一次性写完,读会一次性读完,不存在写一下、读一下的情况