【Linux初阶】system V消息队列 + system V信号量

news2024/10/7 11:31:50

文章目录

  • 一、system V消息队列(了解)
  • 二、system V信号量(了解)
    • 1.信号量是什么
    • 2.临界资源和临界区
    • 3.互斥
    • 4.为什么要信号量
  • 三、IPC资源的组织方式
  • 结语


一、system V消息队列(了解)

  • 消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法。
  • 每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值。
  • 特性方面 :IPC(处理进程间通信)资源必须删除,否则不会自动清除,除非重启,所以system V IPC资源的生命周期随内核

有兴趣的伙伴可以自行学习对应的接口


二、system V信号量(了解)

1.信号量是什么

信号量本质是一个计数器,通常用来表示公共资源中,资源量多少的问题。

公共资源:可以被多个进程同时访问的资源。

访问没有保护的公共资源,会产生数据不一致问题。比如,一段数据必须要完整读取才有意义,但是在写端进程还没写完的情况下,读端进程就把数据读走了。

———— 我是一条知识分割线 ————

2.临界资源和临界区

那些被保护起来的公共资源,我们称之为 临界资源。在我们的计算机中虽然有很多临界资源,但是大部分还是独立资源(非公共)。

资源(内存、文件、网络等)是要被进程使用的,它一定会有对应的代码来访问这部分的临界资源,这部分可以访问资源的代码,我们称之为 临界区。当然,有临界区,就肯定有非临界区,即与资源访问无关联的代码。

———— 我是一条知识分割线 ————

3.互斥

某个共享资源在一段时间之内只允许一个进程访问,不允许其他进程访问,这种进程之间的关系我们称之为 互斥。在编程中,我们通常需要 来实现。

原子性要么不做,要做就做完。举一个例子,银行转账,要么成功,要么失败,不允许出现转账的钱不翼而飞的情况。

———— 我是一条知识分割线 ————

4.为什么要信号量

共享资源分两种:一种是整体使用的共享资源,另一种是将一个整体资源划分为一个个子资源给进程使用。

那么问题来了,我们如何知道这些资源的一个个子资源有没有被占用呢?

此时,信号量可以帮助我们解决这个问题。在我们想要某种资源时,信号量可以帮助我们做 “预定”我们可以用信号量的大小来帮助我们确认这个整体资源的使用情况

举一个简单的例子,一个整体资源有 20个子资源,我们可以信号量 sem=20,当有一个进程需要访问其中一个子资源时,sem–(预定资源),进程访问,访问完成,sem++(释放资源)。这样,我们就通过 sem确定了整体资源的使用情况。

在这里插入图片描述
我们称预定资源的操作称为 P操作,释放资源的操作称为 V操作,它们加起来就是一个很重要的基础操作 PV操作

当一个整体资源的信号量初始值为 1,就证明这个资源只允许一个进程访问,这种信号量我们称之为 二元信号量。二元信号量标识的资源,具有互斥功能

在上文中我们提及了原子性的知识,根据上图中的文字推导,我们可以知道信号量也是公共资源(因为它要让所有要申请资源的进程看到), PV操作具有原子性

有兴趣的伙伴可以自行学习对应的接口


三、IPC资源的组织方式

system V共享内存、system V消息队列 、 system V信号量,它们都是system V标准的额进程间通信。

因此,它们的接口相似度非常高,操作系统的设计者在此基础上,为了方便同一管理它们的资源,设计了一种IPC资源的组织方式,那就是指针数组。

接口查看指令如下:

[root@VM-12-11-centos ~]$ man shmctl	#共享内存
[root@VM-12-11-centos ~]$ man msgctl	#消息队列
[root@VM-12-11-centos ~]$ man semctl	#信号量

将每个system V标准的通信方式的结构体的指针放到指针数组中,让用户可以通过 类型强转 + 下标 + (./->其它属性)的方法具体访问某个特定通信方式的特定方法。

图解如下:

在这里插入图片描述


结语

🌹🌹 system V消息队列 + system V信号量 的知识大概就讲到这里啦,博主后续会继续更新更多C++ 和 Linux的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!💪💪

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/878407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

玩转IndexedDB,比localStorage、cookie还要强大的网页端本地缓存

随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据。 现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的大小不超过 4K…

回归预测 | MATLAB实现基于SAE堆叠自编辑器多输入单输出回归预测

回归预测 | MATLAB实现基于SAE堆叠自编辑器多输入单输出回归预测 目录 回归预测 | MATLAB实现基于SAE堆叠自编辑器多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于SAE堆叠自编辑器多输入单输出回归预测; 2.运行环…

找到链表的第一个入环节点

1.题目 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统…

会玩这 10 个 Linux 命令,一定是个有趣的 IT 男!

Linux当中有很多比较有趣的命令,可以动手看看,很简单的。 1.rev命令 一行接一行地颠倒所输入的字符串。 运行: $rev如输入:shiyanlou shiyanlou2.asciiview命令 1.先安装aview $sudo apt-get install aview2.再安装imagema…

zabbix案例--zabbix监控Tomcat

