Linux:进程间通信---消息队列信号量

article/2025/8/13 11:57:59

文章目录

      • 1.消息队列
        • 1.1 消息队列的原理
        • 1.2 消息队列的系统接口
      • 2. 信号量
        • 2.1 信号量的系统调用接口
      • 3. 浅谈进程间通信
        • 3.1 IPC在内核中数据结构设计
        • 3.2 共享内存的缺点
        • 3.3 理解信号量

  • 序:在上一章中,我们引出了命名管道和共享内存的概念,了解了他们的底层原理和系统接口的使用,知道了共享内存的特性等,而本章,我将继续深入System V的剩下两种进程间通信的方式:消息队列和信号量!!!

1.消息队列

System V IPC{
System V —消息队列
System V —共享内存
System V —信号量
}
本章将围绕着system V IPC中的消息队列和信号量来讲述

1.1 消息队列的原理

消息队列的原理图:
在这里插入图片描述
消息队列的
1. 必须让不同进程看到同一个队列
2. 允许不同的进程,向内核中发送带类型的数据块

文件缓冲区----管道
内存块----共享内存
队列----消息队列
这些都符合进程间通信的本质:必须让不同进程看到同一份资源!!!

1.2 消息队列的系统接口

要想使用消息队列实现进程间通信,首先就要先将消息队列创建出来。
在这里插入图片描述
第一个参数是通过ftok()函数生成的key,第二个参数是位图参数,和之前的共享内存一样,这个函数可以创建一个新的消息队列

想要修改消息队列的属性,就要调用相关的系统接口。
在这里插入图片描述

向消息队列中发送和得到数据:
在这里插入图片描述
其中,msgsnd是发送数据的系统调用接口,msgrcv是获取数据的系统调用接口

消息队列的管理结构体:
在这里插入图片描述

查看消息队列

ipcs -q 能查看消息队列信息(和ipcs -m查看共享内存一样)

删除消息队列

ipcrm -q +[msgid] 能删除消息队列

2. 信号量

2.1 信号量的系统调用接口

要想使用信号量,和消息队列,共享内存同理,也是要先去申请一个信号量。
在这里插入图片描述

和消息队列,共享内存同理,想要修改信号量的属性,就要调用相关的系统接口。
在这里插入图片描述

信号量的管理结构体:
在这里插入图片描述

3. 浅谈进程间通信

3.1 IPC在内核中数据结构设计

在操作系统中,所有IPC资源,都是整合进操作系统的IPC模块中的!
在这里插入图片描述

共享内存、消息队列和信号量这三个的管理结构体内都有一个ipc_perm的结构体,系统通过一个数组对这样的一个个结构体进行管理,从而对不同的IPC结构体进行管理!!!

通过在struct ipc_perm数组中存入对应IPC结构体中ipc_perm结构体的地址,我们就可以通过这个对这个ipc_perm进行处理为((struct semid_ds * )addr)(以信号量的IPC结构体为例),从而访问到整个IPC结构体中的任意成员!!!(其中,ipc_perm中有一个类型标志位,所以操作系统能区分指针指向的对象的类型,也就知道了这是共享内存的IPC结构体还是消息队列的IPC结构体,还是信号量的IPC结构体)

这种模式与c++中的多态有很大的相似度,对于ipc_perm结构体的复用,就像ipc_perm是基类,其他IPC结构体是子类,而实际上cpp就是基于Linux中的这些模式,而引入的多态的概念!!!

3.2 共享内存的缺点

在这里插入图片描述
当我们的A正在写入,且已经写入了一部分,就被B拿走了,导致双方发送和收到的数据不完整-----数据不一致问题,共享内存会有这样的问题,而管道则没有,因为,管道会有同步互斥的保护机制。

