概述

进程通信是指进程之间的信息交换。

在进程同步之中,也需要进程间交换一些信息,所以也可以归入进程通信中,但只能称为低级的进程通信。因为进程同步间的消息交换效率低、对用户不透明。
在进程间要传送大量数据的时候,可以使用OS提供的高级通信工具,该工具的最主要特点是:使用方便、高效。

进程通信的类型

目前,高级通信机制可归结为四大类:共享存储器系统、管道通信系统、消息传递系统以及客户机-服务器系统。

一、共享存储器系统

在共享存储器系统中,相互通信的进程共享某些数据结构或共享存储区,进程间能够通过这些空间进行通信。因此也可以根据共享的内容划分成以下两种类型:

  1. 基于共享数据结构的通信方式:要求进程公用某些数据结构,借此实现进程间的信息交换,如生产者—消费者问题的有界缓冲区。操作系统仅提供共享存储器,由程序员负责对公用数据结构的设置及对进程间同步的处理。 这种通信方式仅适合传递相对较少的数据,通信效率低下,属于低级通信。
  2. 基于共享存储区的通信方式:为了加粗样式,在内存中划出了一块共享存储区域,各个进程可以通过对该共享区进行读写,实现通信,数据的形式和位置甚至访问控制都是由进程负责,而不是OS。当读写完成,不再需要的时候,将其归还给共享存储区。属于高级的通信方式。

二、管道(pipe)通信系统

管道:指用于连接一个读进程和一个写进程,以实现它们之间通信的一个共享文件,又名pipe文件。

向管道(共享文件)提供输入的发送过程(写进程)以字符流形式将大量的数据送入管道;而接受管道输入的接受进程(读进程)则从管道中接受数据。由于发送进程和接收进程是利用管道进行通信,故又称管道通信

为了协调双方的通信,管道机制必须提供以下三方面的协调能力:互斥、同步、确定对方是否存在(确定存在才能通信)

三、消息传递系统

该机制,进程不必借助任何共享存储区或数据结构,而是以格式化的消息为单位,将通信的数据封装在消息中,并利用操作系统提供的一组通信命令(原语),在进程间进行消息传递,完成进程间的数据交换。该方式属于高级通信方式。

该方式隐藏了通信细节,使通信过程对用户透明化,降低通信程序的复杂性和错误率,称为当前应用最广泛的一类进程间的通信机制。例如:计算机网络中的格式化消息为报文

其实现方式有两种:
(1)直接通信方式:指发送进程利用OS所提供的发送原语,直接把消息发送给目的进程。

  1. 直接通信原语:
    1.1 对称寻址方式:要求发送进程和接收进程必须以显式方式提供对方的标识符。
    send(receiver,message); 发送一个消息给接收进程
    receive(sender,message); 接收Sender发来的消息
    1.2 非对称寻址方式:某些情况,接收进程可能需要与多个发送进程通信,无法事先指定发送进程,因此这种方式接收进程原语不需要命名发送线程。
    send(P,message); 发送一个消息给进程P
    receive(id,message); 接收任何进程的消息
  2. 消息格式:定长、不定长
  3. 进程的同步方式:有三种,发送进程和接收进程都阻塞直到有消息;发送进程不阻塞,接收进程阻塞;发送进程和接收进程均不阻塞,仅当发生某事件使它无法继续运行时才阻塞等待。
  4. 通信链路:在发送进程和接收进程两者间建立一条通信链路。

(2)间接通信方式:指发送和接收进程,都通过共享中间实体(邮箱)的方式进行消息的发送和接收,完成进程间的通信。

  • 信箱通信:通过某种中间实体来完成进程通信。在公用缓冲区上暂存发送进程发送的消息,接收进程可以从该中间实体取出消息,该中间实体称为邮箱。每个邮箱都有一个唯一标识符。消息在邮箱中可以安全的保存,只允许核准的目标用户随机读取
    邮箱的类型:
    ① 私用邮箱:用户进程自己创建,并作为进程的一部分,邮箱拥有者从邮箱中读取消息,其他用户只能发送消息到该邮箱,可采用单向链路的邮箱实现。
    ② 共享邮箱:由某进程创建,创建时指出共享进程的名字。邮箱拥有者和共享者都能够取走发送给自己的消息
    ③ 公用邮箱:由操作系统创建,并提供给系统中所有核准进程使用。可读可发送,应该采用双向通信链路的邮箱来实现。

