王道操作系统考研笔记——2.3.4 信号量机制

文章目录

      • 2.3.4 信号量机制
        • 2.3.4.1 引入
        • 2.3.4.2 整型信号量
        • 2.3.4.3 记录型信号量
        • 2.3.4.4 小结

2.3.4 信号量机制

知识总览

image-20220217101254338

在1965年,荷兰学着Dijkstra提出了一种卓有成效的实现进程互斥、同步的方法——信号量机制

2.3.4.1 引入

用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥、进程同步。

一对原语:wait(S)原语和signal(S)原语,可以把原语理解为我们自己写的函数,函数名为wait和signal,括号里的信号量S其实就是函数调用时传入的一个参数。

wait、signal原语常常简称为P、V操作(来自荷兰语proberen和verhogen)。因此,做题的时候常把wait(S)和signal(S)两个操作分别写为P(S)、V(S)

信号量其实就是一个变量(可以是一个整数,也可以是更复杂的记录型变量),可以用一个信号量来表示系统中某种资源的数量,比如:系统中只有一台打印机,就可以设置一个初值为1的信号量。

原语是一种特殊的程序段,其执行只能一气呵成,不可被中断。原语是由关中断/开中断指令实现的。软件解决方案的主要问题是由"进入区的各种操作无法一气呵成",因此如果能把进入区、退出区的操作都用原语实现,使这些操作能够一气呵成就能避免问题。

2.3.4.2 整型信号量

整型信号量就是用一个整数型的变量作为信号量,用来表示系统中某种资源的数量。其与普通整数变量的区别在于其无法做更多操作,只能初始化P操作V操作

让我们用C来描述整型信号量的机制,假设我们有一台打印机,打印机作为一种临界资源。

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

由于使用了原语,操作只能一气呵成,所以检查和上锁一气呵成,避免了并发、异步导致的问题。而存在的问题是,其不满足让权等待,当一个进程占用处理机时,另一个进程会卡在wait操作的while循环步骤中,会发生忙等。

2.3.4.3 记录型信号量

整型信号量的缺陷是存在忙等问题,因此人们又提出了记录型信号量,即用记录型数据结构表示的信号量。

让我们看一下用C语言实现的逻辑:

/*记录型信号量的定义*/
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(semphore S)
{S.value++;if(S.value <= 0){wakeup(S.L)}
}

当剩余资源数不够时,使用block原语使进程从运行态进入阻塞态,并把其挂到信号量S的等待队列中。

当释放完资源后,若还有别的进程在等待这种资源,则使用wakeup原语唤醒等待队列中的一个进程,该进程从阻塞态变为就绪态。

我们来用一个例子详细说明:

某计算机系统中有两台打印机,则可在初始化信号量S时将S.value的值设为2,队列S.L设置为空。

/*记录型信号量的定义*/
typedef struct
{int value;  //剩余资源数struct process *L;  //等待队列
}semaphore;void init(semaphote &S)
{S.value = 2;S.L = null;
}

image-20220228103936768

让我们来回顾一下整个过程,wait(S)和signal(S)也可以即为P(S)和V(S),这对原语可用于实现系统资源的申请和释放。其中S.value的初值表示系统中某种资源的数目。

对信号量S的一次P操作意味着进程请求一个单位的该类资源,因此需要执行S.value–,表示资源数-1,当S。value<0时表示该类资源已分配完毕,因此进程应调用bolck原语进行自我阻塞(当前运行的过程从运行态→阻塞态),主动放弃处理机,并插入该类资源的等待队列S.L中,可见,该机制遵循了让权等待的原则,不会出现忙等现象。

对信号量的一次V操作意味着进程释放一个单位的该类资源,因此需要执行S.value++,表示资源数+1,若加1后仍是S.value<=0,表示依然有进程在等待该类资源,因此应该调用wakeup原语唤醒等待队列中的第一个进程,让其从阻塞态变为就绪态。

2.3.4.4 小结

image-20220228104949245

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

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

相关文章

QT分析之WebKit

