操作系统 --- 进程通信(IPC)

news2024/11/15 8:34:44

目录

一、进程间的通信? 

二、为什么进程间通信需要操作系统支持?

三、进程间通信的方法 

3.1 共享存储

3.2 消息传递(消息队列)

3.2.1 直接通信方式【点名道姓的消息传递】

3.2.2 间接通信方式【以“信箱”作为中间实体进行消息传递】

3.3 管道通信(FIFO)【读写数据自由度没有共享内存方式高】 

四、总结


 

一、进程间的通信? 

      进程通信是指进程之间的信息交换。
定义:进程间通信(Inter-Process Communication,IPC)是指两个进程之间产生数据交互。
举例:

二、为什么进程间通信需要操作系统支持?

进程间通信需要操作系统支持的原因:      

      进程间通信(Inter-Process Communication,IPC)需要操作系统的支持,主要是因为进程具有隔离性,操作系统通过一系列机制保护各个进程的独立性和安全性。因此,直接共享数据或直接访问其他进程的内存空间是被禁止的。操作系统作为管理资源和提供服务的核心组件,负责为进程间通信提供安全、高效的机制。

以下是操作系统支持进程间通信的主要原因:

1. 进程的隔离性

  • 操作系统为每个进程分配独立的虚拟地址空间,以防止一个进程访问或修改另一个进程的内存。这种隔离性是操作系统为确保系统稳定性和安全性所采取的基本措施。
  • 在这种隔离性下,进程不能直接访问彼此的内存,因此,操作系统必须提供某种机制,使得进程可以在受控的情况下相互传递信息,而不破坏这种隔离。

2. 资源管理和共享

  • 进程共享系统资源(如内存、文件、设备等),这些资源的访问和管理需要操作系统的协调。例如,如果两个进程要共享同一个文件,操作系统需要提供一种安全的机制来确保文件的正确读写,不会因并发操作而导致数据损坏。
  • 操作系统通过进程间通信机制,如管道、消息队列、共享内存等,使多个进程能够高效、安全地共享资源。

3. 数据同步与一致性

  • 在并发执行的进程中,多个进程可能需要同步访问同一个数据或资源。为避免竞争条件(race condition)和数据不一致问题,操作系统需要提供同步机制,如信号量、互斥锁等,来确保进程间的同步操作。
  • 操作系统通过这些同步机制,控制进程对共享资源的访问,防止死锁、数据损坏或不一致性。

4. 跨进程通信的安全性

  • 操作系统为进程提供了隔离的执行环境,防止进程之间的恶意访问或篡改。为了确保进程间通信的安全性,操作系统必须对通信操作进行监控和管理,确保只有被授权的进程才能相互通信,防止信息泄露或恶意破坏。
  • 通过操作系统的权限管理,只有符合权限要求的进程才能使用特定的通信机制。

5. 进程的生命周期管理

  • 操作系统负责管理进程的创建、执行、挂起、终止等生命周期。进程间通信机制与进程的生命周期密切相关。例如,父进程和子进程之间可能需要通过管道或信号进行通信,操作系统需要协调这些通信机制,确保信息在正确的时刻被传递和处理。
  • 操作系统还需要处理进程异常终止的情况,确保通信数据不会因进程退出而丢失或混乱。

6. 跨平台和跨网络通信

  • 操作系统不仅支持本地进程间的通信,还支持跨网络的进程通信。例如,分布式系统中,不同主机上的进程需要通过网络进行通信。操作系统需要提供网络通信的基础设施,如套接字(Socket),来实现这种进程间的远程通信。
  • 操作系统通过统一的接口(如TCP/IP协议栈)来管理网络通信,确保进程间可以通过网络安全、可靠地传递信息。

