当前位置: 首页 > news >正文

进程于线程-3

进程通信

1. 进程通信的定义与分类

        进程通信:进程间的信息交换,分为 低级通信(如PV操作,传递少量控制信息)和 高级通信(高效传输大量数据)。
        高级通信三大类:共享存储、消息传递、管道通信(信号为特殊机制)。


2. 共享存储(Shared Memory)

核心思想:进程间通过 共享内存区域 直接读写数据(需同步互斥控制)。

  • 分类
    基于数据结构的共享(低级):共享指定数据结构(如数组),灵活性低。
    基于存储区的共享(高级):OS分配共享内存块,进程通过系统调用映射到各自地址空间,用户自行读写数据。
  • 特点
    • 最快的通信方式(直接内存访问,无内核中转)。
    • 需PV操作保证互斥(如防止同时写共享区)。
  • 类比:甲、乙共享一个“布袋”,甲放入物品,乙取出(需约定谁先谁后)。

3. 消息传递(Message Passing)

        核心思想:进程通过OS提供的 “发送/接收原语” 传递格式化消息(消息头+数据),隐藏通信细节。

分类

(1)直接通信 📨:

  • 发送进程直接将消息挂到接收进程的 消息缓冲队列
  • 原语:send(P, msg)(发送给进程P)、receive(Q, msg)(接收来自进程Q的消息)

(2)间接通信 📬:

  • 消息通过 中间实体(信箱) 转发,接收进程从信箱取消息。
  • 适用于网络通信(如电子邮件:发件人→邮箱服务器→收件人)。

特点

  • 灵活,支持多对多通信,无需共享内存。
  • 微内核OS的核心通信方式(如微内核与服务器进程通信)。

4. 管道通信(Pipe)

核心思想:通过 特殊共享文件(pipe文件) 实现通信,数据 先进先出(FIFO),按“生产者-消费者”模型工作。

  • 机制要求
  1. 互斥 🔒:同一时间仅一个进程读写管道。
  2. 同步 ⏳:
    1. 管道满时,写进程阻塞,直到读进程取走数据。
    2. 管道空时,读进程阻塞,直到写进程写入数据。
  3. 确定对方存在 🤝:通信双方必须都存在。
  • Linux中的管道特性
    • 固定大小缓冲区(4KB),不可无限增长。
    • 数据读取后立即释放空间(一次性操作)。
    • 单向通信:若需双向通信,需创建两个管道。
    • 子进程继承父进程的管道,常用于父子进程通信。

5. 信号(Signal)

核心思想:通过 预定义信号 通知进程发生特定事件(如异常、外部请求),是一种 异步通信机制

信号处理流程

  1. 信号发送
    1. 内核发送(如非法指令→SIGILL信号)。
    2. 进程发送(通过kill函数指定目标PID和信号序号)。
  2. 信号记录:PCB中用 位向量 记录待处理信号(1表示有信号,0表示已处理)。
  3. 信号处理
    1. 默认处理:OS预设动作(如SIGKILL终止进程)。
    2. 自定义处理:进程注册信号处理函数(覆盖默认行为)。

 

  • 特点
    • 传递简单控制信息(非大量数据),如终止、暂停进程。
    • 信号处理在 用户态 执行,处理后返回原进程继续运行。

四大通信方式对比表

方式

核心媒介

通信效率

数据量

同步互斥

典型应用

共享存储

共享内存区

最高

大量

需PV操作控制

高性能进程间通信

消息传递

格式化消息(直接/间接)

中量

OS自动实现

微内核、分布式系统

管道通信

特殊共享文件(FIFO)

中低

流式数据

内置互斥同步机制

Linux父子进程通信

信号

预定义信号(如SIGKILL)

高(通知)

少量(事件)

异步处理

异常通知(如除零错)


考试重点
  1. 共享存储的同步互斥:必须配合PV操作防止冲突(如写时加锁)。
  2. 消息传递的直接/间接通信:直接通信需指定目标进程,间接通信通过信箱中转。
  3. 管道通信的特性:单向、FIFO、固定缓冲区、需双方存在。
  4. 信号的异步性:信号处理打断进程正常执行,处理后返回原断点。

一句话总结:进程通信通过共享内存(最快)、消息传递(灵活)、管道(流式)、信号(事件通知)实现,核心是平衡效率、易用性与同步需求! ✨

http://www.lryc.cn/news/583087.html

相关文章:

  • 代码审计-springel表达式注入
  • JSP动态网页开发基础
  • 前后端集合如何传递
  • 主流大模型Agent框架 AutoGPT详解
  • thinkphp使用redis抢单实例
  • 如何将华为手机中的照片传输到电脑
  • 超越公有云:在裸金属服务器上构建低成本、高性能的静态资源服务
  • 【RK3568+PG2L50H开发板实验例程】FPGA部分 | Pango 的时钟资源——锁相环
  • 川翔云电脑:突破硬件极限,重构设计生产力范式
  • 使用DDR4控制器实现多通道数据读写(十九)
  • Amazon S3 对象存储服务深度解析:存储原理、应用场景与实战指南
  • 1.1 ARMv8/ARMv9安全扩展
  • ReactNative【实战】轮播图(含组件封装 ImageSlider)
  • 洛谷P1044 栈(学习向)
  • react16-react19都更新哪些内容?
  • clickhouse 各个引擎适用的场景
  • 【TCP/IP】2. 计算机网络与因特网体系结构
  • 手机文件夹隐藏工具,一键保护隐私
  • 数据库性能优化指南:解决ORDER BY导致的查询性能问题( SQL Server )
  • Dify 文本语意识别与自动补全工作流
  • MyBatisPlus-03-扩展功能
  • C#基础篇(11)泛型类与泛型方法详解
  • 1068.产品销售分析Ⅰ
  • huggingface 笔记: Trainer
  • 打造自己的组件库(二)CSS工程化方案
  • 跨服务sqlplus连接oracle数据库
  • 54页|PPT|新型数字政府综合解决方案:“一网 一云 一中台 N应用”平台体系 及“安全+运营”服务体系
  • 人工智能的基石:TensorFlow与PyTorch在图像识别和NLP中的应用
  • 影石(insta360)X4运动相机视频删除的恢复方法
  • 【视频观看系统】- 需求分析