当前位置: 首页 > news >正文

(二十)操作系统-信号量机制

文章目录

  • 一、知识预览
  • 二、前篇文章知识点回顾
  • 三、信号量机制
  • 四、信号量机制—整形信号量
  • 五、信号量机制—记录型信号量
  • 六、总结

一、知识预览

请添加图片描述

二、前篇文章知识点回顾

  进程互斥的四种软件实现方式:单标志法、双标志先检查、双标志后检查、Peterson算法。( 具体知识点见(十八)操作系统-进程互斥的软件实现方法 )
  进程互斥的三种硬件实现方法:中断屏蔽方法、TS/TSL指令、Swap/XCHG指令。(具体知识点见(十九)操作系统-进程互斥的硬件实现方法 )
  在双标志先检查法中,进入区的“检查”、“上锁”操作无法一气呵成,从而导致了两个进程有可能同时进入临界区的问题。
  所有的解决方案都无法实现“让权等待”。

三、信号量机制

  用户进程可以通过使用操作系统的一对原语来对信号量进行操作,从而很方便的实现了进程互斥、进程同步。
  信号量就是一个变量(可以是一个整数,也可以是更复杂的记录型变量),可以用一个信号量来表示系统中某种资源的数量。比如:系统中只有一台打印机,就可以设置一个初值为1的信号量。
  原语是一种特殊的程序段,其执行只能一气呵成,不能被中断。原语是由关中断/开中断指令实现的。软甲解决方案的只要问题是由“进入区的各种操作无法一气呵成”,因此如果能把进入区、退出区的操作都用“原语”实现,使这些操作能“一气呵成”就能避免问题。
  一对原语:wait(S)原语signal(S)原语,可以把原语理解成为我们自己写的函数,函数名分别为wait和signal,信号量S其实是函数调用时传入的一个参数。
  wait、signal原语常简称为P、V操作。

四、信号量机制—整形信号量

  用一个整数型的变量作为信号量,用来表示系统中某种资源的数量。与普通整数变量的区别在于,对信号量的操作只有三种:初始化、P操作、V操作。

举例:某计算机系统中有一台打印机

int s = 1; //初始化整型信号量s,表示当前系统中可用的打印机资源数void wait (int S) {   // wait原语,相当于"进入区"while (s <= 0);   //如果资源数不够,就一直循环等待S=S-1;   //如果资源数够,则占用一个资源
}void signal (int S) {   // signal原语,相当于"退出区”S=S+1;  //使用完资源后,在退出区释放资源
}//进程p0操作
进程PO:
...
wait(S);         //进入区,申请资源
使用打印机资源...  //临界区,访问资源
signal(S);       //退出区,释放资源
...//p1进程进入申请资源擦欧总
进程P1:
...
wait(S);         //进入区,申请资源
使用打印机资源...  //临界区,访问资源
signal(S);       //退出区,释放资源
...

  进程p0想要使用打印机资源,由于资源有限只有一个,并且要互斥访问这个打印机,所以在使用打印机资源之前,进程p0要先执行一个wait原语,对信号量S进行操作。wait原语中,通过循环语句检查当前剩余资源数量是否足够;若x小于等于0,则说明系统已经没有这种资源了,进程会一直循环。
  但由于p0进程执行wait原语的时候,s的值是1,所以会跳出循环,执行下一句。将打印机资源分配给p0进程,系统当中打印机资源减一。
  当p0在访问打印机资源时,如果发生了进程切换,有另外的进程也想使用打印机资源,使用之前同样先执行wait原语。由于系统当中已经没有打印机资源了,所以p1在执行while循环时,会一直循环等待
  直到p0进程用完释放资源,执行signal原语,将信号量s由0变为1。p1才会跳出循环,执行下一步。

补:
  “检查”和“上锁”一气呵成,避免了并发、异步导致的问题。
  存在的问题:不满足“让权等待”原则,会发生“忙等”。

