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. SpringMessaging命令执行漏洞 cve-2018-1270
  2. Oracle的启动机制
  3. 相机标定:PNP基于单应面解决多点透视问题
  4. 魔兽三国服务器维护,魔兽三国开服七天技巧
  5. 使用2to3.py 转换 python2.x 代码 到python3
  6. oracle+资料类型不一致吗,oracle数据库中,字段类型不一致,导致查询慢
  7. 数据结构实验之栈六:下一较大值(二)
  8. 阿里巴巴开源项目汇总-(JAVA)
  9. linux怎么编译python_linux 编译安装python3
  10. R语言使用RStudio将可视化结果保存为pdf文件(export--Save as PDF)
  11. 牛顿插值java_java实现牛顿插值法
  12. python 拼音库_改造Python中文拼音扩展库pypinyin补充自定义声母全过程
  13. 停车场车牌识别摄像机,传统提成行业颠覆者
  14. 笔记本安装系统不认硬盘?
  15. 圆形谷仓Circular Barn_Silver---(DP优化 / )队列 + 贪心(复杂度O(2n))---DD(XYX)​​​​​​​的博客
  16. HDU 2081:手机短号 (C语言)
  17. Java控制台banner_Spring boot 之自定义 Banner
  18. 票据背书以及票据背书的好处
  19. pandas数据分析和pyecharts可视化周杰伦MV弹幕(多图长文)
  20. java 小程序 多线程_《多线程练习—买票小程序——Java第十四周》

热门文章

  1. 详细vue脚手架安装教程
  2. 学习:对抗神经网络 - 恶意软件
  3. 智安网络丨漫画人工智能:人工智能简史
  4. netty实现 http 长连接
  5. 计算机算法应用状况,详解机器学习中的现状,算法,应用
  6. iOS开发实例 | Demo:数独小游戏
  7. 重新回归最初始的51单片机,跟我一起学单片机吧(内含单片机驱动、烧录软件、程序开发软件的安装和使用)
  8. 在web项目中使用Nginx搭建静态资源服务器,展示静态资源
  9. gitlab中创建项目组及项目
  10. 高手的思维与打法:灰度思维,黑白决策