1. A、B看到同一份资源,共享内存,如果不加保护,就会导致数据不一致问题
2. 加锁—互斥访问—任何时刻,都只允许一个执行流访问共享资源—互斥(例如:去ATM机取钱的时候,一台ATM机一次只能有一个人取钱或存钱)
3. 共享的,任何时刻只允许一个执行流访问的资源—临界资源—(管道)一般是内存空间。
4. 访问临界资源的代码—临界区

问题一:多进程,多线程,并发打印,此时显示器上的消息是错乱的,甚至和命令行混在一起,这是为什么?

在多进程、多线程中,显示器是一种共享资源,此时,多进程、多线程往显示器打印内容就会导致数据不一致问题,要想不错乱,就要将这个共享资源变成一种临界资源。

3.3 理解信号量

信号量的本质是一把计数器,类似但不等于一个int cnt = n;是用来描述临界资源中资源数量的多少
例子:当我们看电影时,我们还没去看,但是要先买票(买票的本质就是对资源的预定机制),其中票数计数器,每卖一张票,计数器就要减一。此时放映厅的资源就少一个!!!当票数计数器到0后,资源已经被申请完了。

问题一:我们最怕什么情况?

1. 多个执行流访问同一个资源
2. n个执行流访问n-1个资源

为了解决这种问题,我们就要引入一个计数器!!!
int cnt = 15;
int number = cnt–;申请资源
cnt <= 0;资源就被申请完了,再有执行流申请也不会给了!!!

1. 申请计数器资源成功,就表示我具有了访问资源的权限了。
2. 申请了计数器资源,我当前访问我要的资源了吗?没有!申请了计数器资源是对资源的预定机制。
3. 计数器可以有效保证进入共享资源的执行流的数量
4. 每一个执行流,想访问共享资源的时候,不是直接访问,而是先申请计数器资源,就像是看电影先买电影票

程序员把这样一个计数器叫做信号量!!!

所以,当该票只有一个人能抢到,只有一个人能去看电影时。看电影期间只有一个执行流在访问临界资源—互斥!!!

我们把值只能为1,0两态的计数器叫做二元信号量—本质就是一个锁。
当计数器为1.本质问题:其实就是将临界资源不要分成很多块了,而是当做一个整体,整体申请,整体释放!!!

问题二:要访问临界资源,先要申请信号量计数器资源,但是信号量计数器的本质不也是共享资源吗???所以这个计数器也是不安全的

信号量:
a. 申请信号量,本质是对计数器减减------p操作
b. 释放资源,释放信号量,本质是对计数器进行加加操作------v操作

其中信号量的申请和释放—pv操作–是原子的(一个事,要么不做,要做就做完!)
其中要强调的是,多个信号量和信号量是不同的概念

问题二:信号量凭什么是进程间通信的一种?他也没传送数据啊,不是说他的本质就是个计数器吗?

1. 通信不仅仅是通信数据,互相协同也是
2. 要协同,本质也是通信,信号量首先要被所有的通信进程看到。

总结:

本章节带领大家从原理和系统接口的视角了解了什么是消息队列和信号量,而后对进程间通信的内核数据结构进行了探讨,了解了其中的底层逻辑,最后再次深入了解什么是信号量,希望对大家能有帮助!!!


http://www.hkcw.cn/article/YaeGOxnAes.shtml

相关文章

【HarmonyOS Next之旅】DevEco Studio使用指南(五) -> 添加/删除Module

目录 1 -> 创建新的Module 2 -> 导入Module 3 -> 配置distroFilter/distributionFilter分发规则 4 -> 删除Module 1 -> 创建新的Module Module是应用/元服务的基本功能单元&#xff0c;包含了源代码、资源文件、第三方库及应用/元服务配置文件&#xff0c;…

Linux离线部署Dify:Docker从镜像拉取打包到无网环境中部署

文章目录 前言一、在线环境操作1. 获取dify项目&#xff08;使用魔法&#xff09;2.进入项目中docker目录3.镜像拉取4.查看镜像5.镜像打包6.镜像&#xff08;项目&#xff09;上传 二、离线环境操作1.镜像导入2.启动服务3.验证容器启动状态4.访问服务 三、部分参考链接 前言 设…