7. 高效的通信机制

  • 操作系统提供了多种进程间通信机制,适应不同的通信需求。常见的IPC机制包括:
    • 管道(Pipe):用于父子进程间的单向数据通信。
    • 消息队列(Message Queue):允许多个进程之间通过消息的形式传递数据。
    • 共享内存(Shared Memory):允许进程直接共享内存中的某个区域,实现高速数据传递,但需要同步机制来避免竞争条件。
    • 信号量(Semaphore)和互斥锁(Mutex):用于进程间的同步,确保进程对共享资源的互斥访问。
    • 信号(Signal):用于进程之间发送简单的通知或中断。
    • 套接字(Socket):支持网络间进程通信。
    操作系统为这些机制提供底层的实现,确保它们高效且正确地工作。

8. 调度与通信的协调

  • 进程间的通信涉及数据的发送、接收、缓冲、同步等操作,而这些操作可能会涉及到进程调度。例如,当一个进程在等待另一个进程传递数据时,它可能需要被挂起,直到数据到达。这需要操作系统的调度器协调进程的运行和等待状态。
  • 操作系统通过调度算法和进程优先级管理,确保通信过程不会因某些进程的阻塞而影响系统整体性能。

9. 跨体系架构的抽象

  • 操作系统为不同平台上的进程提供一致的通信接口,隐藏底层硬件和体系结构的差异。例如,无论在32位还是64位平台上,进程都可以通过相同的系统调用接口进行通信。
  • 操作系统的IPC机制使得开发人员不必关心底层硬件实现,可以通过统一的API进行进程间的通信。

总结

      进程间通信需要操作系统的支持,因为操作系统负责管理进程的隔离、资源共享、安全性、同步和调度等。通过操作系统提供的IPC机制,进程可以安全、高效地相互通信,并共享必要的资源。操作系统通过这些机制确保并发环境下进程的正确性、稳定性和安全性,同时简化了开发者的工作,使他们无需关注底层细节。

 

进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。
      我们的系统在给进程分配内存地址空间的时候,各个进程的内存地址空间是相互独立的,比如说进行P可以访问进程P的地址空间,进程Q可以访问进程Q的地址空间,但是进程P不可以访问进程Q的地址空间。
      这么规定是出于安全的考虑,如果一个进程可以随意访问其他进程的地址空间,那么该进程可以随意修改其他进程的数据,或者随意读取其他进程的数据。我们考虑一件事情,假设说你的手机不知道什么时候安装了一个垃圾软件,这个垃圾软件可以随意地访问你的其他进程的地址空间,那么是不是存在这样一种可能,即这个垃圾软件有可能把你的隐私数据读取走了,那这显然是很危险的、不安全的,因此,出于安全考虑,各个进程只能访问自己的内存地址空间而不能访问其他进程的内存地址空间。

      那么如果两个进程要进行信息的交互,即进程之间通信,那么显然进程P是不可能直接把数据写到进程Q的内存地址空间的。
      由于进程不可以直接访问其他进程的地址空间,因此必须要有操作系统的支持才可以完成进程间的通信。
那么在操作系统的支持下,进程之间应该如何进行通信呢?
接下来我们介绍三种方法:共享存储、消息传递、管道通信。

三、进程间通信的方法 

3.1 共享存储

      在共享存储器系统(Shared-Memory System)中,相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。据此,又可把它们分成以下两种类型: (1) 基于共享数据结构的通信方式。 (2) 基于共享存储区的通信方式。 

      基于存储区的共享: 操作系统在内存中划出一块共享存储区,数据的形式、存放位置都由通信进程控制,而不是操作系统。这种共享方式速度很快,是一种高级通信方式。 如下图所示:


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

 

3.2 消息传递(消息队列)

消息队列是什么?

      消息队列(Message Queue) 是一种进程间通信(IPC)机制,允许进程通过操作系统传递消息。消息队列的主要功能是使一个进程发送消息,另一个进程从队列中接收这些消息。这是一种异步通信方式,进程可以在不同时间发送和接收消息。

      消息队列由操作系统维护,与文件类似,通常有一个唯一的消息队列ID。进程通过该ID来访问消息队列。

      在该机制中,进程不必借助任何共享存储区或数据结构,而是以格式化的消息 (message)为单位,将通信的数据封装在消息中,并利用操作系统提供的一组通信命令(原语),在进程间进行消息传递,完成进程间的数据交换。
      基于消息传递系统的通信方式属于高级通信方式,因其实现方式的不同,可进一步分成两类: (1) 直接通信方式 (2) 间接通信方式。

