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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB 简介

什么是MongoDB ? MongoDB 是由C语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个…

4、Rocketmq之存储原理

CommitLog ~ MappedFileQueue ~ MappedFile集合 正常情况下,RocketMQ支持消息体字节数最多为1个G。注意该消息体并不单单是消息体body。如果生产的消息其字节数超过1个G则该消息是无法被落盘处理的。因为没有一个MapperFile文件可以承载该消息所有的字节数。 1.All…

linux学习(自写shell)[11]

打印出提示信息获取用户键盘输入 cmd_line[NUM];用来保存完整的命令行 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/wait.h>#define NUM 1024 char cmd_line[NUM]; //shell int main() {wh…

Kali Linux是什么?它的主要用途是什么?

1. Kali Linux是什么&#xff1f; Kali Linux是一款基于Debian Linux的发行版&#xff0c;专注于网络安全和渗透测试。它由全球顶尖的安全专家和黑客社区维护开发&#xff0c;提供了丰富的工具和资源&#xff0c;用于测试网络、系统和应用程序的安全性。Kali Linux以其强大的功…

C#字符串占位符替换

using System;namespace myprog {class test{static void Main(string[] args){string str1 string.Format("{0}今年{1}岁&#xff0c;身高{2}cm&#xff0c;月收入{3}元&#xff1b;", "小李", 23, 177, 5000);Console.WriteLine(str1);Console.ReadKey(…

聊一下互联网开源变现

(点击即可收听) 互联网开源变现其实是指通过开源软件或者开放源代码的方式&#xff0c;实现收益或盈利。这种方式越来越被广泛应用于互联网行业 在互联网开源变现的模式中&#xff0c;最常见的方式是通过捐款、广告、付费支持或者授权等方式获利。 例如&#xff0c;有些开源软件…

轻量级自动化测试框架WebZ

一、什么是WebZ WebZ是我用Python写的“关键字驱动”的自动化测试框架&#xff0c;基于WebDriver。 设计该框架的初衷是&#xff1a;用自动化测试让测试人员从一些简单却重复的测试中解放出来。之所以用“关键字驱动”模式是因为我觉得这样能让测试人员&#xff08;测试执行人员…

MySQL — 索引

文章目录 索引索引结构 — B树与B树B树B树 聚簇索引与非聚簇索引聚簇索引非聚簇索引优缺点 覆盖索引与回表联合索引索引覆盖最左前缀匹配 索引 索引是对数据库表中一列或多列的值进行排序的一种结构。MySQL索引的建立对于MySQL的高效运行是很重要的&#xff0c;索引可以大大提…

剑指 Offer 40. 最小的k个数

题目描述 输入整数数组 arr &#xff0c;找出其中最小的 k 个数。例如&#xff0c;输入4、5、1、6、2、7、3、8这8个数字&#xff0c;则最小的4个数字是1、2、3、4。 示例 思路 方法1 采用未改进的快速排序 class Solution {public int[] getLeastNumbers(int[] arr, int k…

k8s ------存储卷(PV、PVC)

目录 一&#xff1a;为什么需要存储卷&#xff1f; 二&#xff1a;emptyDir存储卷 ​三&#xff1a;hostPath存储卷 四&#xff1a;nfs共享存储卷 五&#xff1a;PVC 和 PV 1、PVC 和 PV介绍 2、PV和PVC之间的相互作用遵循的生命周期 3、PV 的4 种状态 4、一个PV从创…

【Spring MVC】Spring MVC基于注解的程序开发

目录 一、什么是Spring MVC 二、Spring MVC项目的创建和使用 1、实现客户端和服务器端之间的连接 1.1、RequsestMapping注解 1.2、RequestMapper的简单使用 1.3、使用GetMapping和POSTMapping注解来实现HTTP连接 三、获取参数 1、实现获取单个参数 2、实现获取对象 3…

FPGA:RS编码仿真过程

FPGA&#xff1a;RS编码仿真过程 RS码是一种纠错性能很强的线性纠错码&#xff0c;能够纠正随机错误和突发错误。RS码是一种多进制BCH码&#xff0c;能够同时纠正多个码元错误。 之前已经记录了在MATLAB中进行rs编解码的过程&#xff0c;现在利用FPGA的IP核实现RS编码的过程&…

怎么自己制作动图表情包?在线gif生成的操作步骤

gif表情包在我们平时的生活里斗图的时候经常会用到&#xff0c;那么如何用图片制作gif&#xff08;https://www.gif.cn&#xff09;表情包呢&#xff1f;今天就分享一个在线gif生成的简单方法&#xff0c;利用gif制作工具将图片转gif动图&#xff0c;下面是详细的操作步骤。 打…

测试相关Liunx基础知识

Linux的历史和安装 基本常识 Liunx目录结果 常见

(el-Table)操作(不使用 ts):Element-plus 中Table 表格组件:多选修改成支持单选及表格相关样式的调整

Ⅰ、Element-plus 提供的 Table 表格组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供 Table 组件情况&#xff1a; 其一、Element-ui 自提供的 Table 代码情况为(示例的代码)&#xff1a; // Element-plus 自提供的代码&#xff1a; // 此时是使用了 ts 语言环境…

echart图案例

效果 代码&#xff1a; index.vue <template><div class"pageBox"><div class"oneLineBox"><div class"fourColorImgBox"><div class"titleBox">企业风险四色图</div><div class"conte…

LVS-DR集群(一台LVS,一台CIP,两台web,一台NFS)的构建

一.构建环境 1.五台关闭防火墙&#xff0c;关闭selinux&#xff0c;拥有固定IP&#xff0c;部署有http服务的虚拟机&#xff0c;LVS设备下载ipvsadm工具&#xff0c;NFS 设备需要下载rpcbind和nfs-utils 2.实现功能 3.ipvsadm命令部分参数介绍 二.配置和测试 1.LVS设备 &…

互联网发展历程:从布线到无线,AC/AP的崭新时代

互联网的发展&#xff0c;一直在追求更便捷、更灵活的连接方式。在网络的早期&#xff0c;布线问题常常让人头疼。一项革命性的技术应运而生&#xff0c;那就是“无线AC/AP”。 布线问题的烦恼&#xff1a;繁琐的布线 早期网络的布线工作常常耗费时间和精力&#xff0c;尤其在大…

虫情测报灯——监测预警分析

KH-CQPest虫情测报灯是专为田间虫害统计、农林虫情测报而研制的设备&#xff0c;利用光、电、数控等技术实现自动诱虫、杀虫、虫体分散、拍照、运输、收集、排水等系统作业等功能&#xff0c;当有害虫出现时&#xff0c;会受到诱集光源的影响&#xff0c;自动飞扑撞向撞击屏&am…