34年聘用职工被强制“自愿转保” 退休手续拖延逾一年

冯爱文,一位年满61岁的河北石家庄市井陉县税务局原聘用人员,已经一年多没有办理退休手续,没有任何收入来源,全靠子女接济和回收旧衣服为生。他在办理退休手续时被县社保局要求签署“自愿”转为企业或灵活就业人员参保申请书,因拒绝签字,退休手续被拖延超过一年。在石家庄…

英国首相批法拉奇“画饼” 经济方案异想天开

英国首相基尔斯塔默于5月29日批评极右翼政党英国改革党党首奈杰尔法拉奇提出的经济方案是“异想天开”,并警告如果该政党上台执政,英国经济将遭受重创。近期英格兰部分地区举行的地方选举中,英国改革党取得显著进展,赢得超过670个地方议会席位,并在两场市长选举和一场议会…

澳媒:嘉能可将300亿澳元资产转至澳 为合并铺路

澳大利亚金融评论报网站报道,全球大宗商品巨头嘉能可通过大规模重组将超过300亿澳元的海外资产转移到一家澳大利亚子公司,此举旨在为未来与其他大宗商品巨头达成大型合并做准备。这些资产包括嘉能可在加拿大、南非和哥伦比亚的煤矿业务,在阿根廷的铜资源业务以及在南非的锰、…

成都一男子伤人后自伤颈部 警方通报 因感情纠纷引发

2025年5月30日15时许,中纱帽街8号负一层发生一起持刀伤人事件。接警后,公安机关迅速组织警力到场处置,并当场控制了犯罪嫌疑人陆某某(男,26岁)。经初步调查,陆某某因感情纠纷前往前女友胡某某(女,24岁)的工作单位,双方发生口角后,陆某某持随身携带的水果刀将胡某某…

航电系统音频模块设计要点与技术突破

一、设计要点 音频输出模块&#xff1a; 1. 高可靠性 符合航空级环境标准&#xff08;DO-160G&#xff09;&#xff0c;耐受温度、振动、湿度极端变化。 冗余设计&#xff1a;双通道输出&#xff0c;支持自动切换故障通道。 2. 抗干扰设计 电磁兼容性&#xff08;EMC&a…

优化俄罗斯方块小游戏

前言 在之前的俄罗斯方块的小游戏中进行了修改&#xff0c;但是一定还存在着一些问题&#xff0c;欢迎大家在评论区留言。 目前是进行了以下的一些优化&#xff1a; 普通方块颜色除了选用马卡龙配色还增加了一些其他好看的颜色&#xff0c;对于特殊方块的颜色使用红橙黄绿蓝…

智能物资出入库管控系统

概述 智能物资管理系统利用RFID自动识别技术&#xff0c;物联网技术、人脸识别、指纹、指静脉生物识别技术&#xff0c;应用于军械装备的管理&#xff0c;可实时准确采集军械装备编配、 储存、供应、使用等数据&#xff0c;实时掌握军械装备物资的分布及数量 状况。细化管理到…

朱雀玄武敕令三战高考 改名事件成考题

前不久,“00后”小伙“朱雀玄武敕令”申请改名为“周天紫微大帝”的新闻引起了广泛关注。他近期正准备参加今年高考,并在网上搜寻到的模拟考试卷中看到了关于自己改名一事的考题。据了解,朱雀玄武敕令出生于2001年,父母为他起名“朱云飞”。2025年1月,他改名为“朱雀玄武敕…

北京7000余社区村配儿童主任 关爱困境儿童

5月29日上午,六一国际儿童节来临之际,丰台区青塔街道蔚园社区儿童主任韩玉兰为辖区两户困境儿童家庭送来了粮、油、饮水杯、雨伞等慰问品。北京市7000多个社区(村)每个社区(村)至少配置了1名儿童主任,他们通过入户探访、协助申请保障、解释福利政策等方式,为困境儿童家…

