(1)IPC简介

article/2025/10/7 16:29:32

Unix/Linux IPC简介

    • 简述
      • 1. 消息传递演变过程
      • 2. 同步形式演变
    • 进程、线程与信息共享
    • IPC对象的持续性
    • 名字空间
    • fork、exec和exit对IPC对象的影响
    • 总结
    • 参考资料

简述

IPC是进程间通信(interprocess communication)的简称。用来描述运行在一个操作系统之上的不同进程间各种消息传递的方式。
IPC在使用过程中需要同步参与一起运行。

1. 消息传递演变过程

  • 管道(pipe):只能在具有共同祖先(指父子进程关系)的进程间使用,有名管道fifo可以在任意进程间使用
  • System V消息队列:可在同一主机上有亲缘关系或无亲缘关系的进程间使用。
  • Posix消息队列:可在同一主机上有亲缘关系或无亲缘关系的进程间使用。
  • 远程过程调用:

2. 同步形式演变

  • 使用文件系统特性同步
  • 记录上锁(record-locking)
  • System V信号量
  • Posix信号量和Posix共享内存区
  • 互斥锁(mutex)和条件变量(condition variable):主要用于线程间同步,也能提供进程间的同步
  • 读写锁(read-write-lock)

进程、线程与信息共享

unix/linux间信息共享的三种方式
在这里插入图片描述

  1. 两个进程共享存储在文件系统中的某个文件上的信息。访问该文件,每个进程都要经过内核(如read,write,lseek等)。当共享信息的文件内容需要更新时,需要使用同步技术对文件内容进行读写保护。
    在这里插入图片描述
  2. 两个进程共享驻留在内核中的信息。管道、System V消息队列和System V信号量使用该种方式。访问共享信息的每次操作都涉及对内核的一次系统调用。
    在这里插入图片描述
  3. 两个进程有一个双方都能访问的共享内存区。每个进程设置好该共享内存区,就能在不涉及内核而访问其中的数据。共享内存区的进程需要使用同步技术。

IPC对象的持续性

IPC对象的持续性:描述定义的某类IPC对象能一直存在的时间长度(能存在多长时间)
在这里插入图片描述

  1. 随进程持续的IPC:IPC对象一直存在到打开着该对象的最后一个进程关闭该对象为止。管道和FIFO属于该种方式。
  2. 随内核持续的IPC:IPC对象一直存在到内核重新自举或显示删除该对象为止。SystemV的消息队列、信号量和共享内存区属于该类对象。Posix的消息队列、信号量和共享内存必须至少是随内核持续的,但也可以是随文件系统持续的,具体取决于实现。
  3. 随文件系统持续的IPC: IPC对象一直存在到显示删除该对象为止。即使内核重新自举了,该对象还是保持其值。Posix消息队列、信号量和共享内存区如果使用映射文件实现,那么就属于该类对象。

名字空间

IPC类型用户打开或创建IPC的名字空间IPC打开后的标识符
管道
FIFO
(没有名字)
路径名
描述符
描述符
Posix互斥锁
Posix条件变量
Posix读写锁
fcntl记录上锁
(没有名字)
(没有名字)
(没有名字)
路径名
pthread_mutex_t指针
pthread_cond_t指针
pthread_rwlock_t指针
描述符
Posix消息队列
Posix有名信号量
Posix基于内存的信号量
Posix共享内存区
Posix IPC名字
Posix IPC名字
(没有名字)
Posix IPC名字
mqd_t值
sem_t指针
sem_t指针
描述符
SystemV消息队列
SystemV信号量
SystemV共享内存区
key_t值
key_t值
key_t值
SystemV IPC标识符
SystemV IPC标识符
SystemV IPC标识符

Sun RPC
路径名
程序/版本
描述符
RPC句柄
TCP套接字
UDP套接字
Unix域套接字
IP地址与TCP端口
IP地址与UDP端口
路径名
描述符
描述符
描述符

fork、exec和exit对IPC对象的影响

(略)

总结

IPC的4个主要领域

  1. 消息传递(管道,fifo,消息队列)
  2. 同步(互斥锁,条件变量,读写锁,信号量)
  3. 共享内存区(匿名共享内存区,有名共享内存区)
  4. 过程调用(Solaris门、Sun RPC)

使用IPC应用场景:

  1. 单进程间各个线程间的IPC
  2. 多个进程间的IPC

选择使用的IPC类型时,必须清楚相应IPC对象的持续性
最后根据各类IPC的名字空间,结合实际应用场景,选择合适的IPC实现方式。

参考资料

《UNIX网络编程-卷2-进程间通信》


http://chatgpt.dhexx.cn/article/WGQI7dYP.shtml

相关文章

Linux——信号量(定义、示例、信号量接口、ipcs命令)

目录 1、信号量 2、信号量举例 3、信号量的接口 4、通过控制进程来完成打印机操作 5、ipcs命令 1、信号量 (1)定义:​​​​​​ ​信号量是一个特殊的变量,一般取正数值。它的值代表允许访问的资源数目,获取资源时&#xff…

什么是IPC?

目录 IPC的简介: IPC的主要功能模块: IPC信号处理过程: IPC硬件构成: IPC的简介: IPC:是IP Camera的简称。它是在前一代模拟摄像机的基础上,集成了编码模块后的摄像机。它和模拟摄像机的区别…

IPC是什么?

