信号量理论

个人主页:Lei宝啊 

愿所有美好如期而遇


理论

信号量是对公共资源的一种预定机制,资源不一定非要持有才算自己的,预定了也算,在未来任意时刻,仍然可以使用。

像我们申请有一块共享内存,如果一个进程正在使用,那么其他进程就需要进行等待,使得资源不会被并发访问,但是这种一次申请一块共享内存却只能由一个进程访问,效率并不高,于是就有了分配资源,将这个共享内存划分成几块,不同的进程去申请这些资源,申请成功则可以使用,失败则等待,而信号量就是对这些资源进行计数的!本质上信号量也是属于进程间通信。

于是,所有的进程在访问临界资源时,都需要去申请信号量,这也是被共同遵守的。

下面,回答几个问题,介绍几个概念:

临界资源是什么?临界资源就是被保护起来的,任何时刻只允许一个执行流访问的公共资源。访问临界资源的代码,我们叫做临界区,保护临界资源,实质上就是保护临界区。

而我们的信号量是用来保护临界资源的,访问临界资源前,需要向他申请,但是我们的信号量也是临界资源,谁来保护他呢?我们有没有一个问题,在申请和释放信号量的过程中,如果突然被打断,会发生什么?

第一个问题,信号量的申请和释放(PV操作)是原子的,由操作系统去保护,什么叫原子?原子就是一个操作不可以再被分割,是就是是,不是就是否,要么做完,要么不做。

第二个问题,他不会被打断,要么申请成功,要么就失败。

第三个问题,既然你信号量是个计数器,我直接搞一个count不就行了吗,使用他来计数不可以吗?在多进程中,我们希望每个进程都能够一直看见count的值,并且要求count++和--的操作是原子的,但是count变量++和--的操作不是原子的,在汇编层面,他会将count先写进CPU,然后CPU对他做++,然后写回变量,这个过程是可以被打断的,同时,我们无法让一个普通变量一直被多进程看到,所以我们有了信号量。

我们还可以通过他的接口可以看到他和共享内存,消息队列之间的一些共性,比如说              struct ipc_perm,三者的结构体变量中都有这样一个结构体变量,而且都放在结构体的头部,我们看图:

在操作系统内核中,是这样一个结构,看图:

而我们知道,一个结构体的地址在值上和他的第一个成员变量的值是相等的。于是我们对共享内存等的管理,就变成了对柔性数组的增删查改。(通过找到ipc_perm中的_key)

那么我们只通过ipc_perm*怎么知道哪个是共享内存,哪个是信号量?在ipc_perm中,有一个mode变量,存放着我们创建时的类型,使用宏的方式,同时我们定义了这样的宏,所以,确定类型,就变成了ipc_perm* ->mode & 宏,我们写三个接口,就可以判断类型,返回类型后对ipc_perm*类型强制类型转换,就可以进行访问了。

而我们的shmid,msgid,semid,都是柔性数组中的下标。

其实这里不好的点在于,他们的结构没有向文件靠拢,如果将他们的结构体再做一层封装,封进strcut file中,将struct file*填入数组中返回下标,这样就契合了Linux下一切皆文件,在使用时我们也能够统一看待,也就能使用统一的接口,而不是像现在这样。

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

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

相关文章

HTML5 <video> 标签属性、API 方法、事件、自定义样式详解与实用示例

HTML5 <video> 标签为网页内嵌视频提供了强大且便捷的功能。以下是对 <video> 标签的主要属性、API 方法、事件、自定义样式及其使用示例的详细介绍&#xff1a; 一、属性 1. src 定义&#xff1a;指定视频文件的 URL。示例&#xff1a;<video src"my_v…

树莓派驱动开发--iic篇(JY901S陀螺仪的三轴角度简单读取)

前言&#xff1a;既然大家都到了这步&#xff0c;想必对驱动开发有着一定的理解啦吧&#xff01;&#xff01;那我在前面说一下流程&#xff1a; 修改编译设备树》》》编写编译驱动文件》》》编写编译app文件》》》ftp挂载将前面3复制到树莓派的对应位置》》》加载驱动模块》》…

代码随想录训练营Day 24|Python|Leetcode|93.复原IP地址, 78.子集,90.子集II

93.复原IP地址 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&#xff0c;但是 &q…

✌粤嵌—2024/4/3—合并K个升序链表✌