涨薪技术|0到1学会性能测试第90课-性能测试构建

至此关于系统资源监控、apache监控调优、Tomcat监控调优、JVM调优、Mysql调优、前端监控调优、接口性能监控调优的知识已分享完,今天开始学习性能测试流程知识。后续文章都会系统分享干货,带大家从0到1学会性能测试。 性能测试设计完成后,接下来需要将设计的策略变成现实,…

李嫣高中毕业 长发披肩神似王菲 颜值抢镜

近日,王菲与李亚鹏的女儿李嫣在2025年5月底从伦敦的高中毕业。她穿着毕业服与同学们合影,长发披肩,颜值出众。网友们纷纷表示,李嫣神似母亲王菲,在人群中格外引人注目。此前,李嫣经历了四次唇腭裂修复手术,面部状态已接近自然。责任编辑:zhangxiaohua

技术-工程-管用养修保-智能硬件-智能软件五维黄金序位模型

融智学工程技术体系&#xff1a;五维协同架构 基于邹晓辉教授的框架&#xff0c;工程技术体系重构为&#xff1a;技术-工程-管用养修保-智能硬件-智能软件五维黄金序位模型&#xff1a; math \mathbb{E}_{\text{技}} \underbrace{\prod_{\text{Dis}} \text{TechnoCore}}_{\…

中国驻美大使:大院铁幕只会自我孤立 封锁难阻科技创新

2025年5月28日,中国驻美国大使馆举办“我的中国相册——我的中国足迹”影片首映会暨现代化的中国体验活动。谢锋大使和夫人王丹、邱文星公使以及美国各界人士共200余人出席了此次活动。谢锋在致辞中表示,中国走出了一条致力于团结奋斗、共同富裕、全面发展、持续发展与和平发…

清华大学发布李兆杰教授讣告 沉痛悼念著名国际法学者

5月29日晚,清华大学法学院发布讣告,悼念李兆杰教授。李兆杰教授于2025年5月29日在北京因病逝世,享年70岁。李兆杰教授是汉族,籍贯山东省东明县,1955年出生于吉林省长春市。他曾在北京大学国际法研究所和清华大学法学院任教,是改革开放以来中国新一代国际法学者中的领军人…

端午游屈原故里探访三峡秘境 寻味民俗之旅

每年端午节,人们忙着吃粽子、赛龙舟,但屈原故里秭归却藏着许多不为人知的传说。今天,让我们一起踏上这条神秘的文旅路线,探索那些课本里没有的故事,感受屈原文化的独特魅力。文旅路线从屈原故里纪念馆开始。这里不仅展示了屈原的生平事迹,还有许多珍贵文物。走进馆内,仿…

15.5 【TS基础项目】构建随机密码生成器

在现代 Web 应用中&#xff0c;生成强大而安全的密码对于保护用户账户免受未经授权访问至关重要。使用 TypeScript 构建一个随机密码生成器&#xff0c;可以通过混合字母、数字和特殊字符来创建不可预测、复杂的密码&#xff0c;从而显著提升安全性。 我们要构建什么&#xff…

上海一公交站椅子矮出新高度 乘客叫苦不迭

上海街头的许多公交车站都设有候车座椅,这些座椅成为老人们等车时的好帮手。然而,并不是每个公交站点都能让乘客感到舒心。家住共青森林公园附近的市民反映,该公园正门的公交102路、124路和147路站点的座椅高度异常低矮,甚至比幼儿园的板凳还要矮,导致乘客坐着不舒服,蹲下…

Angular应用中的ng-bootstrap-loading:优雅的页面加载蒙版实现

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;为了在Angular应用中增强用户体验&#xff0c;在数据加载时显示加载蒙版是必不可少的。"ng-bootstrap-loading"是一个基于Bootstrap框架的库&#xff0c;专门用于实现页面加载效果&#xff0c;尤其适…