操作系统-进程通信(共享存储 消息传递 管道通信 读写管道的条件)

news2024/9/29 3:25:14

文章目录

  • 什么是进程通信
  • 为什么进程通信需要操作系统支持
  • 共享存储
  • 消息传递
    • 直接通信方式
    • 间接通信方式
  • 管道通信
  • 小结
  • 注意

什么是进程通信

分享吃瓜文涉及到了进程通信

进程通信需要操作系统支持
在这里插入图片描述

为什么进程通信需要操作系统支持

进程不能访问非本进程的空间

当进程P和Q需要进行数据交互时候,P不能之间把数据写到Q的地址空间里,所以需要有操作系统的支持才能完成

在这里插入图片描述

共享存储

申请一片内存区域作为共享内存区,将该共享内存区都映射到各个进程的地址空间中

对共享内存区的访问应该是互斥的

在这里插入图片描述
操作系统只负责提供一片共享内存区域和映射,关于各个进程往这片区域存放的数据形式,存放位置由进程控制。

基于数据结构的共享:类似定义了一个数据结构变量,这个变量作为共享区域其他进程都可以共享。此时进程通信的自由度较低,需要按照该变量的相关要求来访问(如定义了整型数组变量,那么每次写和读都是整型类型的且需按照数组的要求即个数限制)

如左图是基于数据结构的共享
在这里插入图片描述

消息传递

格式化消息由消息头和消息体组成

在这里插入图片描述

直接通信方式

内核区域有各个进程的PCB,各个进程的PCB包含了该进程的消息队列,也就是其他进程发送给该进程,应该被该进程接收的消息。

P给Q发消息:在P进程空间完善要发送的消息,然后使用发送原语,该原语指明了消息的接收者

这个发送原语会导致操作系统内核接收到这个要发送的消息,并把它挂到进程Q的消息队列里面(或者说复制到)
在这里插入图片描述
进程Q使用接收原语,该原语指明了接收谁发过来的消息,然后操作系统内核将Q的消息队列中属于P发过来的消息复制到进程Q的地址区域

在这里插入图片描述

间接通信方式

进程P通过系统调用申请一个信箱A(或者多个信箱)在内核空间中
进程P在自己进程空间内完善消息(类似代码执行时对数据加工)
在这里插入图片描述

然后使用发送原语,该发送原语指明了发送到的信箱A,操作系统将该消息复制到信箱A
在这里插入图片描述
进程Q使用接收原语,该原语指明了从哪个信箱接收消息,然后操作系统会将给信箱A的消息复制到进程Q的地址空间
在这里插入图片描述
注意
在这里插入图片描述

管道通信

管道某个时刻只能单向(半双工)
进程往管道写,进程往管道读出内容(循环队列)

系统调用方式申请一个管道文件,本质是内存中的内存缓存区

管道中前面有空位需要先写前面的,前面填满了才能往后面写,读也同样(先进先出 本质是循环队列 先写的就是先进入的,出来的就是先进入的,如果前面的有空位此时还要写,会先写前面的)

半双工:某个时间段内一个管道数据是单向流动的,只能由一方传到另一方。但不同时刻流动方向可以不同,但一个管道只能同时只有一个流动方向

多个进程读同一个管道会错乱即无法保证哪个数据被谁读走了

各进程互斥访问管道同一时刻只有一个进程对管道进行写或者读操作

5.第二个解决方案中操作系统控制从管道中读
在这里插入图片描述

小结

注意共享存储进程自己实现互斥

在这里插入图片描述

注意

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1410434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python爬虫框架选择与使用:推荐几个常用的高效爬虫框架

目录 前言 一、Scrapy框架 1. 安装Scrapy 2. Scrapy示例代码 3. 运行Scrapy爬虫 二、Beautiful Soup库 1. 安装Beautiful Soup 2. Beautiful Soup示例代码 3. 运行Beautiful Soup代码 三、Requests库 1. 安装Requests库 2. Requests示例代码 3. 运行Requests代码 …

周订单量超300%增长!百度智能云千帆AI原生应用商店公布百天成绩单

​ 1月25日,国内首家面向企业客户进行一站式交易的AI原生应用商店——百度智能云千帆AI原生应用商店上线100天。上线百日,累计上线AI原生应用超100款,涵盖文案智能创作、AI作画、代码生成、数字人等应用场景,应用数量指数级增长…

Java面试——基础篇

目录 1、java语言有哪些优点和缺点? 2、JVM 、 JDK 和 JRE的关系 3、为什么说 Java 语言“编译与解释并存”? 4、Java和c的区别 5、基本数据类型 5.1、java的8种基本数据类型: 5.2、基本类型和包装类型的区别: 5.3、包装类型的缓存机…

Docker 魔法解密:探索 UnionFS 与 OverlayFS

本文主要介绍了 Docker 的另一个核心技术:Union File System。主要包括对 overlayfs 的演示,以及分析 docker 是如何借助 ufs 实现容器 rootfs 的。 1. 概述 Union File System Union File System ,简称 UnionFS 是一种为 Linux FreeBSD NetB…

2023.1.23 关于 Redis 哨兵模式详解