该文章整理自 网易博客 http://blog.163.com/net_worm/blog/static/12770241920101831312381/ 转载请注明出处 WebKit是QT4新整合的第三方构件。按照惯例动手分析之前&#xff0c;先了解大概 WebKit由三个模块组成&#xff1a;JavaScriptCore、WebCore 和 WebKit WebKit作为了整…

ViewPager循环

android.support.v4.view.ViewPager ViewPager的使用跟AbsListView&#xff0c;AbsSpinner类似&#xff0c;需要用一个adapter填充数据&#xff0c;同时实现了onPagerChangeListener接口。 ViewPager需要的adapter继承自android.support.v4.view.PageAdapter,getCount返回adapt…

MIT算法导论(一)——算法分析和引论

文章目录1 算法分析及引论1.1 算法1.2 排序1.2.1 插入排序1.2.1.1 插入排序原理1.2.1.2 时间复杂度1.2.1.3 渐进时间复杂度1.2.1.4 回到算法1.2.2 归并排序1.2.2.1 归并排序原理1.2.2.2 归并排序时间复杂度1 算法分析及引论 1.1 算法 算法是一门关注性能的学科&#xff0c;也…

使用Apache Tomcat Maven插件部署运行 Web 项目

2019独角兽企业重金招聘Python工程师标准>>> 什么是Apache Tomcat Maven Plugin&#xff1f; Maven Plugin 是Apache Tomcat 提供的一个Maven插件&#xff0c;它可以在你没有tomcat容器时将任何一个war项目文件部署在该插件上提供访问。 为什么要用Apache Tomcat Ma…

POJ2104 (平方分割)二分查找理解。

题意&#xff1a;任意区间求第k大数 思路&#xff1a; 预处理&#xff1a;利用平方分割&#xff08;分桶法&#xff09;把区间切割成B sqrt(n)大小的一块块&#xff0c;然后每个各自排序。 二分第k大数x&#xff0c;接着就需要求[l,r]区间中x的排名&#xff0c;与k比较&#x…

每日一题——leetcode237 删除链表中的结点

1 题目 237. 删除链表中的节点 难度简单 请编写一个函数&#xff0c;用于 删除单链表中某个特定节点 。在设计函数时需要注意&#xff0c;你无法访问链表的头节点 head &#xff0c;只能直接访问 要被删除的节点 。 题目数据保证需要删除的节点 不是末尾节点 。 示例 1&am…

机器学习的练功心法(一)——机器学习概述

1 机器学习概述 文章目录1 机器学习概述1.1 学习方法1.2 什么是机器学习1.3 监督学习1.4 无监督学习1.5 强化学习1.6 机器学习的开发流程1.1 学习方法 引入&#xff1a;对于机器学习来说&#xff0c;我们需要有一个大局观&#xff0c;什么是大局观&#xff1f;你站的比别人高&…

项目管理规范

从鼬加入的那一周开始&#xff0c;四代就开始着手准备起草代码规范了。代码规范不可少很多人理直气壮的认为&#xff0c;创业团队&#xff0c;或者说人数少的团队根本不需要代码规范。他们的口头禅经常是&#xff1a;“没办法啊&#xff01;我们需要快速的完成客户的需求啊&…

每日一题——王道考研2.2.4.1

1 题目 从顺序表中删除具有最小值的元素&#xff08;假设唯一&#xff09;&#xff0c;并由函数返回被删元素的值。空出的位置由最后一个元素填补&#xff0c;若顺序表为空&#xff0c;则显示出错信息并退出运行。 ——出自王道书2023版2.2.4的第二大题第一小题 2 思路 既然…

批处理启动vm虚拟机服务 vm12启动无界面启动vm虚拟机系统 windows上如何操作服务 sc net启动关闭服务...

windows(win10)批处理脚本 打开vm虚拟机的服务,并且开启无界面虚拟机 echo off net start "vds" net start "VMAuthdService" net start "VMnetDHCP" net start "VMware NAT Service" net start "VMUSBArbService" net star…

