1. 什么是进程通信?进程为什么需要通信?

  • 进程通信:进程通信就是进程之间的信息交换。

  • 进程通信的目的:

    •  数据传输:一个进程需要将它的数据发送给另一个进程。
    • 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
    • 资源共享:多个进程之间共享同样的资源。为了做到这一点,需要内核提供互斥和同步机制。
    • 进程控制:有些进程希望完全控制另一个进程的执行(如 Debug 进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

  1. OS一般包括哪些进程通信方式?

  • 共享存储器系统:

相互通信的进程共享某些数据结构或共享存储区。进程之间能够通过这些空间进行通信,需要使用互斥机制(P、V)。

  • 管道通信系统:

所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。输入进程向管道中以字符流的形式输入,输出进程以字符流的形式从管道取出。

管道机制必须提供三种协调能力:互斥、同步和确定对方的存在。其中的,同步:读进程要求读,但管道为空,则等待写进程写入数据。互斥:读写进程不能同时进行。

注意:从管道读数据是一次性操作,数据一旦被读取,就从管道中被抛弃,释放空间以便写更多的数据。管道只能采用半双工通信,即某一时刻只能单向传输。要实现父子进程双向互动通信,需要定义两个管道。

  • 消息传递系统:

  1. 直接通信方式:进程以格式化的消息(message)为单位,将通信的数据封装在消息中,利用OS提供的一组通信命令(原语),在进程之间直接进行消息传递。

  1. 间接通信方式(信箱通信):发送进程把消息发送到某个中间实体中,接收进程从中间实体(信箱)中取得消息。该通信方式广泛应用与计算机网络中。

  • 客户机—服务器系统:

主要应用于计算机网络中,主要的实现方法分为三种:套接字、远程过程调用和远程方法调用。

  1. 用自己的话解释“管道通信”原理?
  1. 管道:也是文件,可以用于有血缘关系的进程间的通信。
  2. 实现机制:

两个或多个进程之间想要通信由于他们各拥有自己的地址空间所以必须有一块公共的空间,而这块空间就需要内核为他们提供,也就是缓冲区。

管道有两端一端负责输入,一端负责输出,所以两端就分别连接两个进程。进程1负责将数据输入到缓冲区,进程2将缓冲区的数据拿出来,这样就实现了两个进程的通信。

管道被设计成为环形的数据结构,以便管道可以被循环利用。当管道中没有信息的话,从管道中读取的进程会等待,直到另一端的进程放入信息。当管道被放满信息的时候,尝试放入信息的进程会等待,直到另一端的进程取出信息。当两个进程都终结的时候,管道也自动消失。

  1. 用自己的话解释“内存共享通信”原理?

  1. 共享内存的通信原理示意图:

对于上图的理解:当两个进程通过页表将虚拟地址映射到物理地址时,在物理地址中有一块共同的内存区,即共享内存,这块内存可以被两个进程同时看到。这样当一个进程进行写操作,另一个进程读操作就可以实现进程间通信。但是,我们要确保一个进程在写的时候不能被读,因此我们使用信号量来实现同步与互斥。

  1. 用自己的话解释“消息缓冲通信”原理?

  1. 利用内存中公用消息缓冲区实现进程间的信息交换。

在这种通信机制中,首先需要在内存中开辟若干空闲消息缓冲区,用以存放要通信的消息。每当一个进程需要向另一个进程发送消息时,便向系统申请一个空闲消息缓冲区,并把已准备好的消息复制到该缓冲区,然后把该消息缓冲区插入到接收进程的消息队列中,最后通知接收进程。接收进程接收到发送进程发来的通知后,从本进程的消息队列中摘下一消息缓冲区,取出其中的信息,然后把消息缓冲区作为空闲消息缓冲区归还给系统。系统负责管理公用消息缓冲区以及消息的传递。

  1. 在Linux下实践云班课资源“Linux进程间通信三 消息队列以及实例(可实现简单聊天)”中实例1和实例2,并截图。

  1. 实例1:

  1. 运行结果1:

  1. 案例2:

  1. 运行结果2:

【操作系统】进程通信相关推荐

  1. 操作系统(十)进程通信

    2.1.4 进程通信 顾名思义,进程通信就是指进程之间的信息交换.进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立.同时为了保证安全,一个进程不能随意的访问另一进程的 ...

  2. 清华大学《操作系统》(二十):死锁和进程通信

    一.死锁 死锁:一组阻塞的进程(两个或多个),持有一种资源,等待获取另一个进程所占有的资源,而导致谁都无法执行. 可重复使用的资源: 在一个时间只能一个进程使用,且不能被删除. OS避免杀死拥有资源的 ...

  3. 操作系统学习笔记-2.1.4进程通信

    操作系统学习笔记-2019 王道考研 操作系统-2.1.4进程通信 文章目录 4进程通信 4.1知识总览 4.2前置知识:什么是进程通信? 4.3共享存储 4.4 管道通信 4.5消息传递 4.6小结 ...

  4. 操作系统——实验贰——进程通信(一)管道及共享内存

    一. 实验目的 熟悉并掌握管道机制,并实现进程间通信 熟悉并掌握共享内存机制,并实现进程间通信 二. 实验内容 任务一: (1)阅读以上父子进程利用管道进行通信的例子(例1),写出程序的运行结果并分析 ...

  5. 操作系统之进程管理:3、进程控制(进程状态转化的实现)、原语、进程通信(共享、管道、消息)

    3.进程控制 进程控制 思维导图 进程控制相关的原语 创建原语 撤销原语 阻塞原语.唤醒原语 切换原语 原语要做的几件事 进程通信 思维导图 进程通信方式 数据共享 管道通信 消息传递 进程控制 1. ...

  6. (王道408考研操作系统)第二章进程管理-第一节4:进程通信(配合Linux)

    文章目录 一:什么是进程通信 二:如何实现进程间通信及其分类 三:通信方式1-共享存储(共享内存) (1)课本基础内容 (2)补充-Linux中的进程通信 四:通信方式2-管道 (1)管道是什么 (2 ...

  7. 2020 操作系统 实验二 进程通信

    实验二.进程通信 一.实验名称 进程通信 二.实验目的 掌握用邮箱方式进行进程通信的方法,并通过设计实现简单邮箱理解进程通信中的同步问题以及解决该问题的方法. 三.实验原理 邮箱机制类似于日常使用的信 ...

  8. 【操作系统】第十一章死锁与进程通信

    以下是操作系统的各部分知识点的目录: 第一章:操作系统的概述 https://blog.csdn.net/weixin_44751294/article/details/104172847 第二章:启 ...

  9. 操作系统实验四——使用命名管道实现进程通信

    操作系统实验四--使用命名管道实现进程通信 一. 实验目的 (1)了解windows系统环境下的进程通讯机制. (2)熟悉Windows系统提供的进程通信API. 二. 实验准备 相关API函数介绍 ...

  10. 操作系统8-死锁和进程通信----(库函数scanf和printf是基于管道读写实现的!

    大纲: 死锁概念及死锁处理方法 银行家算法 死锁检测 进程通信方法:信号.管道.消息队列.共享内存 一.死锁 背景 可重用资源:资源不能被删除且任何时刻只能有一个进程使用,进程释放资源后其他进程可重用 ...

最新文章

  1. 目标检测中的特征冲突与不对齐问题
  2. 频谱中负频率的物理意义(二)
  3. MySQL时间增加、字符串拼接
  4. 2017年vb计算机考试,2017年计算机二级VB考试习题及答案
  5. 祝师傅新婚快乐 :-)
  6. ARM开发培训的总结报告
  7. Intellij IDEA——创建MyBatis的Mapper.xml模板
  8. MongoDB学习笔记(二)使用Java操作MongoDB
  9. java输入数据插入if_java编程,从键盘录入10个整数数据,将每次录入的数据按从小到大的顺序插入到数组中。...
  10. Java设计模式教程
  11. TensorFlow6-线性回归实战
  12. Extjs6(六)——增删查改之查询
  13. 432.全O(1)的数据结构
  14. Mac怎么看剩余空间,Mac怎么看硬盘空间
  15. 使用ftl生成word
  16. 2017网易校招:Fibonacci数列
  17. 什么是SLA?SLA服务水平深度解析
  18. 怎么看PLC梯形图?
  19. 学计算机英语的心得体会,英语学习心得体会
  20. jquery抓娃娃机代码

热门文章

  1. android sdk mac 环境变量,Mac 下的SDK环境变量配置
  2. 常用Java静态代码分析工具的分析与比较
  3. 2022年全球市场光学软件总体规模、主要企业、主要地区、产品和应用细分研究报告
  4. 推荐一个在Windows下可以查看文件夹大小的工具TreeSize Free
  5. 开发一个app多少钱啊?
  6. 使用JS代码将steam喜加一的免费游戏删除。
  7. 【win10专业版】3dmax卸载不干净如何解决
  8. 创建一个Vue项目(完整步骤)
  9. 手机浏览器设置为纯净百度主页 去除百度首页推送
  10. 数组和集合之间的转化