目录 引言 人工恢复主节点故障 ​编辑 主从 哨兵模式 Docker 模拟部署哨兵模式 关于端口映射 展现哨兵机制 哨兵重新选取主节点的流程 哨兵模式注意事项 引言 人工恢复主节点故障 1、正常情况 2、主节点宕机 3、程序员主动恢复 先看看该主节点还能不能抢救如果不好定…

[GDMEC-无人机遥感研究小组]无人机遥感小组-000-数据集制备

基于labelme的无人机语义分割数据集制备 文章目录 基于labelme的无人机语义分割数据集制备1. 数据获取2. 安装labelme3.利用labelme进行标注 1. 数据获取 数据集制备需要利用无人机飞行并采集标注。使用录制模式,镜头垂直向下进行拍摄,得到DJI_XXXX.MP4…

如何实现动态代理(俩种方式)

文章目录 基于接口的动态代理:基于类的动态代理: 基于接口的动态代理: 通过Java的反射机制来动态创建代理对象,代理对象实现了一个或多个接口。 Java提供了java.lang.reflect包中的Proxy类和InvocationHandler接口来实现基于接口…

仰暮计划|“他说,他是出生于两个时代的人”

凌保庆老爷爷,1942年10月4日出生,今年82岁,家住在河南省登封市唐庄乡磨沟村。7月28日,我作为仰暮计划小队的一员去拜访了这位老人,听凌爷爷讲述了他的故事。 走进这户人家的时候,凌爷爷正在书房里。虽然家…

Spring Cloud 系列:基于Seata 实现 XA模式

https://seata.io/zh-cn/docs/user/mode/xa https://seata.io/zh-cn/docs/dev/mode/xa-mode XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范 描述了全局的TM与局部的RM之间的…

【深度学习】线性回归模型与梯度下降法

线性回归模型与梯度下降法 线性回归模型与枚举法 线性回归模型定义: w:权重b:偏置#mermaid-svg-ZAxF27Mw5dXNQgw2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZAxF27Mw5dXNQgw2 .error-icon{fill:#552222;}…

大数据开发之Spark(完整版)

第 1 章:Spark概述 1.1 什么是spark 回顾:hadoop主要解决,海量数据的存储和海量数据的分析计算。 spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。 1.2 hadoop与spark历史 hadoop的yarn框架比spark框架诞生的晚&#xff…

JRT的无源码发布

之前介绍过JRT最大的特点就是业务脚本化。老javaer就会说你业务代码都在发布环境放着,那怎么代码保密,在发布环境别人随便改了启不是不安全,或者一些代码我就是不想让人看源码呢。 其实JRT的业务脚本化只是特性,不是代表就必须要…

【域名解析】如何将域名指向对应服务器IP

目录 🌷一、域名解析基本概念 🌼1. 定义 🌼2. 域名解析类型 🌷二、域名解析服务器IP地址 🌼1. 操作步骤 🌼2. 验证 🌷一、域名解析基础知识 🌼1. 基本概念 定义: …

【操作系统】实验八 proc文件系统

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要&…

破解不了WIFI?也许你应该试试社工...

以下案例为虚拟环境,请勿模仿 做什么? 由于工作出差在该某某企业出差,手机和电脑都没办法用流量…流量包1G1块…太贵了…我勒个豆啊…发现WIFI密码难以破解(小kali上过了)。 出去逛逛吧…发现楼道有海康威视摄像头,学过交换机的一般都看得出来这个摄像…

jquery多选框

使用hbuilder <!DOCTYPE html> <html><head><meta charset"GBK"><title></title></head><body><table id"myTable"> <tr> <td>黄1</td> </tr> <tr> <td>…

C语言通过IXMLHttpRequest以get或post方式发送http请求获取服务器文本或xml数据

做过网页设计的人应该都知道ajax。 Ajax即Asynchronous Javascript And XML&#xff08;异步的JavaScript和XML&#xff09;。使用Ajax的最大优点&#xff0c;就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作&#xff0c;并避免了在网络上发…

计算机网络——网络层(1)

计算机网络——网络层(1&#xff09; 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 网络层&#xff1a;数据平面网络层概述核心功能协议总结 路由器工作原理路由器的工作步骤总结 网际协议IPv4主要特点不足IPv6主要特点现状 通用转发和SDN通用转发SDN&#xff08;软件…

《WebKit技术内幕》学习之十三(3):移动WebKit

3 其他机制 3.1 新渲染机制 为了移动领域更好的用户体验&#xff0c;渲染机制所做的改进主要是提升渲染性能来增加响应的速度&#xff0c;甚至不惜牺牲一些跟规范定义的行为不一致的地方。在这一小节中主要介绍三个方面的技术&#xff0c;其一是Tiled Backing Store&#x…

【LLM】FuseLLM:大模型融合trick-知识融合LLMs

前言 传统的模型融合方法分为集成的方法和权重合并的方法&#xff0c;这两种方法在以往的NLP的比赛中非常常见&#xff0c;是一种提分手段。然而&#xff0c;上述两种方法都需要预训练或者微调相应的模型。在大模型场景下&#xff0c;对每个源模型都进行初始化成本太高&#x…