当前位置:网站首页>2.3 - P、V、S机制
2.3 - P、V、S机制
2022-08-02 15:10:00 【是李黏黏鸭】
目录
一、进程
1、概念
- 是程序在一个数据集合上的运行过程,是操作系统进行资源分配和调动的独立单位;由程序块,控制块、数据块三个部分组成。
2、进程控制
- 对系统中所有进程,从创建到消亡的整个过程,实施有效的控制,这就是进程控制。
- 计算机的进程控制是由操作系统中内核的原语实现的。
二、原语
1、概念
- 是指由若干条机器指令组成的,用于完成特定功能的程序。
2、特点
- 是原子的,具有原子性,可以理解为要么都做,要么都不做。
- 也就是说原语在执行的时候是不可分割的,要么都做要么都不做。
三、互斥和同步(重点)

1、互斥 - 以过独木桥模型为例
- 如图,千军万马过独木桥, 在同一时刻,只能有一个人通过独木桥;因为在第一个人通过独木桥时,已经将独木桥占用了,其他人就必须等待。
- 所以独木桥就是一种 互斥资源,当一个用户占有之后,其他的用户不能共享,直到第一个用户用完之后将资源释放出来了,其他的用户才可以使用资源。
- 互斥是一种 间接制约的关系,也就是人通过占有这个独木桥,间接的制约了其他用户过河。
- 可以在河上同时设置多个独木桥提高通过率;也就是系统中可以同时设置多个互斥的资源。提高效率。
2、同步 - 以医院模型为例
- 是 合作进程之间的一种 直接制约。可以理解为我不做这个事情,你就没法开始。
- 用户到门诊看病,门诊医生需要血液化验单来判断疾病,遂开具血液化验单;用户到达化验室化验,拿到血液化验单后返回门诊。在这个过程中,门诊医生没有开具血液化验单、用户没有到达血液化验室之前,化验室医生处于等待状态;用户到达血液化验室进行验血、未拿着血液化验单返回门诊之前,门诊医生处于等待状态;用户拿着化验单返回门诊之后,化验室医生又处于等待状态了;
四、临界资源和临界区
1、临界资源
- 指一次只能给一个进程使用的资源。
- 例如千军万马过独木桥模型中,独木桥就是临界资源。
- 对于计算机来讲,很多资源也是属于临界资源的;例如CPU在 同一个时刻只能分给一个进程使用,此时的CPU就是临界资源;
2、临界区
- 要使用临界资源的这一段程序代码就叫做临界区。
五、信号量
1、概念
- 在P、V、S机制中,S指的就是信号量。
- 信号量是一个 整型的变量,信号量的值会根据不同的环境发生变化。
2、分类
- 根据信号量控制的对象不同,可以分为公用信号量、私用信号量。
- 公用信号量用于实现进程间的互斥,用于互斥模型。公用信号量初始的值一般等于1或互斥资源的数量;
- 私用信号量用于实现进程间的同步,用于同步模型。私用信号量初始的值一般等于0或某一个整数,与环境有关。
3、信号量值含义
- 对于S的值,当S>=0时,代表系统有资源分配给这个进程,也就是说资源是可用的状态。
- 对于S的值,当S<0时,其绝对值表示在阻塞队列里等待该资源的进程数。
六、PV操作的定义和作用

1、P操作
- 定义
申请资源的操作。每执行一次P操作,使信号量的值减1。
- 理解
例如做项目需要用到一个设备,需向公司提出项目组需要用这个资源的申请。
- 当执行P操作后的信号量的值大于等于0时,表示系统还有相关资源分配给进程,进程还能拿到相关资源使用。
- 当执行P操作后的信号量的值小于0时,表示系统没有资源分配给进程了,系统就只能让这个需要资源的进程等待了,系统就会把这个进程放到等待的队列里面。
2、V操作
- 定义
释放资源的操作。每执行一次V操作,使信号量的值加1。
- 理解
- 例如做项目需要用到的设备,其他项目组用完之后就空出来了,就相当于将这个资源使用完后释放了。
- 当执行V操作后的信号量的值大于0时,表示等待队列中没有进程等待资源,此时意味着所有进程要么正在执行,要么已经全部执行完毕了。
- 当执行V操作后的信号量的值小于等于0时,表示有进程在等待队列里面等待资源,这个时候系统又有资源释放了,这时就会唤醒一个进程执行,并把这个释放的资源分配给他。
3、PV操作的作用
- 可以实现多个进程的协作运行。
4、注意
- PV操作是成对出现的。 如果没有成对出现,只有P操作没有V操作就会容易出现死锁。
- 考试时首先需要注意下PV操作是否是成对出现的。
七、P、V操作的特点
1、信号量用于互斥模型
- 一般来讲当信号量的类型是一个互斥资源的时候,P、V会在一个程序段中出现。
- 例如:

