王道 —— 进程通信
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()系统调用将被阻塞;
- 如果没写满,就不允许读;如果没读空,就不允许写;
- 数据一旦被读出,就从管道中被抛弃,这就意味着读进程最多只有一个,否则可能会有读错数据的情况;
王道 —— 进程通信相关推荐
- 【王道考研】进程通信
2.1.4 进程通信 知识来源: B站王道考研 知识总览 进程通信 共享存储 基于数据结构的共享 基于存储区的共享 消息传递 直接通信 间接通信 管道通信 什么是进程通信? 概念 ...
- (王道408考研操作系统)第二章进程管理-第一节4:进程通信(配合Linux)
文章目录 一:什么是进程通信 二:如何实现进程间通信及其分类 三:通信方式1-共享存储(共享内存) (1)课本基础内容 (2)补充-Linux中的进程通信 四:通信方式2-管道 (1)管道是什么 (2 ...
- 操作系统学习笔记-2.1.4进程通信
操作系统学习笔记-2019 王道考研 操作系统-2.1.4进程通信 文章目录 4进程通信 4.1知识总览 4.2前置知识:什么是进程通信? 4.3共享存储 4.4 管道通信 4.5消息传递 4.6小结 ...
- Linux进程通信中IPC对象——IPC_PRIVATE与ftok
在linux中,可以使用IPC对象来进行进程间通信.IPC对象存在于内核中,多进程可以操作同一个IPC对象.每个IPC对象都有一个唯一的编号,该编号是由系统分配的.那么不同的进程如何知道这个编号,进而 ...
- Linux下进程通信知识点学习笔记(一)
4种主要事件导致进程创建: 系统的初始化: 执行了正在运行的进程所调用的进程创建系统调用: 用户请求创建一个进程: 一个批处理作业的初始化: 进程的终止: 正常退出: 出错退: 严重错误: 被其他进程 ...
- 跨进程通信,到底用长连接还是短连接
一个完整的软件系统大多数情况下是由多个进程共同协作进行的,哪怕它们在同一台服务器上.所以,进程之间如何进行高效的通信至关重要. 单个应用程序+单个数据库这套基础开发套餐我相信每个人都经历过,甚至在初期 ...
- linux一个进程通知另外一个进程,Linux进程通信学习笔记
一.为什么需要进程通信 1)数据传输 一个进程需要把它的数据发送给另一个进程. 2)资源共享 多个进程之间共享同样的资源. 3)通知事件 一个进程向另外一个进程发送消息,通知它发生了某事件. 4)进程 ...
- 大话android 进程通信之AIDL
上一篇的service涉及到进程通信问题,主要解决办法是通过 messenger来发送消息,这也是Google推荐的进程通信方式,比较简单易懂嘛~~,messenger底层也是通过binder来实现的 ...
- Binder跨进程通信原理(三):Binder IPC实现原理
1. 动态内核可加载模块 && 内存映射 正如上一章所说, 跨进程通信是需要内核空间做支持的. 传统的 IPC 机制如 管道, Socket, 都是内核的一部分, 因此通过内核支持来实 ...
最新文章
- 汇总|实时性语义分割算法(全)
- Git历险记(四)——索引与提交的幕后故事
- ACM 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 B. Train Seats Reservation
- 数字示波器的激烈竞争
- 腾讯视频如何设置关闭本地视频后自动打开主界
- Eureka常用配置
- 通过网络连接检测计算机病毒,网络安全习题及答案
- Katalon Recorder录制脚本
- 创建MySQL数据库的副本_MySQL创建数据库(CREATE DATABASE语句)
- MC-GAN:Multi-Content GAN for Few-Shot Font Style Transfer
- 无外网环境下CentOS 7安装MySQL 5.7.18
- GIMP 2.10.12图片背景透明处理
- js中判断对象数组中是否存在某个对象,以及使用判断是否存在某个元素的indecOf()和find()方法
- armbian 斐讯n1_斐讯N1刷入Armbian(linux)或者电视盒子系统
- 机械专业热门选题 论文+图纸+PPT
- Counter对numpy数组进行统计
- 手机号,身份证号,姓名等校验
- 量化投资和主观投资到底有什么区别?
- 蓝鲸智云统一开发环境搭建指南
- FLASH按钮链接,flash按扭里加链接
热门文章
- 基础学习笔记之opencv(14):随机数发生器绘制文字
- IBM将发布以固态硬盘为基础的全企业系统
- HTTP3快来了,提前学习一下如何在Nginx中支持HTTP3.0/QUIC
- 同一域名下部署多个vue项目
- 如何升级docker的版本 ?
- BlockChain: 区块链入门课程 -- 区块链适用于移动性 分享和收费案例
- jQuery封装tab选项卡组件(自定义自动功能和延迟显示功能)
- 快给你的代码来点彩虹屁
- 重新写博+linux查找系列
- dropbox免费容量_免费课程:使用ES6和Dropbox构建费用管理器