admin 管理员组文章数量: 887021
概述
进程通信是指进程之间的信息交换。
在进程同步之中,也需要进程间交换一些信息,所以也可以归入进程通信中,但只能称为低级的进程通信。因为进程同步间的消息交换效率低、对用户不透明。
在进程间要传送大量数据的时候,可以使用OS提供的高级通信工具,该工具的最主要特点是:使用方便、高效。
进程通信的类型
目前,高级通信机制可归结为四大类:共享存储器系统、管道通信系统、消息传递系统以及客户机-服务器系统。
一、共享存储器系统
在共享存储器系统中,相互通信的进程共享某些数据结构或共享存储区,进程间能够通过这些空间进行通信。因此也可以根据共享的内容划分成以下两种类型:
- 基于共享数据结构的通信方式:要求进程公用某些数据结构,借此实现进程间的信息交换,如生产者—消费者问题的有界缓冲区。操作系统仅提供共享存储器,由程序员负责对公用数据结构的设置及对进程间同步的处理。 这种通信方式仅适合传递相对较少的数据,通信效率低下,属于低级通信。
- 基于共享存储区的通信方式:为了加粗样式,在内存中划出了一块共享存储区域,各个进程可以通过对该共享区进行读写,实现通信,数据的形式和位置甚至访问控制都是由进程负责,而不是OS。当读写完成,不再需要的时候,将其归还给共享存储区。属于高级的通信方式。
二、管道(pipe)通信系统
管道:指用于连接一个读进程和一个写进程,以实现它们之间通信的一个共享文件,又名pipe文件。
向管道(共享文件)提供输入的发送过程(写进程)以字符流形式将大量的数据送入管道;而接受管道输入的接受进程(读进程)则从管道中接受数据。由于发送进程和接收进程是利用管道进行通信,故又称管道通信。
为了协调双方的通信,管道机制必须提供以下三方面的协调能力:互斥、同步、确定对方是否存在(确定存在才能通信)
三、消息传递系统
该机制,进程不必借助任何共享存储区或数据结构,而是以格式化的消息为单位,将通信的数据封装在消息中,并利用操作系统提供的一组通信命令(原语),在进程间进行消息传递,完成进程间的数据交换。该方式属于高级通信方式。
该方式隐藏了通信细节,使通信过程对用户透明化,降低通信程序的复杂性和错误率,称为当前应用最广泛的一类进程间的通信机制。例如:计算机网络中的格式化消息为报文。
其实现方式有两种:
(1)直接通信方式:指发送进程利用OS所提供的发送原语,直接把消息发送给目的进程。
- 直接通信原语:
1.1 对称寻址方式:要求发送进程和接收进程必须以显式方式提供对方的标识符。
send(receiver,message); 发送一个消息给接收进程
receive(sender,message); 接收Sender发来的消息
1.2 非对称寻址方式:某些情况,接收进程可能需要与多个发送进程通信,无法事先指定发送进程,因此这种方式接收进程原语不需要命名发送线程。
send(P,message); 发送一个消息给进程P
receive(id,message); 接收任何进程的消息 - 消息格式:定长、不定长
- 进程的同步方式:有三种,发送进程和接收进程都阻塞直到有消息;发送进程不阻塞,接收进程阻塞;发送进程和接收进程均不阻塞,仅当发生某事件使它无法继续运行时才阻塞等待。
- 通信链路:在发送进程和接收进程两者间建立一条通信链路。
(2)间接通信方式:指发送和接收进程,都通过共享中间实体(邮箱)的方式进行消息的发送和接收,完成进程间的通信。
- 信箱通信:通过某种中间实体来完成进程通信。在公用缓冲区上暂存发送进程发送的消息,接收进程可以从该中间实体取出消息,该中间实体称为邮箱。每个邮箱都有一个唯一标识符。消息在邮箱中可以安全的保存,只允许核准的目标用户随机读取。
邮箱的类型:
① 私用邮箱:用户进程自己创建,并作为进程的一部分,邮箱拥有者从邮箱中读取消息,其他用户只能发送消息到该邮箱,可采用单向链路的邮箱实现。
② 共享邮箱:由某进程创建,创建时指出共享进程的名字。邮箱拥有者和共享者都能够取走发送给自己的消息
③ 公用邮箱:由操作系统创建,并提供给系统中所有核准进程使用。可读可发送,应该采用双向通信链路的邮箱来实现。
四、客户机-服务器系统
该机制是网络环境的各种应用领域当前主流的通信实现机制,主要实现放肆有:套接字、远程过程调用和远程方法调用。
套接字
一个套接字就是一个通信标识类型的数据结构,包含了通信目的地址、通信使用的端口号、通信网络的传输层协议、进程所在的网络地址,以及针对客户或服务器程序提供的不同系统调用等,是进程通信和网络通信的基本构建。
套接字是为客户/服务器模型设计的,通常包括两类:
- 基于文件型:通信进程都运行在同一台机器的环境中,一个套接字关联到一个特殊的本地文件,通信双方通过对这个特殊文件的读写实现通信,原理类似管道。
- 基于网络型:该类型通常采用的是非对称方式通信,即发送者需要提供接受者命名。通信双方的进程运行在不同主机的网络环境下。
工作过程:一般地,发送进程(客户端)发出连接请求时,随机申请一个套接字,主机为之分配一个端口,与该套接字绑定,不再分配给其它进程。接收进程(服务端)拥有全局公认的套接字和指定的端口(如ftp服务器-21,http服务器80等),并通过监听端口等待客户请求。因此任何进程都可以向它发出连接请求和信息请求,以便进程之间通信连接的建立。
接收进程一旦收到请求,就接收来自发送进程的连接,完成连接,即在主机间传输的数据可以准确地发送到通信进程,实现进程间的通信;当通信结束时,系统通过关闭接收进程的套接字撤销连接
套接字的优势在于,不仅使用与一台计算机内部的进程通信,也适用于网络环境中不同计算机间的进程通信。并且每个套接字拥有唯一的套接字号,确保了通信双方之间逻辑链路的唯一性。
远程过程调用和远程方法调用
远程过程(函数)调用 RPC:是一个通信协议,用于通过网络连接的系统。该协议允许运行于一台主机(本地)系统上的进程,调用另一台主机(远程)系统上的进程(例如在公司,远程调用关闭家里的空调),而对程序员表现为常规的过程调用,无需额外地为此编程。如果涉及的软件采用面向对象编程,那么远程过程调用也可称作远程方法调用。
负责处理远程过程调用的进程有两个,一个是本地客户进程,另一个是远程服务器进程,这两个进程通常也被称为网络守护进程,主要负责在网络间的消息传递,一般情况下,这两个进程都是处于阻塞状态,等待消息。
为了实现RPC的透明性,即就像调用本地过程一样,RPC引入一个存根的概念:在本地客户端,每个能够独立运行的远程过程都拥有一个客户存根,本地进程调用远程过程实际是调用该过程关联的存根,即调用的时候将控制权转移给存根,让存根来执行。
本文为《计算机操作系统》第四版 学习笔记+个人总结
版权声明:本文标题:操作系统之进程通信:高级通信机制四大类 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1728416399h1240815.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论