之前面试官要我讲讲进程通信,由于当时没来得及复习操作系统有关知识,没答上来,痛定思痛,翻开操作系统书,好好复习
进程通信:
进程通信是指进程之间的信息交换
一、进程通信的类型
1.共享存储器系统
(1)基于共享数据结构的通信方式
这种通信方式要求各个进程直接公用某些数据结构。操作系统仅仅提供共享存储器,公用数据结构和进程间同步的问题都由程序员处理。这种方式仅仅适用于少量消息通信,通信效率低下,属于低级通信。
(2)基于共享存储区的通信方式
在内存中划出一块共享存储区域,诸进程可以对该共享区进行读或写。适用于传输大量数据。通信的进程向系统申请共享存储区的一个分区,用于通信,通信完毕,归还给共享存储区。
2.管道(pipe)通信系统
读进程和写进程之间使用共享文件(pipe文件)进行通信,发送进程向管道(共享文件)写入信息,接收进程从管道读取信息。
管道机制需要注意一下三个问题
(1) 互斥:一个进程在对管道进行读或写操作时,其他进程必须等待
(2) 同步:写进程写完数据后睡眠等待读进程来读取,读进程读完数据后睡眠等待写进程写数据。
(3) 确定对方存在:只有确认对方进程已存在才会进程通信
3.消息传递系统
这种通信方式将数据存放在消息中并利用操作系统提供的一组通信命令进行通信,如计算机网络中的消息称为报文(计算机网络中的计算机和计算机之间的通信实质上是进程和进程之间的通信)
(1) 直接通信方式
直接利用OS提供的发送原语,将数据从发送进程发送到接收进程
(2) 间接通信方式
共享中间实体(邮箱)进行通信
4.客户机-服务器系统
当前的网络环境中主流的通信方式,实现方式有一下三种
(1) 套接字(Socket):
一个通信标识类型的数据结构,包含了通信目的目的地址,通信使用的端口号,通信网络的传输层协议,进程所在的网络地址,API函数,进程通信和网络通信的基本构件。
(2) 远程过程调用
RPC协议(略,太多了,看书吧)
(3) 远程方法调用
RPC协议
二、进程通信的实现方式
1.直接消息传递系统
(1)对称寻址方式
发送方和接收方都指明对方进程的标识符,如:
发送方P1:Send(P2,m1),将消息m1发送给P2;
接收方P2:Receive(P1,m1),从P1接收消息m1;
(2)非对称寻址方式
发送方指明接收方进程的标识符,接收方无需指明,常用于打印系统中,打印进程接收来自任何一个进程的打印命令
发送方P1:Send(P2,m1),将消息m1发送给P2;
接收方P2:Receive(id,m1),从任何进程接收消息m1,id变量可设置为发送方进程id或名字;
2.信箱通信
信箱是一种数据结构,可分为信箱头和信箱体:
(1) 信箱头
存放有关信箱的描述信息,标识符,拥有者,信箱口令,空格数
(2) 信箱体
若干个可以存放消息或消息头的信箱格组成
信箱的类型:
(1) 私用邮箱
用户进程为自己建立一个邮箱,拥有者可以从中读取信息,其他进程只能写入信息,可使用单向通行链路实现
(2) 公用邮箱
由操作系统创建,核准进程可以把消息发送到该进程中,也可以从中读取发送给自己的消息
(3) 共享邮箱
由某进程创建,创建时或创建后指明它是共享的,同时必须指出共享进程的名字,拥有者和共享者可以从中读取发送给自己的消息