一、概述
1、进程通信
进程之间可以直接以较高的速率传输较多的数据和信息的信息交换方式
2、三种基本进程通信方式
(1)、消息传递系统
(2)、共享存储器系统
(3)、管道通信系统
二、消息传递
假如通信的进程之间不存在可直接访问的共享空间,必须利用操作系统提供的通信类系统调用来实现进程间通信
发送原语:send(接收者进程,发送区首地址)
接收原语:receive(发送者进程,接收区首地址)
发送原语和接收原语是系统提供给用户实现进程通信的最基本原语,也是构成具体通信系统的主要内容
1、一对一通信
发送消息的进程明确指定接收消息的进程,接收消息的进程也明白消息来自哪个进程
send(p,message):发送消息给进程p
receive(q,message):从进程q接收消息
将两个进程和起来就命名了一条信道pq,消息通过pq信道传递
(1)、缓冲区结构
TYPE MESSAGE_BUFFER=RECORD sender:INTEGER;//发送进程号 size:INTEGER;//消息长度 text:STRING;//消息正文 next:POINTER;//消息缓冲区链接指针 END;
(2)、发送原语
PROCEDURE send(p,m) VAR p:INTEGER; m:MESSAGE; BEGIN IF p<>receiver THEN return("接收进程不存在"); getbuf(i:MESSAGE_BUFFER);//申请缓冲区 copy(m,i); getpid(q);//获得本进程号,作为发送进程号 i.sender:=q; P(p.mutex);//消息莲是临界资源,需要互斥 insert(p.MEssageQueue,i);//把i插入到消息链尾 V(p.mutex); V(p.Sm);//消息链长进一,若有等待消息的进程则唤醒它 END;
(3)、接收原语
PROCEDURE receive(q,m) VAR q:INTEGER; m:MESSAGE; BEDIN getpid(p); P(p.Sm); P(p.mutex); remove(p.MessageQueue,i); V(p.mutex); IF q<>i.sender THEN return("一对一有违例"); copy(i,m); release(I:MESSAGE); END;
2、客户/服务器系统中的通信
用户要访问的数据可能存放在网络的某个服务器,目前大多数用户应用系统都是这种应用模式,常称为Client/Server模式,简称C/S模式
其常用的通信方式:
socket编程、远程过程调用
(1)、socket编程
socket 也称为套接字或插口
网络通信要用一对socket,每个进程一个。一个socket逻辑上有:网络地址、连接类型、网络规格
(2)、远程过程调用
思想:允许程序调用另外机器上的过程。当机器A的一个客户(或线程)调用机器B上的一个过程,A上的调用进程阻塞,被调用过程在B上 开始执行。调用者以参数的形式将信息传送给被调用者,被调用者将过程执行结果回送给调用者。
远程调用的消息有一定的结构,而不是简单的数据包
步骤:
①、客户过程以通常方式调用客户代理
②、客户代理构造一个消息,并且陷入内核
③、本地内核发送消息给远程内核
④、远程内核将消息送给服务器代理
⑤、服务器代理从信息包中取出参数,并调用服务器
⑥、服务器完成相应服务,并将结果送给服务器代理
⑦、服务器代理将结果打包形成消息,并且陷入内核
⑧、远程内核发送消息给客户机内核
⑨、客户机内核将消息传给客户代理
⑩、客户代理取出结果,并返回客户调用程序
(3)、信箱
信箱由信箱头和包括若干信格的信箱体组成。每个信箱必须有自己唯一的标识符。利用信箱,允许向不知名的进程发送消息。信息始终 安全地保存在信箱中,允许目标进程随时读取。信箱被广泛地用于多机系统和计算机网络中。信箱大多支持双向通行
为了支持信箱通信,操作系统通常提供创建、撤消、获取信箱名等管理命令,以及发送信件与接收信件的命令
存在的问题:
①、信件的格式、类型
②、信格的大小及其是否可变
③、信格数多少及其是否可变
④、信箱存放在操作系统空间还是用户进程空间及信箱的所有权
3、共享存储
把需要交换的信息发送到某一约定的存储区域,接收进程从该进程读取信息,实现2个及2个以上进程间的通信
(1)、共享存储区是目前系统进程通信中最高效的方式
(2)、该机制可以将内存中的一个区域连入多个进程的虚拟地址空间
(3)、UNIX,Windows 95,OS/2都采用这种方式
(4)、涉及共享存储区的系统调用通常有创建、附接、断接、状态查询
①、创建 shmget(key,size,flag)
②、附接 shmat(shmid,addr,flag)
③、断接 shmdt(viraddr)
④、状态查询 shmctl(shmid,cmd,buf)
(5)、共享存储区的好处在于为通信进程提供直接通信的手段,通信效率很高
4、管道通信
(1)、管道是一种信息流缓冲机构,它用于连接发送进程与接收进程,以实现他们之间的数据通信。管道不同于一般的数据缓冲,它以FIFO的方式组织数据的传输
(2)、在UNIX系统中,管道是以文件为基础的,利用共享文件进行通信(又被称为文件通信)
(3)、优点
交换信息量大、保存信息时间长
(4)、缺点
I/O操作次数较多,同步和控制机构也较为复杂
(5)、管道机制由管道文件创建、管道文件读写、读写操作时同步机构3部分程序组成
(6)、管道通常用于有共同祖先的进程间的信息交换