代码实现&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* merge(struct ListNode *l1, struct ListNode *l2) {if (l1 NULL) {return l2;}if (l2 NULL) {return l1;}struct Lis…

【Android GUI】从总体上了解Android的GUI体系

文章目录 概览Android硬件接口HALGralloc与Framebuffer Gralloc模块的加载Gralloc提供的接口Android原生的Gralloc实现打开framebuffer设备打开gralloc设备 参考 概览 Linux内核提供了统一的framebuffer显示驱动。设备节点/dev/graphics/fb*或者/dev/fb*&#xff0c;其中fb0表示…

MySQL-变量、流程控制与游标:变量、定义条件与处理程序、流程控制

变量、流程控制与游标 变量、流程控制与游标1. 变量1.1 系统变量1.1.1 系统变量分类1.1.2 查看系统变量 1.2 用户变量1.2.1 用户变量分类1.2.2 会话用户变量1.2.3 局部变量1.2.4 对比会话用户变量与局部变量 2. 定义条件与处理程序2.1 案例分析2.2 定义条件2.3 定义处理程序2.4…

go限流、计数器固定窗口算法/计数器滑动窗口算法

go限流、计数器固定窗口算法/计数器滑动窗口算法 一、问题 问题1&#xff1a;后端接口只能支撑每10秒1w个请求&#xff0c;要怎么来保护它呢&#xff1f; 问题2&#xff1a;发短信的接口&#xff0c;不超过100次/时&#xff0c;1000次/24小时&#xff0c;要怎么实现&#xff…

一分钟举例了解AI智能客服机器人的具体应用

AI智能客服机器人广泛应用于多个领域&#xff0c;充斥着我们生活的方方面面。在电商领域、银行业、电信行业、政府机构、教育机构、医疗机构等也借助AI智能客服机器人提供咨询、答疑等服务。但是具体是怎么应用到这些场景的呢&#xff1f;今天就用HelpLook的AI智能机器人的具体…

IMU是什么和IMU工作原理

陀螺仪和加速度计是IMU的主要部件&#xff0c;其精度直接影响惯性系统的精度。在实际工作中&#xff0c;由于各种不可避免的干扰因素&#xff0c;陀螺仪和加速度计会产生误差。从初始对准开始&#xff0c;其导航误差随着时间的推移而增大&#xff0c;尤其是位置误差&#xff0c…

JavaScrip 在主窗口打开浏览器子窗口时,监听子窗口开启与关闭,可在主窗口关闭子窗口

需求 vue项目&#xff0c;需要打开浏览器子窗口&#xff0c;并且要监听子窗口的刷新与关闭&#xff0c;如果子窗口刷新&#xff0c;主窗口需要自动关闭子窗口。主窗口关闭子窗口一起关闭。 解决思路 看看官方给的思路 在Vue中&#xff0c;如果你想关闭当前浏览器标签页&…

计算机体系架构

冯诺依曼架构 我们编写的程序存储在哪里呢&#xff1f;CPU内部的结构其实很简单&#xff0c;除了ALU、控制单元、寄存器和少量Cache&#xff0c;根本没有多余的空间存放我们编写的代码&#xff0c;我们需要额外的存储器来存放我们编写的程序&#xff08;指令序列&#xff09;。…

Android 自定义SwitchPreference

1. 为SwitchPreference 添加背景&#xff1a;custom_preference_background.xml <?xml version"1.0" encoding"utf-8"?> <selector xmlns:android"http://schemas.android.com/apk/res/android"><item><shape android:s…

MyBaties-plus 小蓝鸟 构造器 QueryWrapper 知识学习汇总

一、QueryWrapper是什么&#xff1f; QueryWrapper 是 mybatis-plus 条件构造器 https://mp.baomidou.com 小蓝鸟官方网址 MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做…

数字展览会如何重塑展览业的可持续发展与互动体验?

随着数字技术的飞速发展&#xff0c;数字展览会已成为全球展览行业的一个重要趋势&#xff0c;它为参展商和观众提供了全新的交流与展示平台。这种展览形式不仅提高了展览的可访问性和互动性&#xff0c;而且显著降低了参与成本&#xff0c;对未来展览会的发展具有重要的推动作…

初始ansible变量及实例配置

目录 1、为什么要使用变量 2、变量分类 3、 变量详解 3.1 vars,vars_files , group_vars 3.1 .1 vars 剧本中定义变量 3.1.2 vars_file 将变量存放到一个文件中&#xff0c;并在剧本中引用 3.1.3 group_vars 创建一个变量文件给某个组使用 实例1-根据不同的主机…

【【相机运动】_Camera_shake镜头晃动动画】

【相机运动】:Camera shake镜头晃动动画 2022-07-20 20:28 评论(0)

压缩感知(ISTA-Net论文)学习笔记

压缩感知&#xff08;ISTA-Net论文&#xff09;学习笔记 第一天&#xff0c;主要查找相关视频和笔记&#xff0c;补全预备知识 【nabla算子】与梯度、散度、旋度_哔哩哔哩_bilibili 近端梯度(Proximal Gradient)下降算法的过程以及理解|ISTA算法|LASSO问题_哔哩哔哩_bilibil…

Weakly Supervised Audio-Visual Violence Detection 论文阅读

Weakly Supervised Audio-Visual Violence Detection 论文阅读 摘要III. METHODOLOGYA. Multimodal FusionB. Relation Modeling ModuleC. Training and Inference IV. EXPERIMENTSV. CONCLUSION阅读总结 文章信息&#xff1a; 发表于&#xff1a;IEEE TRANSACTIONS ON MULTIME…

IP定位技术在解决广告恶意点击问题中的应用

随着互联网的迅猛发展&#xff0c;数字广告已成为企业推广产品和服务的重要方式。然而&#xff0c;随之而来的是广告恶意点击的问题&#xff0c;这不仅导致广告主的损失&#xff0c;也影响了广告生态的健康发展。为了解决这一问题&#xff0c;IP定位技术应运而生&#xff0c;成…

算法学习——LeetCode力扣补充篇9(912. 排序数组、21. 合并两个有序链表、33. 搜索旋转排序数组、103. 二叉树的锯齿形层序遍历)

算法学习——LeetCode力扣补充篇9 912. 排序数组 912. 排序数组 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5] 示例 2&…