3.2.1 直接通信方式【点名道姓的消息传递】

      假设现在进程P要给进程Q发送一个消息,在操作系统的内核区域,管理着各个进程的PCB,PCB间接管理该进程的消息队列,如下图所示:

PCB与消息队列的关系

进程间通信(IPC)是一种在进程之间传递数据的机制,消息队列就是其中一种常用方式。在内核中,消息队列通常由内核管理,并通过 PCB 进行间接的引用和操作:

  1. PCB 间接管理消息队列:

    • 操作系统内核维护着消息队列的全局列表或者表格,进程的 PCB 中会保存指向该消息队列的标识符或指针。
    • 当进程需要访问消息队列时,PCB 中的这些信息会被操作系统使用,以找到对应的消息队列资源。
  2. 消息队列的管理:

    • 每个消息队列有一个唯一的标识符 (比如消息队列 ID),进程通过该标识符进行通信。
    • PCB 记录了该进程所拥有或使用的 IPC 资源,包括消息队列。
    • 当一个进程终止时,操作系统根据 PCB 中的资源信息清理与该进程相关联的消息队列。
  3. 调度和资源分配:

    • PCB 还用于调度器在调度过程中跟踪进程的通信状态。如果一个进程处于等待某个消息的状态,它的 PCB 会反映出这种状态,进而影响进程的调度。



首先,进程P要在自己的地址空间中来完善消息,最终形成格式化消息msg,如下图所示:

      接下来进程P会使用到发送原语【send(Q ,msg)】,指明消息msg是要发送给Q的。 该发送原语会导致操作系统内核接收到这个格式化消息msg,并且会将msg挂在进程Q的消息队列中,也就是说,消息体msg从进程P的地址空间复制到了内核空间。如下图所示:

      进程Q使用接收原语receive(P,&msg)接收P进程发送的msg,进程Q执行接收原语之后,操作系统内核会检查进程Q的消息队列中由P进程发送过来的消息,操作系统内核会把这个消息体从操作系统的内核区给复制到进程Q的地址空间。如下图所示:

3.2.2 间接通信方式【以“信箱”作为中间实体进行消息传递】

      假设进程P和进程Q现在要通信,进程P可以通过系统调用向操作系统申请一个“邮箱”,那如何通过“邮箱”使得两个进程之间完成通信呢?
      进程P在自己的地址空间中完善消息,形成格式化消息msg,如下图所示:

进程P使用发送原语send(A,msg)来指明往信箱A发送消息msg,如下图所示:

进程Q使用接收原语receive(A,&msg)从信箱A接收信息,如下图所示;

可以多个进程往同一个信箱send消息,也可以多个进程从同一个信箱中receive消息。

3.3 管道通信(FIFO)【读写数据自由度没有共享内存方式高】 

定义:管道是一种将数据从一个进程传递到另一个进程的通信机制。数据从管道的一端(写入端)输入,然后从另一端(读取端)读取。

      所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。向管道(共享文件)提供输入的发送进程(即写进程)以字符流形式将大量的数据送入管道;而接受管道输出的接收进程(即读进程)则从管道中接收(读)数据。由于发送进程和接收进程是利用管道进行通信的,故又称为管道通信。这种方式首创于UNIX系统,由于它能有效地传送大量数据,因而又被引入到许多其它操作系统中。
      为了协调双方的通信,管道机制必须提供以下三方面的协调能力:
① 互斥【由操作系统实现】,即当一个进程正在对pipe执行读/写操作时,其它(另一)进程必须等待。
② 同步,指当写(输入)进程把一定数量(如4 KB)的数据写入pipe,便去睡眠等待,直到读(输出)进程取走数据后再把它唤醒。当读进程读一空pipe时,也应睡眠等待,直至写进程将数据写入管道后才将之唤醒。【写进程往管道写数据,即便管道没被写满,只要管道没空,读进程就可以从管道读数据;读进程从管道读数据,即便管道没被读空,只要管道没满,写进程就可以往管道写数据】
③ 确定对方是否存在,只有确定了对方已存在时才能进行通信。