四、客户机-服务器系统

该机制是网络环境的各种应用领域当前主流的通信实现机制,主要实现放肆有:套接字、远程过程调用和远程方法调用。

套接字

一个套接字就是一个通信标识类型的数据结构,包含了通信目的地址、通信使用的端口号、通信网络的传输层协议、进程所在的网络地址,以及针对客户或服务器程序提供的不同系统调用等,是进程通信和网络通信的基本构建。

套接字是为客户/服务器模型设计的,通常包括两类:

  1. 基于文件型:通信进程都运行在同一台机器的环境中,一个套接字关联到一个特殊的本地文件,通信双方通过对这个特殊文件的读写实现通信,原理类似管道。
  2. 基于网络型:该类型通常采用的是非对称方式通信,即发送者需要提供接受者命名。通信双方的进程运行在不同主机的网络环境下。
    工作过程:一般地,发送进程(客户端)发出连接请求时,随机申请一个套接字,主机为之分配一个端口,与该套接字绑定,不再分配给其它进程。接收进程(服务端)拥有全局公认的套接字和指定的端口(如ftp服务器-21,http服务器80等),并通过监听端口等待客户请求。因此任何进程都可以向它发出连接请求和信息请求,以便进程之间通信连接的建立。
    接收进程一旦收到请求,就接收来自发送进程的连接,完成连接,即在主机间传输的数据可以准确地发送到通信进程,实现进程间的通信;当通信结束时,系统通过关闭接收进程的套接字撤销连接

套接字的优势在于,不仅使用与一台计算机内部的进程通信,也适用于网络环境中不同计算机间的进程通信。并且每个套接字拥有唯一的套接字号,确保了通信双方之间逻辑链路的唯一性。

远程过程调用和远程方法调用

远程过程(函数)调用 RPC:是一个通信协议,用于通过网络连接的系统。该协议允许运行于一台主机(本地)系统上的进程,调用另一台主机(远程)系统上的进程(例如在公司,远程调用关闭家里的空调),而对程序员表现为常规的过程调用,无需额外地为此编程。如果涉及的软件采用面向对象编程,那么远程过程调用也可称作远程方法调用。

负责处理远程过程调用的进程有两个,一个是本地客户进程,另一个是远程服务器进程,这两个进程通常也被称为网络守护进程,主要负责在网络间的消息传递,一般情况下,这两个进程都是处于阻塞状态,等待消息。

为了实现RPC的透明性,即就像调用本地过程一样,RPC引入一个存根的概念:在本地客户端,每个能够独立运行的远程过程都拥有一个客户存根,本地进程调用远程过程实际是调用该过程关联的存根,即调用的时候将控制权转移给存根,让存根来执行。


本文为《计算机操作系统》第四版 学习笔记+个人总结

