2.4、进程通信

news/2023/6/7 1:13:27

整体框架

image-20230118222146010

1、什么是进程通信?

顾名思义,进程通信就是指进程之间的信息交换。

进程是分配系统资源的单位(包括内存地址空间),

  • 因此各进程\color{red}各进程各进程拥有的内存地址空间相互独立\color{red}内存地址空间相互独立内存地址空间相互独立

image-20230118214914239

为了保证安全,一个进程不能直接访问另一个进程的地址空间\color{red}一个进程不能直接访问另一个进程的地址空间一个进程不能直接访问另一个进程的地址空间

但是进程之间的信息交换又是必须实现的。

为了保证进程间的安全通信,操作系统提供了一些方法。

image-20230118215015724

2、共享存储

image-20230118215242272

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

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

image-20230118215558218

基于数据结构\color{red}基于数据结构基于数据结构的共享:

  • 比如共享空间里只能放一个长度为 10 的数组。

  • 这种共享方式速度慢、限制多,

  • 是一种低级通信\color{red}低级通信低级通信方式

基于存储区\color{red}基于存储区基于存储区的共享:

  • 在内存中画出一块共享存储区,数据的形式、存放位置都由进程控制,而不是操作系统。

  • 相比之下,这种共享方式速度更快,

  • 是一种高级通信\color{red}高级通信高级通信方式。

3、管道通信

“管道” 是指用于连接读写进程的一个共享文件,

  • 又名 pipe 文件。
  • 其实就是在内存中开辟一个大小固定的缓冲区

image-20230118215739247

管道只能采用半双工通信\color{red}半双工通信半双工通信,某一时间段内只能实现单向的传输。

  • 如果要实现双向同时通信,则需要设置两个管道

image-20230118215947722

首先进程 111 会往管道中写数据, 当管道中的数据写满了之后进程 222 才可以开始往外读数据

只有这个数据全部被读出后,进程 111 才可以继续往里面写数据


数据以字符流的形式写入管道,当管道写满时,写进程 write() 系统调用将被阻塞,等待读进程将数据取走。

当读进程将数据全部取走后**,管道变空**,此时读进程read() 系统调用将被阻塞


如果没写满,就不允许读\color{red}没写满,就不允许读没写满,就不允许读

如果没读空,就不允许写\color{red}没读空,就不允许写没读空,就不允许写

数据一旦被读出,就从管道中被抛弃,

  • 这就意味着读进程最多只能有一个\color{red}读进程最多只能有一个读进程最多只能有一个

    否则可能会有读错数据的情况。

4、消息传递

进程间的数据交换以格式化的消息\color{red}格式化的消息格式化的消息Message)为单位。

进程通过操作系统提供的 “发送消息/接收消息” 两个原语\color{red}原语原语进行数据交换。

例如:TCP 报文段的首部就是消息头,数据载荷就是消息体

image-20230118220813617

image-20230118221019141

4.1、直接通信方式

消息直接挂到接收进程的消息缓存队列上

image-20230118221051455

4.2、间接通信方式

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

  • Eg:计网中的电子邮件系统

image-20230118221353103

5、整体框架

image-20230118222138424

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

SPSS分组统计求平均值

1.从文件中打开数据集、复制粘贴也行,并删除多余的空行 删除不符合样式的数据行2.调整相关的数据集表格列变量属性为数字 调整数据集属性3.将数据依据指定列,按范围分组 依据指定列,生成新列输入新旧值映射关系操作完成后点击确定&#xff0c…

全国地名点地统计模式分析

前言用不同的空间点模式分析方法,综合得出全国地名数据点的空间分布模式属于随机分布、均匀分布、聚集分布中的哪一种。一、点模式分析空间点模式分析是一种根据地理实体或事件的空间位置研究其分布模式的空间分析方法 。 空间点分布模式通常分为三种:随…

深拷贝和浅拷贝的区别是什么?

深拷贝和浅拷贝的区别是什么? 1、浅拷贝 (1)、定义 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对“主"对象进行拷贝,但不会复制主对象里面的对象。"里面的对象”会在…

JS中浅拷贝和深拷贝的几种实现方式

概念 深拷贝和浅拷贝只针对像 Object, Array 这样的复杂对象。它们最根本的区别在于是否真正获取了一个对象的复制实体,而不是引用。简单来说,假设B复制了A,当修改B时,看A是否会发生变化,如果A变了,说明是浅…

这一篇足够让你理解深拷贝和浅拷贝(详细)

写在前面 如果觉得有所帮助,记得点个关注和点个赞哦,非常感谢支持。 任何变成语言中,其实都有浅拷贝和深拷贝的概念,Java 中也不例外。在对一个现有的对象进行拷贝操作的时候,是有浅拷贝和深拷贝之分的,他…

前端面试:浅拷贝和深拷贝的区别?

前些天发现了一个巨牛的人工智能学习博客,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转 那么大家晚上好,我是今天晚上的主讲老师,我是兔哥。 我们在面试中经常会被问到浅拷贝和深拷贝的区别,正好群里…

面试题-深拷贝和浅拷贝区别是什么?

本文针对java语言。 当复制一个java对象时,由于对其属性复制后产生的效果不同,而产生了深拷贝与浅拷贝。 对于基本类型,深拷贝和浅拷贝都是一样的,都是对原始数据的复制,修改原始数据,不会对复制数据产生影…

浅拷贝和深拷贝 JSON.parse和JSON.stringify

参考一 JSON.parse(JSON.stringify(obj))我们一般用来深拷贝,其过程说白了 就是利用JSON.stringify 将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象;序列化的作用是存储(对象本身存储的只是一个…