IPC是什么? ipc是IP Camera的缩写词,IP是网际协议,Camera是照相机、摄影机,IP Camera顾名思义就是网络摄像机,它是一种由传统摄像机与网络技术结合所产生的新一代摄像机。 网络摄像机又叫IP CAMERA(简称IP…

linux ipcs命令详解

进程间通信概述 进程间通信有如下的目的:1、数据传输,一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M之间;2、共享数据,多个进程想要操作共享数据,一个进程对数据的修改&#xff0c…

ipcs 命令

在unix/linux下,查看共享内存、信号量,队列等共享信息 相应的命令是ipcs [-m|-s|-q] -m列出共享内存,-s列出共享信号量,-q列出共享队列 清除命令是 ipcrm [-m|-s|-q] $id -m 删除共享内存,-s删除共享信号量&#xff0…

Linux的IPC命令

进程间通信概述 进程间通信有如下的目的:1、数据传输,一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M之间;2、共享数据,多个进程想要操作共享数据,一个进程对数据的修改,…

Linux--ipcs、共享内存、共享接口简介

1.ipcs命令 ipcs -s: 只查看信号量 ; ipcs -m: 只查看共享内存 ; ipcs -q: 只查看消息队列 ; 删除信号量 : ipcrm -s 编号 ; 2.共享内存 共享内存为多个进程之间共享和传递数据提供了一种有效的方式。共享内存是先在物 理内存上申请一块空间,多个进程可以将其…

Linux系统中ipcs命令的使用

ipcs命令的学习 多进程间通信常用的技术手段包括共享内存、消息队列、信号量等等。 ipcs 命令的用途主要用于报告进程间通信设施状态。 ①查看帮助: ipcs -help ②查看所有资源(设施): ipcs -a 或 ipcs ③三类资源单独查看方式 …

C++的access()函数

文章目录 函数功能头文件函数原型参数说明示例access函数详解 函数功能 确定文件是否存在或者判断读写执行权限;确定文件夹是否存在即,检查某个文件的存取方式,比如说是只读方式、只写方式等。如果指定的存取方式有效,则函数返回…

access数据库

经过连续几天的学习,初步了解access数据库。以下是知识点的总结,对应刚刚学习的人会很有帮助。 ADO.NET是数据的访问架构 它主要包括 connection,command,datareader,dataadapter,dataset,datatable等六个对象 一、connection 作用:连接数…

Access数据库对象包括哪六个?Access与 Excel 最重要的区别是什么?

我们知道微软有两款经典的数据处理软件:Excel和Access。 由于在运行大量数据时,Excel会卡得让你怀疑人生,Access却轻松运转。所以很多人说他俩的时候,大都总结: “小规模数据用Excel,大规模数据用Access。…

access/_access函数

Linux下 1&#xff0c;头文件&#xff1a; #include <unistd.h>2&#xff0c;函数的声明&#xff1a; int access(const char *pathname, int mode);3&#xff0c;函数的作用&#xff1a; access函数用来判断指定的文件或目录是否存在(F_OK)&#xff0c;已存在的文件或…

Linux access函数讲解

函数&#xff1a; #include<unistd.h> int access(const char* pathname, int mode); 参数介绍&#xff1a; pathname 是文件的路径名文件名 mode&#xff1a;指定access的作用&#xff0c;取值如下 F_OK 值为0&#xff0c;判断文件是否存在X_OK 值为1&#xff0c;判…

C语言中access/_access函数的使用

在Linux下&#xff0c;access函数的声明在<unistd.h>文件中&#xff0c;声明如下&#xff1a; int access(const char *pathname, int mode); access函数用来判断指定的文件或目录是否存在(F_OK)&#xff0c;已存在的文件或目录是否有可读(R_OK)、可写(W_OK)、可执行(X…

C语言:access函数的使用

C语言&#xff1a;access函数的使用 一、access()函数用来判断用户是否具有访问某个文件的权限(或判断某个文件是否存在). 二、需要包含#include<unistd.h> 三、参数和返回值 int access(const char *pathname,int mode) 参数: pathname:表示要测试的文件…

gremlin

g.V().hasLabel(Person).outE(Knows) inE()

复杂Gremlin查询的调试方法

复杂Gremlin查询的调试方法 摘要: Gremlin是图数据库查询使用最普遍的基础查询语言。Gremlin的图灵完备性&#xff0c;使其能够编写非常复杂的查询语句。对于复杂的问题&#xff0c;我们该如何编写一个复杂的查询&#xff1f;以及我们该如何理解已有的复杂查询&#xff1f;本文…

Gremlin基本使用

Gremlin简介 Gremlin是Apache TinkerPop 框架下的图遍历语言。Gremlin是一种函数式数据流语言&#xff0c;可以使得用户使用简洁的方式表述复杂的属性图&#xff08;property graph&#xff09;的遍历或查询。每个Gremlin遍历由一系列步骤&#xff08;可能存在嵌套&#xff09…

Gremlin语法学习笔记

hugegraph查询使用Gremlin语法&#xff0c;打开 hugegraph-studio http://10.0.0.50:18088&#xff0c;更详细的方法参考 http://kelvinlawrence.net/book/Gremlin-Graph-Guide.html#fuzzyregs 导入数据&#xff0c;jar包参考 https://git.gtapp.xyz/ml/graph-user&#xff0c…

从零开始Gremlin学习

从零开始Gremlin学习 创建schema和图 以下面这个ThinkerPop关系图为例 在建图之前&#xff0c;首先需要创建schema&#xff0c;创建的schema有属性、节点、和边缘&#xff0c;正常情况下是按照属性->节点->边缘&#xff0c;因为在定义及节点label的时候需要有属性&…