操作系统之进程通信:高级通信机制四大类相关推荐

  1. 同一主机的多个子进程使用同一个套接字_在操作系统中进程是如何通信的

    这是我在毕业时校招阿里系公司时,终面的面试官问我印象最深的一道题,别问,问就是挂了.要是过了早就忘了 首先了解进程是什么 狭义定义就是,进程是一段程序进行的过程. 广义定义:进程是一个具有一定独立功能 ...

  2. 操作系统-为什么进程之间的通信必须借助操作系统内核功能?

    原因 每个进程有自己独立地地址空间.在操作系统和硬件的地址保护机制下,进程无法访问其他进程的地址空间,所以必须借助于操作系统的系统调用函数实现进程之间的通信. 进程通信的主要方式 (1)共享内存区.通 ...

  3. 【操作系统】进程间的通信——管道

    进程间的通信-管道 管道 进程间的通信(IPC-Inter-Process Communication)有多种方式,管道是其中最基本的方式. 管道是半双工的,即是单向的. 管道是FIFO(先进先出)的 ...

  4. 实验2linux进程控制与通信,实验2 进程控制与通信管理word文档良心出品

    <实验2 进程控制与通信管理word文档良心出品>由会员分享,可在线阅读,更多相关<实验2 进程控制与通信管理word文档良心出品(13页珍藏版)>请在人人文库网上搜索. 1. ...

  5. 【《现代操作系统 第4版》】4、进程间的通信之互斥

    买面包问题 假设有两个人A.B要采购面包,首先查看冰箱中是否有面包,如果没有则离开家去超市购买面包,买来后把面包放到冰箱. 假设A.B的日程如下图所示.显然这会导致面包超买,如何保证最多只有一个人去买 ...

  6. 操作系统——MFC实现进程创建和通信4

    引入 我接着上篇博客讲,如果没有构建项目的童鞋请移步到操作系统--MFC实现进程创建和通信1 用PostMessage实现通信请移步到操作系统--MFC实现进程创建和通信2 用CopyDATA消息实现 ...

  7. Android 进阶8:进程通信之 Binder 机制浅析

    读完本文你将了解: IBinder Binder Binder 通信机制 Binder 驱动 Service Manager Binder 机制跨进程通信流程 Binder 机制的优点 总结 Than ...

  8. Linux 进程及进程之间的通信机制——管道

    参考: LInux C编程从初学到精通 电子工业出版社 Linux 进程 Linux 进程简介 Linux是一个多用户多任务的操作系统,多用户是指多个用户可以在同一时间使用同一台计算机系统:多用户是指 ...

  9. Linux进程的创建和父子进程同步,操作系统实验报告_Linux进程创建与通信.doc

    操作系统实验报告_Linux进程创建与通信 2011-2012学年第一学期 专 业: 班 级: 学 号: 姓 名:提交日期:2011年11月实验二 Linux进程创建与进程通信 [实验目的 1. 熟悉 ...

  10. 操作系统课程设计二:linux进程的软中断通信

    linux进程的软中断通信 编写一段程序实现进程的软中断通信,要求: ①使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按ctrl+c键):当捕捉 ...

最新文章

  1. Linux运维人员-服务器组成硬件基础
  2. 搭建hbase1.2.5完全分布式集群
  3. Nature Plants:河南大学王学路团队揭示大豆与根瘤菌匹配性的进化及其分子机制...
  4. 是是非非本寻常,我们要不要跳槽
  5. Delphi 与 DirectX 之 DelphiX(95): TDIB.x
  6. 安装pipenv搭建虚拟环境做flask
  7. 文件解析漏洞总结-Nginx
  8. Windows11怎么关机重启?Windows11的关机键在哪?
  9. 漫步数学分析二——欧几里得空间
  10. 数据赋能变现时代,应用有哪些有效的变现方式?
  11. I2c-tools工具使用及调试
  12. Cadence用于版图设计时芯片logo的制作
  13. 三年级优秀书籍推荐_三年级好书推荐
  14. 高德sdk定位当前位置_高德api获取当前位置
  15. 使用AVSpeechSynthesizer添加文本转语音的功能
  16. Docker Windows Containers
  17. Idea 链接mysql数据库失败 Schemas中为空
  18. jpg格式图片怎么转换成pdf格式?如何把jpg图片转换成pdf格式文档?
  19. 解决Linux下无法利用shell脚本启动conda虚拟环境问题
  20. python二级证书含金量排名_计算机二级证书含金量有多高?你真的知道吗?

热门文章

  1. slk文件转wma_什么是WMA文件(以及如何打开一个文件)?
  2. 【GMSK】研究PCM/FM和GMSK的调制和解调方法
  3. MATLAB 绘制柱状图
  4. 串级控制系统的计算机控制原理图,串级PID控制原理
  5. 智能手机安全:黑客是如何秘密控制你手机号码
  6. understand 代码解析工具的使用
  7. 达梦单机数据库服务器磁盘空间占满问题
  8. socket服务器主动下发消息,socket服务器主动发送消息给客户端
  9. intel h61 linux驱动下载,intel h61主板驱动
  10. 光学efl_关于光学设计使用以及理解