操作系统(4)第二章- 进程通信

进程通信(IPC,Inter-Process Communication)是操作系统中让独立进程交换数据、同步协作的核心机制,用于打破进程间内存隔离,实现多进程协同。

一、核心目标

  • 数据传输:在进程间传递字节流、结构化数据或文件数据。
  • 同步协作:协调执行顺序,避免资源竞争。
  • 资源共享:共享内存、文件等,减少数据拷贝。

二、主流通信方式(原理 + 特点 + 场景)

1. 管道(Pipe)
  • 匿名管道 :内核缓冲区实现,半双工、单向 ,仅用于父子 / 兄弟进程 ,遵循 FIFO。
    • 优点:简单、系统原生、开销小。
    • 缺点:单向、仅亲缘进程、缓冲区有限。
    • 场景:Shell 命令串联(ls | grep)。
  • 命名管道(FIFO) :以文件形式存在于文件系统,无亲缘进程也可通信 ,仍单向、FIFO。
    • 优点:突破亲缘限制、持久化存在。
    • 缺点:单向、需处理阻塞。
    • 场景: unrelated 进程间简单数据传递。
2. 消息队列(Message Queue)
  • 原理:内核维护消息链表,消息含类型 + 数据,可按类型过滤,支持异步。
  • 优点:结构化消息、异步、支持优先级、多进程读写。
  • 缺点:两次拷贝、消息大小受限、需手动清理。
  • 场景:订单 - 支付、任务分发等结构化消息场景。
3. 共享内存(Shared Memory)
  • 原理:将同一块物理内存映射到多个进程地址空间,零拷贝、直接读写
  • 优点:性能最高、适合大数据量、低延迟。
  • 缺点:无内置同步,需搭配信号量 / 互斥锁防竞争。
  • 场景:实时图像处理、高速数据交换。
4. 信号量(Semaphore)
  • 原理:计数器 + 等待队列,用于同步与互斥,控制临界区访问。
  • 优点:解决竞态、支持多进程同步。
  • 缺点:仅用于同步,不传输数据、编程复杂。
  • 场景:配合共享内存、资源池访问控制。
5. 信号(Signal)
  • 原理:软件中断,内核向进程发送信号(如SIGINTSIGKILL),进程注册处理函数。
  • 优点:轻量、异步、系统原生、开销极低。
  • 缺点:仅传信号类型、无数据、不可靠。
  • 场景:进程终止、异常通知、简单控制。
6. 套接字(Socket)
  • 原理:通用 IPC,支持本地(Unix Domain Socket)与跨网络(TCP/UDP) ,全双工。
    • TCP:面向连接、可靠、字节流。
    • UDP:无连接、不可靠、数据报、快。
  • 优点:跨主机、双向、通用、成熟生态。
  • 缺点:本地通信有两次拷贝、网络有额外开销。
  • 场景:Web 服务、客户端 - 服务器、分布式系统。

三、选择建议

  • 追求极致性能、大数据 :选共享内存 + 信号量
  • 本地结构化、异步消息 :选消息队列
  • 简单父子进程数据流 :选匿名管道
  • 无亲缘进程简单通信 :选命名管道
  • 跨网络 / 通用场景 :选Socket(TCP/UDP)
  • 仅需通知 / 控制 :选信号
相关推荐
拾光Ծ4 小时前
【Linux系统编程】深入理解命名管道(Named Pipe):从原理到实战的完整指南
linux·c语言·linux系统编程·进程间通信·ipc·命名管道
ShineWinsu14 小时前
对于Linux:动静态库的制作与原理的解析—下
linux·运维·服务器·进程·链接·虚拟地址空间·
NE_STOP18 小时前
Linux进阶--系统备份、恢复与可视化管理工具webmin、bt宝塔
操作系统
NE_STOP1 天前
Linux进阶--日志管理
操作系统
NE_STOP2 天前
Linux--Shell编程入门
操作系统
今天又在写代码3 天前
操作系统v2
操作系统
wfsm3 天前
原码,反码,补码
操作系统
波特率1152004 天前
FreeRTOS当中的Mail Queue使用教程(CMSIS_v1)
单片机·操作系统·freertos
艾莉丝努力练剑5 天前
【Linux线程】Linux系统多线程(七):<线程同步与互斥>线程同步(下)
java·linux·运维·服务器·c++·学习·操作系统
v132665623686 天前
博通集成:BK7259 wifi6音视频芯片 200w视频流IPC 超低功耗
物联网·音视频·低功耗·ipc