五、信号量机制—记录型信号量

  记录型信号量:用记录型整数结构表示的信号量。
  block原语:如果剩余资源数不够,使用block原语使进程从运行态进入阻塞态,并把挂到信号量S的等待队列(即阻塞队列)中。
  wakeup原语:释放资源后,若还有别的进程在等待这种资源,则使用wakeup原语唤醒等待队列中的一个进程,该进程从阻塞态变为就绪态。
  在考研题目中wait(S)、signal(S)也可以记为P(S)、V(S),这对原语可用于实现系统资源的“申请”和“释放”S.value 的初值表示系统中某种资源的数目

/*记录型信号量的定义*/
typedef struct {int value;   //剩余资源数struct process *L;   //等待队列
} semaphore;/*某进程需要使用资源时,通过wait原语申请*/
void wait ( semaphore s) {s.value--;if (S.value < 0 ) { 'block (S.L);}
}/*进程使用完资源后,通过signal原语释放*/
void signal (semaphore s) {s.value++;if (s.value <= 0) {wakeup(S.L);}
}

  对信号量s的一次Р操作意味着进程请求一个单位的该类资源,因此需要执行S.value–,表示资源数减1,当S.value <0时表示该类资源己分配完毕,因此进程应调用block原语进行自我阻塞(当前运行的进程从运行态—>阻塞态),主动放弃处理机,并插入该类资源的等待队列S.L中。可见,该机制遵循了“让权等待”原则,不会出现“忙等”现象。
  对信号量s的一次V操作意味着进程释放一个单位的该类资源,因此需要执行S.value++,表示资源数加1,若加1后仍是S.value <=o,表示依然有进程在等待该类资源,因此应调用wakeup原语唤醒等待队列中的第一个进程(被唤醒进程从阻塞态→就绪态)。

例题:
请添加图片描述
1. CPU为p0进程服务


请添加图片描述
2. 切换到p1进程


请添加图片描述
3. 切换到p2进程,没有资源等待。


请添加图片描述

4. 切换到p3进程,没有资源等待。


请添加图片描述

5. p2、p3均不能执行,CPU切换回为p1服务。p0执行完成释放资源。


请添加图片描述
6. p2使用打印机资源,执行完成后释放资源。


请添加图片描述

7. p1执行完成释放。


请添加图片描述

8. p3执行完释放,结束。


请添加图片描述

六、总结

请添加图片描述

相关文章:

(二十)操作系统-信号量机制

文章目录一、知识预览二、前篇文章知识点回顾三、信号量机制四、信号量机制—整形信号量五、信号量机制—记录型信号量六、总结一、知识预览 二、前篇文章知识点回顾 进程互斥的四种软件实现方式&#xff1a;单标志法、双标志先检查、双标志后检查、Peterson算法。&#xff08;…...

ceph osd slow ops 检测

目的 常用的方法检测 ceph slow 问题 参考 yceph -scluster:id: 22908555-e596-4c2d-a1f6-34fcf4d3e935health: HEALTH_WARNDegraded data redundancy: 46384/12805029 objects degraded (0.362%), 145 pgs degraded, 122 pgs undersized309 slow ops, oldest one blocked…...

百度CTO王海峰:深度学习平台+大模型,夯实产业智能化基座

2月27日&#xff0c;中国人工智能学会首届智能融合产业论坛在成都顺利举办。本届论坛由中国人工智能学会&#xff08;CAAI&#xff09;主办&#xff0c;中国人工智能学会智能融合专委会、百度公司、深度学习技术及应用国家工程研究中心和电子科技大学联合承办。中国工程院多名院…...

【C++】vector的基本使用

难道向上攀爬的那条路&#xff0c;不是比站在顶峰更让人热血沸腾吗&#xff1f; 文章目录一、vector和string的联系与不同二、vector的扩容操作1.resize() &#xff08;缺省值为匿名对象&#xff09;&& reserve()2.reserve在g和vs上的扩容机制3.reserve异地扩容和shri…...

社交媒体营销的5个好处

有些人认为&#xff0c;社交媒体营销不能直接与销售挂钩。这就是为什么在制定营销策略时&#xff0c;社交媒体营销会被部分人忽视的原因。然而&#xff0c;与其他广告渠道不同&#xff0c;社交媒体是双向渠道。忽视社交媒体营销将影响与客户的关系。最重要的是&#xff0c;它将…...

飞行机器人专栏(十)-- 异构多视角视觉系统

感知系统架构为满足天空端主控制器的诸如RGB-D图像处理等大容量数据吞吐、高速并行计算、实时运动控制以及通信和可视化任务的计算算力需求&#xff0c;同时优化功耗表现&#xff0c;采用了结构紧凑、功耗表现优异的边缘计算硬件NVIDA IJetson AGXOrin 。该开发者套件包含高性能…...

2023年湖北住建厅八大员各岗位题库精准小题库-启程别

2023年湖北住建厅八大员各岗位题库精准小题库-启程别 住建厅八大员&#xff08;施工员、质量员、资料员、材料员、机械员、标准员、劳务员&#xff09; 各岗位题库分2种&#xff1a; 1.住建厅八大员报名之后会有培训任务&#xff0c;完成培训任务学习才能安排考试&#xff0c;…...

志愿者招募令|来!一起Build OceanBase第一次开发者大会

2023 年 3 月 25 日&#xff0c;我们将开启第一次 OceanBase 开发者大会&#xff0c;走近开发者&#xff0c;共同探讨单机分布式、云原生、HTAP 等数据库前沿趋势&#xff0c;分享全新的产品 Roadmap&#xff0c;交流场景探索和最佳实践。 为了让活动现场更有活力&#xff0c;…...

java 元数据 和 元注解

基本介绍三种基本注解OverrideDeprecatedSuppressWarnings四种元注解RetentionTargetDocumentedInherited一、基本介绍1.概述java注解&#xff08;Annotation&#xff09;[ˌ nəˈ teɪʃn]&#xff0c;又称java标注&#xff0c;也被称为元数据&#xff08;关于数据的数据&…...

RFID射频卡写入手机NFC心路小记

声明&#xff1a; 本文仅是作者学习探索的心里路程日记&#xff0c;如果您看完以后&#xff0c;从中获得了一些知识&#xff0c;作者不胜荣幸。科技是一把双刃剑&#xff0c;利用好了&#xff0c;可以方便生活&#xff0c;利用不当也肯能扰乱公共管理秩序&#xff0c;造成不必要…...

【C++】STL 模拟实现之 list

文章目录一、list 的常用接口及其使用1、list 一般接口2、list 特殊接口3、list 排序的性能分析二、list 迭代器的实现1、迭代器的分类2、list 迭代器失效问题3、list 迭代器源码分析4、list 迭代器模拟实现4.1 普通迭代器4.2 const 迭代器4.3 完整版迭代器三、list 的模拟实现…...

20230228----重返学习-数组-引用数据类型的转换-基础调试用方法-对象检测-各数据转布尔值及相等运算符-条件语句-循环语句

day-017-seventeen-20230228-数组-引用数据类型的转换-基础调试用方法-对象检测-各数据转布尔值及相等运算符-条件语句-循环语句 数组 字面量表示法 [数组成员0,数组成员1,数组成员2]用中括号语法来取值 var ary [5,6,7] console.log("ary[0]--->", ary[0])数组…...

apscheduler 定时任务框架

Apscheduler 介绍 四大组件 triggers&#xff1a;触发器&#xff0c;用于设定触发任务的条件job stores&#xff1a;作业存储器&#xff0c;用于存放任务&#xff0c;可以存放在数据库或内存&#xff0c;默认内存executors&#xff1a;执行器&#xff0c;用于执行任务&#x…...

Softing OPC Tunnel——绕过DCOM配置实现OPC Classic广域网通信

一 摘要 Softing OPC Tunnel是dataFEED OPC Suite的一个组件&#xff0c;可避免跨设备OPC Classic通信中出现的DCOM配置问题&#xff0c;同时可保证跨网络数据交换的高性能和可靠性。OPC Tunnel内部集成的存储转发功能&#xff0c;可在连接中断时缓存数据&#xff0c;并在重新…...

Java的运算操作

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【JavaSE_primary】 文章目录算术运算符增量运算符注意自增自减运算符关系运算符逻辑运算符逻辑与&&逻辑或||逻辑非&#xff01;…...

基于OBD系统的量产车评估测试(PVE)

在轻型汽车污染物排放限值及测量方法&#xff08;中国第六阶段&#xff09;中&#xff0c;除了对汽车尾气排放等制定了更为严格的限制之外&#xff0c;也在OBD系统认证项目中增加了新的要求——量产车评估&#xff08;Production Vehicle Evaluation&#xff09;测试。该测试由…...

【蓝桥杯集训10】Tire树 字典树 最大异或对专题(3 / 3)

目录 字典树模板 1、插入操作 2、查询操作 143. 最大异或对 - trie 二进制 3485. 最大异或和 - 前缀和Trie滑动窗口 字典树模板 活动 - AcWing 字典树&#xff1a;高效存储和查找字符串集合的数据结构 son[节点1地址][值]节点2地址 —— 节点1的子节点为节点2cnt[节点地…...

docker部署zabbix6.2.7+grafana

目录 1、下载docker 2、下载相关镜像文件 3、创建一个供zabbix系统使用的网络环境 4、创建一个供mysql数据库存放文件的目录 5、启动mysql容器 6、为zabbix-server创建一个持久卷 7、启动zabbix-server容器 8、创建语言存放目录 9、启动zabbix-web容器 10、启动zabbix…...

【Java开发】JUC基础 04:Synchronized、死锁、Lock锁

1 概念介绍并发&#xff1a;同一个对象被多个线程同时操作&#x1f4cc; 线程同步现实生活中&#xff0c;我们会遇到“同一个资源&#xff0c;多个人都想使用”的问题&#xff0c;比如&#xff0c;食堂排队打饭,每个人都想吃饭&#xff0c;最天然的解决办法就是&#xff0c;排队…...

离散数学---期末复习知识点

一、 数理逻辑 [复习知识点] 1、命题与联结词&#xff08;否定&#xffe2;、析取∨、合取∧、蕴涵→、等价↔&#xff09;&#xff0c;命题(非真既假的陈述句),复合命题(由简单命题通过联结词联结而成的命题) 2、命题公式与赋值&#xff08;成真、成假&#xff09;&#x…...

在线安装ESP32和ESP8266 Arduino开发环境

esp32和esp8266都是乐鑫科技开发的单片机产品&#xff0c;esp8266价格便宜开发板只需要十多块钱就可以买到&#xff0c;而esp32是esp8266的升级版本&#xff0c;比esp8266的功能和性能更强大&#xff0c;开发板价格大约二十多元就可以买到。 使用Arduino开发esp32和esp8266需要…...

【Python实战】激情澎湃,2023极品劲爆舞曲震撼全场,爬虫一键采集DJ大串烧,一曲醉人女声DJ舞曲,人人都听醉~(排行榜采集,妙啊~)

导语 哈喽&#xff01;大家好。我是木木子吖~今天给大家带来爬虫的内容哈。 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 今天教大家Python爬虫实战一键采集大家喜欢的DJ舞曲哦&#xff01; …...

[SSD综述 1.5] SSD固态硬盘参数图文解析_选购固态硬盘就像买衣服?

版权声明&#xff1a;付费作品&#xff0c;未经许可&#xff0c;不可转载前言SSD &#xff08;Solid State Drive&#xff09;&#xff0c;即固态硬盘&#xff0c;通常是一种以半导体闪存&#xff08;NAND Flash&#xff09;作为介质的存储设备。SSD 以半导体作为介质存储数据&…...

SAP Insurance Analyzer

SAP Insurance Analyzer 是一款用于保险公司财务和风险管理的软件。SAP Insurance analyzer 支持基于 IFRS 17 或 Solvency II 的保险合同估值和计算要求。SAP Insurance Analyzer 于 2013 年 5 月推出&#xff0c;为源数据和结果数据集成了一个预配置的保险数据模型。 源数据…...

自动化测试 ——自动卸载软件

在平常的测试工作中&#xff0c;经常要安装软件&#xff0c;卸载软件, 即繁琐又累。 安装和卸载完全可以做成自动化。 安装软件我们可以通过自动化框架&#xff0c;自动点击Next,来自动安装。 卸载软件我们可以通过msiexec命令行工具自动化卸载软件 用msiexec 命令来卸载软件 …...

05 封装

在对 context 的封装中&#xff0c;我们只是将 request、response 结构直接放入 context 结构体中&#xff0c;对应的方法并没有很好的封装。 函数封装并不是一件很简单、很随意的事情。相反&#xff0c;如何封装出易用、可读性高的函数是非常需要精心考量的&#xff0c;框架中…...

clean

clean code 记得以前写过这题&#xff0c;写的乱七八糟&#xff0c;分析来分析去。 后悔应该早点写代码&#xff0c;leetcode大一就该刷了。 https://leetcode.cn/problems/plus-one/submissions/ class Solution { public:vector<int> plusOne(vector<int>&…...

佛科院计算机软件技术基础——线性表

一、基础知识了解&#xff1a;结构体的理解&#xff1a;我们知道整型是由1位符号位和15位数值位组成&#xff0c;而就可以把结构体理解为我们定义的数据类型&#xff0c;如&#xff1a;typedef struct {int data[2]; //存储顺序表中的元素int len; …...

linux下终端操作mysql数据库

目录 一&#xff0e;检查mysql是否安装 1. 查看文件安装路径 2. 查询运行文件所在路径(文件夹地址) 二&#xff0e;登录mysql 三&#xff0e;列出mysql全部用户 四&#xff0e;常用指令 &#xff11;&#xff0e;查看全部数据库 &#xff12;&#xff0e;选择数据库 …...

MySQL参数优化之thread_cache_size

1.thread_cache_size简介 每建立一个连接&#xff0c;都需要一个线程来与之匹配&#xff0c;此参数用来缓存空闲的线程&#xff0c;以至不被销毁&#xff0c;如果线程缓存中有空闲线程&#xff0c;这时候如果建立新连接&#xff0c;MYSQL就会很快的响应连接请求。 show statu…...

佛山网站建设运营/网站模板源码

1.Add a login user and group for mysqld‘ to run as:为‘mysqld’增添一个登陆用户和组shell groupadd mysqlshell useradd -g mysql mysql 2.解压shell gunzip mysql-5.0.15.tar.gz tar -xvf -shell cd mysql-5.0.15 3.Configure the release and compile everything:配置…...

闵行广州网站建设/sem扫描电镜

2.3 面向过程编程(OPP) 和面向对象编程(OOP)的关系 关于面向过程的编程(OPP)和面向对象的编程(OOP),给出这它们的定义的人很多&#xff0c;您可以从任何资料中找到很专业的解释&#xff0c;但以我的经验来看&#xff0c;讲的相对枯燥一点&#xff0c;不是很直观。除非您已经有了…...

网站如何优化关键词排名/seo排名培训

783. 二叉搜索树节点最小距离 难度简单106 给定一个二叉搜索树的根节点 root&#xff0c;返回树中任意两节点的差的最小值。 示例&#xff1a; 输入: root [4,2,6,1,3,null,null] 输出: 1 解释: 注意&#xff0c;root是树节点对象(TreeNode object)&#xff0c;而不是数组。给…...

小企业网站建设地点/关于友谊的连接

JVM内存结构 《深入理解Java虚拟机&#xff08;第2版&#xff09;》中的描述是下面这个样子的&#xff1a; JVM的内存结构大概分为&#xff1a; 堆&#xff08;Heap&#xff09;&#xff1a;线程共享。所有的对象实例以及数组都要在堆上分配。回收器主要管理的对象。方法区&a…...

常州辉煌网络网站建设/西安关键词排名优化

前言前阵子来哈尔滨上学&#xff0c;坐火车的时候感到非常的无趣&#xff0c;所以在这个过程中我想到了一个办法来打发时间&#xff0c;看电影&#xff0c;然后无意间在一个小面馆里下载各种电影的时候看到爱奇艺里面卧虎藏龙这部电影是免费的&#xff0c;于是我想到把它下载下…...

网站首页图片滑动怎么做/国内新闻最新消息今天

接上面3.4&#xff0c; 1、Tab_1对应着tab窗口中的Terminal窗口&#xff0c;qwtPlot对应着窗口中显示曲率线的窗口&#xff0c;scroll_plot对应着进度条&#xff0c;pb_StartPlotter对应开始按钮。 2、Tab_3对应着第三个tab窗口&#xff0c;te_Rx对应着上面的数据显示窗口&…...