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

文章目录

  • 一、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的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!💪💪

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

聊聊JDK1.0到JDK20的那些事儿 | 京东云技术团队

1.前言 最近小组在开展读书角活动,我们小组选的是《深入理解JVM虚拟机》,相信这本书对于各位程序猿们都不陌生,我也是之前在学校准备面试期间大致读过一遍,emm时隔多日,对里面的知识也就模糊了。这次开始的时候从前面…

在Java中对XML的简单应用

XML 数据传输格式1 XML 概述1.1 什么是 XML1.2 XML 与 HTML 的主要差异1.3 XML 不是对 HTML 的替代 2 XML 语法2.1 基本语法2.2 快速入门2.3 组成部分2.3.1 文档声明格式属性 2.3.2 指令(了解):结合CSS2.3.3 元素2.3.4 属性**XML 元素 vs. 属…

nginx keepalived 本地二进制部署

文章目录 安装 nginx安装 keepalived卸载 nginx卸载 keepalived 安装 nginx wget http://nginx.org/download/nginx-1.24.0.tar.gz tar -xf nginx-1.24.0.tar.gz cd nginx-1.24.0/ ./configure --with-stream --prefix/usr/local/nginx make && make install修改nginx…

使用 VScode 开发 ROS 的Python程序(简例)

一、任务介绍 本篇作为ROS学习的第二篇,是关于如何在Ubuntu18.04中使用VSCode编写一个Python程序,输出“Hello!”的内容介绍。 首先我们来了解下ROS的文件系统,ROS文件系统级指的是在硬盘上ROS源代码的组织形式,其结构…

华为OD机试 - 查找众数及中位数(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…

变压器故障诊断(python代码,逻辑回归/SVM/KNN三种方法同时使用,有详细中文注释)

代码运行要求:tensorflow版本>2.4.0,Python>3.6.0即可,无需修改数据路径。 1.数据集介绍: 采集数据的设备照片 变压器在电力系统中扮演着非常重要的角色。尽管它们是电网中最可靠的部件,但由于内部或外部的许多因素&#…

《Linux从练气到飞升》No.13 Linux进程状态

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

2023年国赛数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法,就是频繁模…

aspose 使用ftl模板生成word和pdf

1 先找到word模板,用${},替换变量,保存,然后另存为xml,最后把xml后缀改成ftl。 如下图: word 模板文件 ftl模板文件如下: 2 代码生成 下面函数将ftl填充数据,并生成word和pdf /*** * param dataMap 模板…

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

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

Docker 基本管理(一)

目录 一、虚拟化简介 1.1.虚拟化概述 1.2.cpu的时间分片(cpu虚拟化) 1.3.cpu虚拟化性性能瓶颈 1.4.虚拟化工作原理 1.5 虚拟化类型 1.6 虚拟化功能 ​二、Docker容器概述 2.1 docker是什么? 2.2 使用docker有什么意义&#xff…

正则表达式试炼

序 我希望在这里列出我很多想写的正则表达式,很多我想写,但是不知道怎么写的。分享点滴案例。未来这个文章会越来越长 前言 互联网时代,除了文本还有更好的学习方式,下面是几个不错的练习网站,如果你想系统地学习&a…

【C语言实战项目】通讯录

一.了解项目功能 在本次实战项目中我们的目标是实现一个通讯录: 该通讯录可以用来存储1000个人的信息 每个人的信息包括:姓名、年龄、性别、住址、电话 通讯录提供功能有: 添加联系人信息删除指定联系人信息查找指定联系人信息修改指定联系人信息显示所有…

python中两个数据框之间的遍历

1.输入文件1 文件1:第一列是基因名字,列2:外显子起始位置,列3:外显子终止位置,列4:外显子的序号 2.输入文件2: 备注:列1:基因id;列2:…

Verdi_如何dump信号的驱动强度

Verdi_如何dump信号的驱动强度 需求背景 在Verilog语法标准中,0和1各自被分成了8个强度等级; Strength NameStrength NameStrength Levelsupply 0supply 17strong 0strong 16pull 0pull 15large 0large 14weak 0weak 13medium 0medium 12small 0small…

软件测试用例设计方法之因果图法

基本概念 因果图是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。 设计测试用例的步骤 分析软件规格说明描述中, 哪些是原因(即输入条件或输入条件的等价类),哪些是结果(即输出条件), 并给每…

『C语言初阶』第九章 -结构体

前言 今天小羊又来给铁汁们分享关于C语言的结构体,在C语言中,结构体类型属于一种构造类型(其他的构造类型还有:数组类型,联合类型),今天我们主要简单了解一下结构体。 一、结构体是什么&#x…

Redis_缓存1_缓存类型

14.redis缓存 14.1简介 穿透型缓存: 缓存与后端数据交互在一起,对服务端的调用隐藏细节。如果从缓存中可以读到数据,就直接返回,如果读不到,就到数据库中去读取,从数据库中读到数据,也是先更…

基于微服务+Java+Spring Cloud +Vue+UniApp +MySql实现的智慧工地云平台源码

基于微服务JavaSpring Cloud VueUniApp MySql开发的智慧工地云平台源码 智慧工地概念: 智慧工地就是互联网建筑工地,是将互联网的理念和技术引入建筑工地,然后以物联网、移动互联网技术为基础,充分应用BIM、大数据、人工智能、移…

node.js+Vue+Express学生宿舍校舍系统-ggr80

关键词:智慧学生校舍;简洁方便直观; 本次的毕业设计主要就是设计并开发一个智慧学生校舍系统。使用数据库mysql。系统主要包括个人中心、学生管理、教师管理、宿管管理、外来人员管理、维修人员管理、学生信息管理、学生签到管理、学生物品管…