“管道”是一个特殊的共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的内存缓冲区。
管道只能采用双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。


管道中的数据一旦被读出,就彻底消失。因此,当多个进程读同一个管道时,可能会错乱。对此,通常有两种解决方案:①一个管道允许多个写进程,一个读进程(2014年408真题高教社官方答案)﹔②允许有多个写进程,多个读进程,但系统会让各个读进程轮流从管道中读数据(Linux的方案)。


 

四、总结

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

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

相关文章

leetcode:2710. 移除字符串中的尾随零(python3解法)

难度:简单 给你一个用字符串表示的正整数 num ,请你以字符串形式返回不含尾随零的整数 num 。 示例 1: 输入:num "51230100" 输出:"512301" 解释:整数 "51230100" 有 2 个尾…

合宙低功耗4G模组Air780EX——硬件设计手册02

在上文我们介绍了合宙低功耗4G模组Air780EX的主要性能和应用接口, 上文链接:合宙低功耗4G模组Air780EX——硬件设计手册01-CSDN博客 本文我们将继续介绍Air780EX的射频接口,电气特性,实网功耗数据,结构规格等内容。 …

如何解决户用光伏项目管理难题?

户用光伏作为分布式能源的重要组成部分,正迎来前所未有的发展机遇。户用光伏项目的复杂性和多样性也给项目管理带来了诸多挑战,包括客户分散、安装周期长、运维难度大、数据监控不及时等问题。为解决这些难题,构建一套高效、智能的户用光伏业…

降维打击 华为赢麻了

文|琥珀食酒社 作者 | 积溪 真是赢麻了 华为估计都懵了 这辈子还能打这么富裕的仗? 其实在苹果和华为的发布会召开之前 我就知道华为肯定会赢 但我没想到 苹果会这么拉胯 华为这是妥妥的降维打击啊 就说这苹果iPhone 16吧 屏幕是变大了、颜色…

银行用电安全管理难点及解决方案

1引言 科技进步带来丰富的电力资源和更多电气设备,但同时也增加了火灾风险。2020年,中国共发生25.2万起火灾,其中电气原因导致的火灾占33.6%,共8.5万起。电气问题引发的较大火灾占55.4%。线路问题如短路、过负荷和接触不良是主要…

FastAPI 深入学习:利用__call__方法实现动态依赖项

在Python中,__init__ 和 __call__ 是两个特殊的方法,它们在类的上下文中有特定的用途: __init__ 方法: 这是类的初始化方法,当一个实例被创建时,它会被自动调用。它通常用于接收初始化参数并设置实例的初始…

【828华为云征文|华为云Flexus X实例:一键助力中小企业,快速部署个性化网站!】

文章目录 前言搭建自己专属网站准备工作具体操作服务器环境确认进入宝塔软件商店JTBC网站内容管理系统一键部署填写域名放行80端口JTBC安装初始页数据库信息配置管理员信息配置完成安装网站管理后台网站前台 验证后台配置内容前台访问的效果 结语 前言 在云计算盛行的时代&…

宠物空气净化器哪个好?希喂、352、有哈宠物空气净化器测评分享

朋友在三个月前养了一只银渐层,从此进入了幸福的养猫生活,但她最近也跟我说,最近因为猫咪和她男朋友吵架了。 每天下班她男朋友回得都比她早,每次开门看到的就是猫咪的毛发掉得很多,地板上、沙发上甚至厨房里都能看到…

WebGL系列教程四(绘制彩色三角形)

目录 1 前言2 varying变量介绍3 开始绘制3.1 声明顶点着色器3.2 声明片元着色器3.3 创建顶点和颜色的缓冲区3.4 指定变量从缓冲区获取值3.5 效果3.6 varying的内涵3.7 完整代码 4 总结 1 前言 上一篇中我们介绍了如何使用缓冲区来绘制三角形,这一篇我们来讲讲如何给…