目录 一、 部署tomcat 二、配置zabbix-java-gateway 三、配置zabbix-server 四、配置zabbix-web界面 一、 部署tomcat tar xf apache-tomcat-8.5.16.tar.gz -C /usr/local/ ln -sv /usr/local/apache-tomcat-8.5.16/ /usr/local/tomcat cd /usr/local/tomcat/bin开启JMX…

如何解决docker中出现的“bash: vim: command not found”

目录 问题描述: 问题解决: 问题描述: 在docker中,想要执行vim编辑文件,弹出“docker bash: vim: command not found“(如下图),请问该如何解决? 问题解决: …

使用维纳过滤器消除驾驶舱噪音(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

管理类联考——逻辑——论证逻辑——汇总篇——因果推理

因果推理的逻辑方法(穆勒五法) 确定现象之间因果关系的方法有五种: 求同法、求异法、求同求异并用法、共变法、剩余法。这五种方法统称为穆勒五法。用穆勒五法确定的因果关系具有或然性。 PS:求同球童;求异球衣,求同…

设计模式——建造者(Builder)模式

建造者模式(Builder Pattern),又叫生成器模式,是一种对象构建模式 它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现的对象。建造者模式是一步一步创建一个复杂的对象,…

YARN框架和其工作原理流程介绍

目录 一、YARN简介 二、YARN的由来 三、YARN的基本设计思想 四、YARN 的基本架构 4.1 基本架构图 4.2 基本组件介绍 4.2.1 ResourceManager 4.2.1.1 任务调度器(Resource Scheduler) 4.2.1.2 应用程序管理器(Applications Manager) 4.2.1.3 其他…

官方已经宣布了,2023年下半年软考各科实行机考

软考办官方通知 我认为,第一次参加软考机考的考生会有好处,因为新政策在第一年执行时一般不会太难。我非常好奇如何在论文中画图。 下面,我将从一个曾参加软考高级水平考试的人的角度,讲述机考的优缺点,并分享我自己的…

xxljob搭建(内网穿透)

调度中心搭建 先从码云或者github上将项目拷贝到本地,选择最新的release分支拷贝下来的xxl-job-admin模块就是调度中心,我们需要做的有两点,第一点将doc/db/tables_xxl_job.sql执行,第二点修改xxl-job-admin的application.proper…

恒运资本:算力股爆发,地产股全线下挫,海外机构调研股出炉

60股近期获海外组织调研,医疗龙头最受组织重视。 今日早盘三大指数全线低开,延续调整走势,上证指数跌1.01%,深证成指跌1.35%,创业板指跌1.6%。AI概念股逆市走强,算力、数据要素等方向领涨,朗威股…

从小白到大神之路之学习运维第79天-------Kubernetes网络组件详解

第四阶段 时 间:2023年8月14日 参加人:全班人员 内 容: Kubernetes网络组件详解 目录 一、Kubernetes网络组件 (一)Flannel网络组件 (二)Calico 网络插件 (1)…

U盘数据如何保密?U盘数据加密软件合集

当我们将重要数据存放在U盘中时,必须要保障U盘的安全,以避免数据泄露。那么,U盘数据该如何保密呢?下面我们就来盘点一下那些好用的U盘数据保护方法。 U盘写保护 起初U盘写保护是专门为U盘防病毒而设计的,写保护后会将…

mysql滑动窗口案例

获取学科最高分 SELECT DISTINCT name,subject,MAX(score) OVER (PARTITION by subject) as 此学科最高分数 from scores;获取学科的报名人数 select DISTINCT subject,count(name) over (partition by subject) as 报名此学科的人数 from scores; 求学科总分 SELECT DISTI…

【C++】多态的概念和简单介绍、虚函数、虚函数重写、多态构成的条件、重载、重写、重定义

文章目录 多态1.多态的概念和介绍2.虚函数2.1final2.2override 3.虚函数的重写3.1协变3.2析构函数的重写 4.多态构成的条件5.重载、重写、重定义...... 多态 1.多态的概念和介绍 C中的多态是一种面向对象编程的特性,它允许不同的对象对同一个消息做出不同的响应。 …

1475.商品折扣后的最终价格

文章目录 题目描述解题思路:方法一:通俗解法方法二:单调栈 leetcode原题链接 1475. 商品折扣后的最终价格 题目描述 给你一个数组 prices ,其中 prices[i] 是商店里第 i 件商品的价格。 商店里正在进行促销活动,如果你…

linux安装oracle11g

linux安装oracle11g 环境: redhat7 版本 11.2.0.4 一、部署环境准备 1.1 关闭selinux [rootlocalhost software]# vi /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX can take one of these three values: # enforci…

JavaFx基础学习【五】:FXML布局文件使用

一、介绍 FXML是一种在JavaFX应用程序中定义用户界面的,基于XML的声明性标记语言。FXML非常适用来静态布局,如表单、控件和表格。 如果你还不是不明白FXML到底是什么,你可以类比HTML,我们可以通过HTML来做web页面的UI&#xff0…