进程通讯
- 进程通讯是指进程之间的信息交换
- 交换的信息量:一个状态或数值,上千个字节。
进程通讯的分类
1)低级通讯:进程的互斥和同步 2)高级通讯:安全
指用户可直接利用OS提供的一组通讯命令,高效地传送大量数据的一种通讯方式。对用户透明。
高级通讯分类
共享存储器系统
(1)共享数据结构的通讯方式服务器
进程之间经过某种数据结构,如缓冲池进行通讯属于低级通讯方式。网络
(2)共享存储区通讯方式数据结构
为了传送大量信息,在存储器中划出一块共享存储区,进程可经过对共享存储区进行读或写来实现通讯,属于高级通讯方式。计算机网络
消息传递系统
消息交换的单位是消息或报文,分两种:code
(1)直接通讯方式进程
(2)间接通讯方式ip
计算机网络中将消息称为报文。同步
直接通讯方式
- 发送进程直接把消息发送给目标进程
- 发送进程和接收进程都以显式方式分别提供对方的标识符
- 系统提供两条通讯原语
Send(Receiver,message);it
Receive(Sender,message);
例如:
Send(P2,m1);
Receive(P1,m1);
解决生产者——消费者问题
repeat ...
produce an item in nextp;
...
Send(consumer,nextp);
until false;
repeat
Receive(producer,nextp);
...
Consumer the item in nextc;
until false;
间接通讯方式
- 进程之间的通讯须要经过某种中间实体,该实体用来暂存发送进程发送给目标进程的消息;接收进程则从该实体中取出对方发送给本身的消息。
- 这种中间实体称为信箱
- 消息在信箱中能够安全的保存,只容许核准的目标用户随时读取,故可实现非实时通讯。
信箱的建立和撤销
- 进程用信箱建立原语来创建一个新信箱。建立者进程应给出信箱名字、信箱属性(公用、使用或共享);对于共享信箱,还应给出共享者的名字。
- 用信箱撤销原语来撤销
消息的发生于接收
- Send(mailbox,message),将一个消息发送到指定信箱
- Reveieve(mailbox,message),从指定信箱中接收一个消息
信箱分类
私用信箱
- 用户进程创建,做为该进程的一部分
- 拥有者有权读消息,其余用户只能发送
- 采用单向通讯链路
- 进程结束时信箱也消失
公用信箱
- 由OS建立
- 提供给系统中的全部核准进程使用
- 进程既发送也可取出
- 采用双向通讯链路的信息来实现
- 系统运行期间始终存在
共享信箱
- 由某进程建立,建立时提供共享进程(用户)的名字
- 信息的拥有者和共享者,都有权从信箱中取走发送给本身的消息
信息通讯时发送进程和接收进程的关系
- 一对一关系。创建一条专用的通讯链路
- 多对一关系。服务进程与多个用户进程之间进行交互,又称客户|服务器交互
- 一对多关系。一个发送进程与多个接收进程进行交互,使发送进程可用广播形式,向接收者发送消息。
- 多对多关系。创建一个公用信箱,多个进程投递并取走本身的消息
管道通讯
- 管道通讯方式创建在文件系统(文件系统位于外存)的基础上,利用共享文件来链接两个相互通讯的进程,此共享文件称为管道(Pipe)
- 管道是指用于链接一个读进程和一个写进程,以实现它们之间通讯的共享文件。
管道通讯必需的协调能力
(1)互斥。当一个进程正在对管道进行读/写操做时,另外一进程必须等待。
(2)同步。当写(输入)进程把必定量的数据(如4K)写入管道后,便去睡眠等待,直到读(输出)进程取走数据后再把他唤醒。当读进程发现管道空时,也应睡眠等待,直至写进程将消息写入管道后,才将它唤醒。
(3)判别对方是否存在,只有肯定了对方存在时方能进行通讯。