《PneumoLLM:利用大型语言模型的力量进行尘肺病诊断》|文献速递--基于深度学习的医学影像病灶分割

Title 题目 PneumoLLM: Harnessing the power of large language model for pneumoconiosis diagnosis 《PneumoLLM:利用大型语言模型的力量进行尘肺病诊断》 01 文献速递介绍 在计算机辅助诊断领域,对医学数据的处理和分析能力至关重要。这不仅有助…

【教师节视频制作】飞机降落飞机机身AE模板修改文字软件生成器教程特效素材【AE模板】

教师节祝福视频制作教程飞机降落飞机机身AE模板修改文字特效广告生成神器素材祝福玩法AE模板工程 怎么如何做的【教师节视频制作】飞机降落飞机机身AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 下载AE模板 安装AE软件 把AE模板导入AE软件 …

紫色UI趣味测试小程序源码,包含多种评测

紫色UI趣味测试小程序源码,包含多种评测。 该源码里面包含了多种评测,每一种评测都包含大多小细节。 代码下载

springboot网上租房系统---附源码79833

摘 要 如今,房屋作为人类生活的重要场所,在城市中扮演着至关重要的角色。随着城市化进程的加速和流动人口的增多,房屋租赁产业迎来了巨大的发展机遇。然而,在房屋租赁过程中存在着许多繁琐的手续和信息搜索的问题,需要…

抖音电商商品采集接口api 店铺商品列表sku返回值

如今,抖音已经成为国民最受欢迎的APP。因为抖音的存在,我们的生活开始变得更加有趣,同时,抖音带货,抖音duan等等呼之欲出,越来越多的人开始加入到抖音大战中去。在抖音进行带货或者进行短视频创作&#xff…

骨传导耳机哪个牌子值得买?推荐五款表现出色的骨传导耳机!

随着骨传导耳机技术的不断发展,市场呈现出多元化的趋势,但这也使得消费者在挑选时面临更多挑战,特别是如何避免因选择不当而引发的听力问题。目前市场上,部分由非专业厂商或网红快速推出的产品,因技术积累不足、材料选…

巅峰对决:南卡、韶音、墨觉旗舰级骨传导耳机深度评测与全面对比!

在如今的骨传导耳机市场,有许多新手小白想入手骨传导耳机,但是又非常怕自己踩雷。所以就疯狂在网上查攻略等等,也有很多小伙伴来询问我,在现在骨传导耳机市场上热门的南卡、韶音、墨觉哪款比较值得入手啊?那么今天&…

Unity Apple Vision Pro 开发(六):MR 物体交互

XR 开发者社区链接: SpatialXR社区:完整课程、项目下载、项目孵化宣发、答疑、投融资、专属圈子 课程分为上、中、下三个部分,上为公开部分,中和下仅社区可见,需要通过文章开头的链接加入社区。 【上】(理…

聚鼎科技:现在做装饰画是靠谱的吗

在生活的各个角落,艺术以多种形式存在着,而装饰画作为其中的一种,一直以其独特的魅力填充着我们的世界。但在这个快速变化的时代,许多人会问:现在做装饰画还是一个靠谱的选择吗? 装饰画的市场依旧充满生机。随着人们对…

docker 复制容器

在 Docker 中复制容器本身并不是直接支持的操作,但你可以通过以下方法来实现类似的效果: 1.将已有的容器提交为镜像 2.以该镜像创建容器 3.开启容器,进入容器内部 一. 使用 Docker 镜像复制容器 首先,你可以将容器的状态保存…

dropdown源码分析 -- ant-design-vue系列

组件结构 dropdown 组件对参数做了一些处理,然后直接调用了vc-trigger组件来进行渲染,先看一下整体的组件调用结构。 极简实现 这个组件需要满足以下几个基本的功能: 可以传入两个插槽 default 和 popup,default 是默认展示的节…