『 Linux 』 进程间通信概述


什么是进程间通信

请添加图片描述

进程间通信(IPC)指的是在操作系统重,允许两个或者多个进程之间传递信息或者数据的机制;

进程是操作系统重独立运行的实体,即进程间具有独立性,存在自己的地址空间;

因此进程间默认无法直接访问彼此的内存空间,其通信成本会较高;

IPC提供一种方式使得互相独立的进程能够交换数据并进行通信和数据共享;


为什么要有进程间通信

请添加图片描述

  • 基本数据交换

    进程间通信允许不同的进程交换基本的数据信息,例如用户输入,计算结果等;

  • 发送命令

    通过IPC,一个进程可以向另一个进程发送命令或请求知道其执行特定操作;

  • 某种协同

    多个进程通过IPC机制协同工作可以完成独立进程无法完成的复杂工作;

  • 数据传输

    IPC提供了一种机制使得进程可以安全有效的进行数据传输;

  • 资源共享

    多个进程可能需要访问和修改同一份资源;

  • 通知事件

    进程间通信允许进程相互通知重要的事件发生,如系统错误,任务完成等;

  • 进程控制

    IPC机制可以用于控制其他进程的行为,例如启动或停止某个进程或者调整其执行的优先级;


如何进行进程间通信

请添加图片描述

  • 进程间通信的本质

    进程间通信的本质是必须让不同的进程看到同一份"资源";

    这里的"资源"通常指数据或者信息,在操作系统中,数据和信息的存储和交换的媒介一般是内存空间;

    而这个内存空间不一定是直接的物理内存访问;

    IPC机制通过多种形式使得进程间可以共享和传递信息,这包括但不限于直接的内存共享;

进程间通信的内存空间的提供者必须是操作系统而不能是进程,原因主要为以下几点:

  • 安全性

    进程通常在操作系统分配的隔离环境中运行,可以防止一个进程访问或修改另一个进程的代码数据;

  • 隔离性

    操作系统为每个进程提供了一个独立的地址空间,以保证进程间的独立性和稳定性;

    如果进程间通信的内存空间由进程自身提供则可能打破这种隔离性;

  • 资源管理

    操作系统负责管理所有的软硬件资源,拥有全局的视角和控制权;

    而单个进程并不具备这种特性,操作系统数据进程的上级所以操作系统能观察到所有的进程的当前状态但进程无法观察到操作系统的状态;

  • 独立性

    进程间是相互独立的,每个进程存在自己独有的进程地址空间;

    如果这块公共区域是由进程自行提供,那么将会破坏进程间的独立性;

操作系统所提供的资源的媒介(空间)可以被视作一种"第三方空间";

而这种第三方空间是由操作系统提供的,当进程要对这个"第三方空间"进行写入或是读取数据时本质上是在访问操作系统;

进程为用户层的结构,为了保证安全,用户无法直接访问操作系统,即进程无法直接访问操作系统;

故操作系统必须提供一种机制即系统调用(System Calls)来允许用户层的进程与"第三方空间"中的资源进行安全互动;

即进程对这个媒介的 创建 - 使用(一般情况下) - 释放 都是利用系统调用接口;

  • 资源的管理

    当存在大量进程且进程与进程间都需要通信时将会存在大量这样的 “第三方空间” ;

    操作系统将会对这些资源进行管理 —— “先描述,再组织” ;

在操作系统中进程间通信(IPC)被作为一个独立的通信模块并挂接在文件系统当中;

  • 进程间通信的标准

    进程间通信作为一种模块同样也存在标准;

    常用的标准有:

    • POSIX IPC标准
    • System V IPC标准
    • 文件系统IPC标准

操作系统提供了多种IPC机制,包括但不限于:

  • 管道(Pipes)

    允许一个进程与另一个进程直接通信,数据流是单向的;

  • 消息队列(Message Queues)

    允许不同的进程发送和接收消息,是一种异步通信方式;

  • 信号(Signals)

    一种用于通知接收进程某个事件已经发生的简单方式;

  • 共享内存(Shared Memory)

    通过映射一段能被多个进程访问的内存区域以时间线进程间的数据共享;

  • 套字节(Sockets)

    主要用于不同主机上的进程间通信,支持TCP/IP等网络协议;

  • 24
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
《深入理解Linux内核》是一本经典的Linux内核书籍,由Daniel P. Bovet和Marco Cesati合著。该书深入剖析了Linux内核的各个方面,包括进程管理、内存管理、文件系统、网络协议栈等等,是学习Linux内核的重要参考资料。该书的目录包括: 第1部分 内核基础 第1章 操作系统概述 第2章 Linux内核概述 第3章 进程管理 第4章 进程通信 第5章 系统调用 第6章 中断和异常 第7章 内核数据结构 第8章 内存管理 第2部分 进程管理 第9章 进程描述符 第10章 调度 第11章 进程地址空 第12章 进程创建 第13章 进程结束 第3部分 进程通信 第14章 信号 第15章 管道 第16章 FIFO和消息队列 第17章 信号量 第18章 共享内存 第19章 内存映射 第4部分 系统调用 第20章 系统调用实现 第21章 标准C库 第5部分 中断和异常 第22章 中断处理 第23章 硬件设备 第24章 字符驱动程序 第25章 块驱动程序 第26章 网络设备驱动程序 第6部分 内存管理 第27章 物理内存管理 第28章 虚拟内存管理 第29章 内存映射 第7部分 文件系统 第30章 文件系统概述 第31章 Linux虚拟文件系统(VFS) 第32章 文件系统实现 第33章 文件系统mount和unmount 第8部分 网络 第34章 网络概述 第35章 套接字接口 第36章 TCP/IP协议栈 第37章 名字和地址解析 第38章 套接字实现 第39章 TCP/IP实现 第40章 网络设备驱动程序 该书内容详实,通俗易懂,适合有一定编程经验的读者学习。如果您想深入了解Linux内核,这本书是必不可少的参考资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dio夹心小面包

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值