2、信号量用于同步模型
- 一般来讲,当信号量的类型是一个同步资源的时候,P、V会分别在两个程序段中出现,也就是一对PV被分到了两个程序段中。
- 例如:

单缓冲区:可以理解为在市场上面只能放一个产品;也就是当生产者放了一个产品到市场上面,但是消费者没有购买这个产品,此时生产者想在市场上放第二个产品是不被允许的,放不了的。
可以通过生产者程序段中P(S1)后的执行语句判断,这个信号量是互斥类型还是同步类型的,然后再判断S1的初始值是多少。
程序段解析:
(1)生产者在将产品送到缓冲区之前执行申请资源操作(P(S1))的目的
用来判断市场上的空间状态,有没有市场可以存放产品,最开始有一个市场可以存放产品,所以S1的初始值是1;
(2)消费者在从缓冲区取出产品之前执申请资源操作(P(S2))的目的
用来判断市场上有没有产品可以取。最开始时,生产者还没有将产品放到市场上,所以没有产品可以取出,所以S2的初始值是0;
以先执行消费者的代码为例,分析信号量用于同步模型中的运行流程:
(1)初始S2等于0 ,执行P操作后S2=-1;执行申请资源的P操作后,信号量的值小于0,说明系统中没有进程需要的资源,也就是再市场上没有能取出来的产品,进程进入等待队列,消费者的下半部分代码不执行;去执行生产者的代码;
(2)生产者的代码中,S1的初始值为1,执行申请资源的P操作后S1=0,说明系统中有进程需要的资源,进程正常执行,也就是市场中有空间存放产品,生产者拿到空间后放入产品;继续执行V(S2)操作,S2执行完V操作后,S2=-1+1=0,小于等于0,说明此时队列中有1个正在等待资源的进程,这就会唤醒这个进程,并将资源给这个进程,也就是接着执行消费者的代码P(S2)。
(3)消费者的程序段S2执行P操作,也就是从市场中拿出产品,此时市场又有一个空间了,所以V(S1)=1,大于等于0,说明此时等待队列中没有正在等待资源的进程了。
八、考法1:信号量的变化范围

九、考法2:



(1)
- 首先由题可知S1和S5都分别是在同一段代码中成对出现的,所以S1和S5是互斥信号量;由第一段代码P(S1)下的执行语句:半成品放入B1和第二段代码中P(S1)下的执行语句:从B1取出半成品可判断出P(S1)是控制半成品箱的放和取得操作的,同一时刻不能同时执行放入和取出操作,又因为B1只有1个,所以S1信号量的初始值等于1。S5对应信号量的初始值的判断方式同S1。
- 或者直接将选项中的初始值带入代码中排除错误选项。例如C选项中,S1的初始值为0,那么第一段代码S1执行P操作后等于-1,说明此时系统中没有进程需要的资源,直接进入等待队列,代码就执行不下去了。
(2)
- S2是同步资源,又因为P(S2)和V(S2)之间的代码段有执行语句:半成品->B1,从B1取出半成品,所以可以判断S2是用于判断半成品箱B1中是否有空间存放产品的。S4是同步资源,又因为P(S4)和V(S4)之间的代码段有执行语句:成品->B2,从B2取出成品,所以可以判断S4是用于判断半成品箱B2中是否有空间存放产品的。又因为B1可存放N见半成品,B2可存放M件成品,所以S2的初始值为N,S4的初始值为M。
边栏推荐
猜你喜欢
随机推荐
数据防泄漏产品该如何选择
多线程------实际篇
aPaaS低代码平台(二) | 快速构建业务模型
Based on mobileNet dog breed classification (migration)
Qt | QWidget 的一些总结
5000mAh大电池!华为全新鸿蒙手机今晚亮相:更流畅更安全
MySQL-2-设置权限-创建表
“绿色低碳+数字孪生“双轮驱动,解码油气管道站升级难点 | 图扑软件
Apache APISIX 2.15 版本发布,为插件增加更多灵活性
Traverse Heap PAT Class A 1155 Heap Path
阿里面试败北:5种微服务注册中心如何选型?这几个维度告诉你
动态权重之多任务不平衡论文 (一)
快速搞懂Seata分布式事务AT、TCC、SAGA、XA模式选型
Eight big software attack overview of supply chain
Apache management and web optimization
CS5210的参数详情资料分享
【知乎高赞】为什么很多资质平庸的女人嫁得很好,很多优质女性却成了剩女?
redis学习四redis消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU
Qt | 关于样式表的使用 QStyleSheet
IPtables and binlog