机器学习的练功心法(二)——概述

2 概述 文章目录2 概述2.1 模型概述2.1.1 预测房价问题2.1.2 符号2.2 代价函数2.3 代价函数的用处2.4 回到问题2.5 梯度下降2.6 梯度下降知识点总结2.7 线性回归模型的梯度下降2.1 模型概述 2.1.1 预测房价问题 在我们要开始下面的问题前&#xff0c;我们先来看一些关于房价预…

Jquery对象和DOM对象---Jquery API (1)

文&#xff0f;饥人谷_韩宝亿&#xff08;简书作者&#xff09;原文链接&#xff1a;http://www.jianshu.com/p/98a0c82c47e4著作权归作者所有&#xff0c;转载请联系作者获得授权&#xff0c;并标注“简书作者”。一、为什么要用Jquery? DOM API 1.难用 要想拿到一个对象&…

机器学习的练功心法(三)——特征工程

文章目录致谢3 特征工程3.1 Sklearn工具及数据集3.2 数据集3.3 数据集的划分3.4 特征工程介绍3.4.1 为什么需要特征工程3.4.2 什么是特征工程3.4.3 特征提取3.4.3.1 字典特征提取3.4.3.2 文本特征提取3.4.3.3 中文文本特征提取3.4.3.4 TF-IDF算法3.5 特征预处理3.5.1 特征预处理…

数据库杂谈(六)——数据库管理系统

文章目录6 数据库管理系统6.1 数据库管理系统结构简介6.2 进程结构6.2.1 进程的分类6.2.2 线程的由来6.2.3 建立进程的过程6.3 数据目录6 数据库管理系统 6.1 数据库管理系统结构简介 数据库管理系统DBMS是数据库系统的核心。而目前市场上我们接触到的商品化DBMS大多数是关系…

booth算法实现乘法器

booth算法充分的利用到了补码的重要性&#xff0c;使得我们在利用补码进行计算时减少了很多时序。下面的表格是我们假设2 作为乘数所进行的分析。接下来&#xff0c;我将用代码向大家阐述。 1、开始的时候在乘数2的‘负一位’加上一个默认0值00100 2、先判断[0:-1],结果是2‘b0…

OS实验一实验报告

实验一、命令解释程序的编写实验 专业&#xff1a;商业软件工程 姓名&#xff1a;王泽锴 学号&#xff1a;201406114113 一、实验目的 &#xff08;1&#xff09;掌握命令解释程序的原理&#xff1b; &#xff08;2&#xff09;*掌握简单的DOS调用方法&#xff1b; &#xf…

机器学习的练功方式(四)——KNN算法

文章目录致谢致歉4 KNN算法4.1 sklearn转换器和估计器4.1.1 转换器4.1.2 估计器4.2 KNN算法4.2.1 概述4.2.2 电影类型分析4.2.3 算法实现致谢 闵氏距离_百度百科 (baidu.com) 机器学习之KNN&#xff08;k近邻&#xff09;算法详解_平原的博客-CSDN博客_knn 鸢尾花(Iris)数据集_…

数据库杂谈(七)——数据库的存储结构

文章目录7 数据库的存储结构7.1 数据库访问管理-文件组织7.2 数据库访问管理——索引技术7 数据库的存储结构 让我们重新温习第六讲的所学知识。 这个图实际上我们要关注的是蓝色箭头指向的那一层。在这一层之上&#xff0c;我们都是对SQL语句动手&#xff0c;而在这一层之下&…

JSP中直接在输入框中校验

jsp: <label class"control-label col-sm-2" for"codeAdd">险种代码<span style"color: red;">*</span></label> <div classcontrols col-sm-4> <input class"form-control remote-validate" data-r…

【iCore3 双核心板_FPGA】例程十二:Modelsim仿真实验

实验指导书及代码包下载&#xff1a; 链接&#xff1a;http://pan.baidu.com/s/1hs4zNFY 密码&#xff1a;5z62 iCore3 购买链接&#xff1a; https://item.taobao.com/item.htm?id524229438677