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

Linux之【进程间通信(IPC)】-总结篇

Linux之【进程间通信(IPC)】-总结篇

  • 管道
  • System V共享内存
  • System V消息队列
  • System V信号量
  • IPC资源的管理方式

往期文章
1.进程间通信之管道
2.进程间通信之System V共享内存

管道

  • 进程之间具有独立性,拥有自己的虚拟地址空间,因此无法通过各自的虚拟地址进行通信(A的地址经过B的页表映射不一定映射在什么位置)
  • 除了内核中的缓冲区之外还有文件以及网络通信的方式可以实现进程间通信
  • 管道的本质是内核中的缓冲区,通过内核缓冲区实现通信,命名管道的文件虽然可见于文件系统,但是只是标识符,并非通信介质

System V共享内存

  • 共享内存的本质就是开辟一块物理内存,让多个进程映射同一块物理内存到自己的地址空间进行访问,实现数据共享的。

  • 共享内存的操作是非进程安全的,多个进程同时对共享内存读写是有可能会造成数据的交叉写入或读取,造成数据混乱

  • 共享内存的删除操作并非直接删除,而是拒绝后续映射,只有在当前映射链接数为0时,表示没有进程访问了,才会真正被删除

  • 共享内存生命周期随内核,只要不删除,就一直存在于内核中,除非重启系统(当然这里指的是非手动操作,可以手动删除)

System V消息队列

消息队列是OS提供的内核级队列,消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法,每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值
在这里插入图片描述
消息队列与共享内存不同之处在于:
共享内存需要关联,消息队列使用

//发送
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
//接收
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);
msqid:同shmid
msgp:柔性数组地址
msgsz:数据大小
msgtyp:标识符,表示要读取写入那个类型节点
msgflag:同shmflag作用

来收发消息

System V信号量

参考linux【多线程】基于环形队列(RingQueue)的生产消费模型

IPC资源的管理方式

除管道外,其余三种,虽然内部的属性差别很大,但是维护它们的数据结构的第一个成员结构是一样的,都是ipc_perm类型的成员变量,都可以通过key来标识唯一性
1)三种ipc资源数据结构的首地址元素相同,用一个struct ipc_perm* perms[]指针数组进行管理。
2)访问时只需(struct shmid_ds*)perms[0] 对指针强转就可以得到每个共享内存的属性,消息队列,信号量同理。
3)这是C语言模拟实现的一种多态行为。以【struct ipc_perm 】为基类
在这里插入图片描述

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

相关文章:

  • C++QT教程3——手册4.11.1自带教程(笔记)——创建一个基于Qt Widget的应用程序
  • 手机商城网站的分析与设计(论文+源码)_kaic
  • vue2 封装 webSocket 开箱即用
  • 使用fopen等标准C库来操作文件
  • Spring-Cloud-Loadblancer详细分析_1
  • 键盘键码keyCode对照表
  • jupyter切换conda虚拟环境
  • 【数据结构•堆】经典问题:k路归并
  • VUE3 动态路由
  • CentOS软件包管理rpm、yum
  • 【VSCode】报错:出现段错误解决办法 (Segmentation fault)
  • Linux Centos 8 用户管理之重置密码
  • C语言快速回顾(三)
  • 【Apollo】Apollo-ros版本架构学习与源码分析
  • 【Express.js】集成RabbitMQ
  • UI美工设计岗位的基本职责概述(合集)
  • 最强自动化测试框架Playwright(23)-API测试
  • k8s 自身原理 4
  • ZLMediaKit(webrtc)在linux上(CentOS7)部署与启动
  • 汽车基础软件新「战争」:群雄混战,谁在抢跑?
  • 阿里云预装LAMP应用导致MySQL不显示访问密码如何解决
  • SQL 自动清除7天前数据前收缩数据库
  • LangChain-ChatGLM在WIndows10下的部署
  • Telerik UI for ASP.NET Core Crack
  • 【TypeScript】中关于 { 声明合并 } 的使用及注意事项
  • Day 43
  • 服务器安全需要注意的几个方面?
  • Mysql数据库第十三课-----------sql语句的拔高3--------直冲云霄
  • 计算机网络-物理层(一)物理层的概念与传输媒体
  • 差分升级在物联网水表上的实现与应用(学习)