进程通信是指进程之间的信息交换。
在进程之间要传送大量数据时,应当利用OS提供的高级通信工具,该工具最主要的特点是:
- (1)使用方便。OS隐藏了实现进程通信的具体细节,向用户提供了一组用于实现高级通信的命令(原语),用户可方便地直接利用它实现进程之间的通信。
- (2)高效地传送大量数据。用户可直接利用高级通信命令(原语)高效地传送大量的数据。
一、进程通信的流程
高级通信机制可归纳为四大类:共享存储器系统、管道通信系统、消息传递系统以及客户机-服务器系统。
1.共享存储器系统
(1) 基于共享数据结构的通信方式。在这种通信方式中,要求诸进程公用某些数据结构,借以实现诸进程间的信息交换。如在生产者一消费者问题中,就是用有界缓冲区这种数据结构来实现通信的。这种通信方式是低效的,只适于传递相对少量的数据,属于低级通信。
(2) 基于共享存储区的通信方式。为了传输大量数据,在存储器中划出了一块共享存储区,诸进程可通过对共享存储区中数据的读或写来实现通信。这种通信方式属于高级通信。
进程利用共享内存储区进行通信时的步骤:
- 向操作系统申请共享存储区
- 挂接共享存储区到进程的存储空间
- 进程互斥读写存储区
- 通信结束后归还存储区
2.管道通信
“管道”,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件, 又名pipe文件。
为了协调双方的通信,管道机制必须提供以下三方面的协调能力:
- 互斥,
- 同步,
- 确定对方是否存在,只有确定了对方已存在时,才能进行通信。
消息传递系统 消息传递系统是当前应用最为广泛的一种进程间的通信机制。在该机制中,进程间的数据交换是以格式化的消息为单位的。
基于消息传递系统的通信方式属于高级通信方式,因其实现方式的不同,可进一步分成两类:
- (1)直接通信方式,是指发送进程利用OS所提供的发送原语,直接把消息发送给目标进程;
- (2)间接通信方式,是指发送和接收进程,都通过共享中间实体(称为邮箱)的方式进行消息的发送和接收,宗成进程间的通信。
3.客户机-服务器系统
1)套接字(Socket)
基于文件型、基于网络型
socket:一个套接字就是一个通信标识类型的数据结构,它包含了通信目的地地址,通信使用的端口号,通信网络的传输协议,进程所在的网络地址,以及针对客户或服务器程序提供不同系统调用等,是进程通信和网络通信的基本构件。
Socket的功能由系统调用体现主要有:创建socket()、指定本地地址bind()、建立socket连接connect()、愿意接收连接listen ()和接收连接accept()、发送数据send()、sendto() 、sendmsg()、write()、writev ()和接收数据read()、readv() 、recvfrom()、recvmsg()
2)远程过程调用和远程方法调用
存根:远程过程的一个不同版本,被存于库中
本地客户端:每个能够独立运行的远程过程都拥有一个客户存根。
服务器端:在每个远程进程所在的服务器端,其所对应的实际可执行进程也存在一个服务器存根与之对应。文章来源:https://www.toymoban.com/news/detail-419362.html
实际上,远程过程调用的主要步骤是:文章来源地址https://www.toymoban.com/news/detail-419362.html
- (1)本地过程调用者以一般方式调用远程过程在本地关联的客户存根,传递相应的参数,然后将控制权转移给客户存根;
- (2)客户存根执行,完成包括过程名和调用参数等信息的消息建立,将控制权转移给本地客户进程:
- (3)本地客户进程完成与服务器的消息传递,将消息发送到远程服务器进程;
- (4)远程服务器进程接收消息后转入执行,并根据其中的远程过程名找到对应的服务器存根,将消息转给该存根:
- (5)该服务器存根接到消息后,:由阻塞状态转入执行状态,拆开消息从中取出过程调用的参数,然后以一般方式调用服务器上关联的过程;
- (6)在服务器端的远程过程运行完毕后,将结果返回给与之关联的服务器存根;
- (7)该服务器存根获得控制权运行,将结果打包为消息,并将控制权转移给远程服务器进程;
- (8)远程服务器进程将消息发送回客户端;
- (9)本地客户进程接收到消息后,根据其中的过程名将消息存入关联的客户存根,再将控制权转移给客户存根:
- (10)客户存根从消息中取出结果,返回给本地调用者进程,并完成控制权的转移。这样,本地调用者再次获得控制权,并且得到了所需的数据,得以继续运行。
到了这里,关于操作系统(2.6)--进程通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!