1、知识总览

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

进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立;

为了保证安全,一个进程不能直接访问另一个进程的地址空间;

但是进程之间的信息交互又是必须实现的,为了保证进程间的安全通信,操作系统提供了一些方法;比如说手机自带的图片浏览软件,我们想把某些图片分享给微信朋友,可以直接用分享功能将其分享到微信中,从图片软件进程到微信这两个进程之间肯定是有信息交换的,因此这种信息交换是必须要实现的;

为了保证信息交换的安全性,操作系统会提供一些方法供各个进程使用;操作系统提供的进程通信包括共享存储、消息传递、管道通信;

2、共享存储

两个进程不能直接访问对方的地址空间,操作系统会对两个进程分配一个共享空间,两个进程之间的通信可以通过共现空间来完成;

需要注意的是,两个进程对共享空间的访问必须是互斥的(互斥访问通过操作系统提供的工具实现);

操作系统只负责提供共享空间和同步互斥工具(如P、V操作);

共享存储分为两种,第一种是基于数据结构的共享,第二种是基于存储区的共享;

2.1 基于数据结构的共享

基于数据结构的共享:比如共享空间里只能放一个长度为10的数组。这种共享方式速度慢、限制多,是一种低级的通信方式;

2.2 基于存储区的共享

基于存储区的共享:在内存中画出一块共享存储区,数据的形式、存放位置都由进程控制,而不是操作系统。相比之下,这种共享方式更快,是一种高级通信方式;

3、消息传递

进程间的数据交换以格式化的消息(Message)为单位。进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换;

一个消息由消息头和消息体组成,消息头包括:发送进程ID、接收进程IO、消息类型、消息长度等格式化的消息(计算机网络中发送的“报文”其实就是一种格式化的消息);

消息传递分为直接通信方式和间接通信方式;

3.1 直接通信方式

直接通信方式就是把消息直接挂到接收进程的消息缓冲队列上;

每一个进程有一个消息缓冲队列,当A进程想给B进程发送消息时,A进程首先会创建一个格式化的消息,这个消息会通过发送原语发送给目标进程B,这个消息就会挂到目标进程B的消息缓冲队列上。

进程B会通过接收原语依次把消息缓冲队列中的消息取走,这就是直接通信方式;

3.2 间接通信方式

间接通信方式中,消息要先发送到中间实体(信箱)中,因此也称作“信箱通信方式”。

系统会为各个通信的进程管理一个信箱,这个信箱中会有各种各样的消息,并且这些消息可能是不同进程之间通信的一些消息。具体由哪个进程发送,哪个进程接收是由消息头包含的消息决定;

如果进程A想要给进程B发送消息,进程A会用发送原语将信息发送到中间信箱,进程B会使用接收原语从信箱中取走属于自己的消息;

4、管道通信

“管道”是指用于连接读写进程的一个共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的缓冲区;

  • 管道只能实现半双工通信,某一时间段内只能实现单向的传递。如果要实现双向同时通信,则需要设置两个管道;
  • 各进程要互斥地访问管道;
  • 数据以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞,等待读进程将数据取走。当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞;
  • 如果没写满,就不允许读;如果没读空,就不允许写;
  • 数据一旦被读出,就从管道中被抛弃,这就意味着读进程最多只有一个,否则可能会有读错数据的情况;

王道 —— 进程通信相关推荐

  1. 【王道考研】进程通信

    2.1.4 进程通信 知识来源: B站王道考研 知识总览 进程通信  共享存储   基于数据结构的共享   基于存储区的共享  消息传递   直接通信   间接通信  管道通信 什么是进程通信? 概念 ...

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

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

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

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

  4. Linux进程通信中IPC对象——IPC_PRIVATE与ftok

    在linux中,可以使用IPC对象来进行进程间通信.IPC对象存在于内核中,多进程可以操作同一个IPC对象.每个IPC对象都有一个唯一的编号,该编号是由系统分配的.那么不同的进程如何知道这个编号,进而 ...

  5. Linux下进程通信知识点学习笔记(一)

    4种主要事件导致进程创建: 系统的初始化: 执行了正在运行的进程所调用的进程创建系统调用: 用户请求创建一个进程: 一个批处理作业的初始化: 进程的终止: 正常退出: 出错退: 严重错误: 被其他进程 ...

  6. 跨进程通信,到底用长连接还是短连接

    一个完整的软件系统大多数情况下是由多个进程共同协作进行的,哪怕它们在同一台服务器上.所以,进程之间如何进行高效的通信至关重要. 单个应用程序+单个数据库这套基础开发套餐我相信每个人都经历过,甚至在初期 ...

  7. linux一个进程通知另外一个进程,Linux进程通信学习笔记

    一.为什么需要进程通信 1)数据传输 一个进程需要把它的数据发送给另一个进程. 2)资源共享 多个进程之间共享同样的资源. 3)通知事件 一个进程向另外一个进程发送消息,通知它发生了某事件. 4)进程 ...

  8. 大话android 进程通信之AIDL

    上一篇的service涉及到进程通信问题,主要解决办法是通过 messenger来发送消息,这也是Google推荐的进程通信方式,比较简单易懂嘛~~,messenger底层也是通过binder来实现的 ...

  9. Binder跨进程通信原理(三):Binder IPC实现原理

    1. 动态内核可加载模块 && 内存映射 正如上一章所说, 跨进程通信是需要内核空间做支持的. 传统的 IPC 机制如 管道, Socket, 都是内核的一部分, 因此通过内核支持来实 ...

最新文章

  1. 汇总|实时性语义分割算法(全)
  2. Git历险记(四)——索引与提交的幕后故事
  3. ACM 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 B. Train Seats Reservation
  4. 数字示波器的激烈竞争
  5. 腾讯视频如何设置关闭本地视频后自动打开主界
  6. Eureka常用配置
  7. 通过网络连接检测计算机病毒,网络安全习题及答案
  8. Katalon Recorder录制脚本
  9. 创建MySQL数据库的副本_MySQL创建数据库(CREATE DATABASE语句)
  10. MC-GAN:Multi-Content GAN for Few-Shot Font Style Transfer
  11. 无外网环境下CentOS 7安装MySQL 5.7.18
  12. GIMP 2.10.12图片背景透明处理
  13. js中判断对象数组中是否存在某个对象,以及使用判断是否存在某个元素的indecOf()和find()方法
  14. armbian 斐讯n1_斐讯N1刷入Armbian(linux)或者电视盒子系统
  15. 机械专业热门选题 论文+图纸+PPT
  16. Counter对numpy数组进行统计
  17. 手机号,身份证号,姓名等校验
  18. 量化投资和主观投资到底有什么区别?
  19. 蓝鲸智云统一开发环境搭建指南
  20. FLASH按钮链接,flash按扭里加链接

热门文章

  1. 基础学习笔记之opencv(14):随机数发生器绘制文字
  2. IBM将发布以固态硬盘为基础的全企业系统
  3. HTTP3快来了,提前学习一下如何在Nginx中支持HTTP3.0/QUIC
  4. 同一域名下部署多个vue项目
  5. 如何升级docker的版本 ?
  6. BlockChain: 区块链入门课程 -- 区块链适用于移动性 分享和收费案例
  7. jQuery封装tab选项卡组件(自定义自动功能和延迟显示功能)
  8. 快给你的代码来点彩虹屁
  9. 重新写博+linux查找系列
  10. dropbox免费容量_免费课程:使用ES6和Dropbox构建费用管理器