操作系统原理:进程 PV 操作如何计算?全网最全三种前驱图计算类型总结
文章目录
- 前言
- 一、PV 操作定义
- 1.1、P 操作定义
- 1.2、V 操作定义
- 二、串联进程(单线前驱图)
- 2.1、什么是单线前驱图?
- 2.2、如何计算单线前驱图的 PV?
- 2.2.1、计算前驱节点 PV
- 2.2.2、计算中间节点 PV
- 2.2.3、计算尾节点 PV
- 三、并联进程(多线前驱图)
- 3.1、什么是多线前驱图?
- 3.2、并联进程趋于合并
- 3.2.1、计算前驱节点 PV
- 3.2.2、计算中间节点 PV
- 3.2.3、计算尾节点 PV
- 3.3、并联进程趋于展开
- 3.3.1、计算前驱节点 PV
- 3.3.2、计算中间节点 PV
- 3.3.3、计算尾节点 PV
- 总结
前言
关于 PV 操作基本都是结合进程管理的前驱图来进行考察,历年以来,无论是软考还是操作系统的单独考试,占有很大的比重。今天我们总结两种在考试中常考的类型。一种是单线前驱图,即串联进程,另一种是多线前驱图,即并联进程。并联进程下又细分为两类:一种逐渐向后合并(进程趋于合并),另一种是前驱图逐渐向后展开。两种类型你都掌握了应试也就毫无问题了。
一、PV 操作定义
本文中的 S 为信号量。关于前驱图以及信号量的基础知识本篇不作详细介绍。
1.1、P 操作定义
S:=S-1,若 S≥0,则执行 P 操作的进程继续执行;若 S<0,则置该进程为阻塞状态(因为无可用资源),并将其插入阻塞队列。
定义这么长,我们只需要谨记:执行 P 操作的进程将进入等待队列。
1.2、V 操作定义
S:=S+1,若 S>0,则执行 V 操作的进程继续执行;若 S≤0,则从阻塞状态唤醒一个进程,并将其插入就绪队列,然后执行 V 操作的进程继续。
定义这么长,我们只需要谨记:执行 V 操作的进程将从阻塞队列中唤醒一个进程。
二、串联进程(单线前驱图)
2.1、什么是单线前驱图?
串联进程(单线前驱图)是计算 PV 操作中最为简单的。那什么是单线前驱图呢?举例前驱图如下:
题干信息:使用 PV 操作控制进程 P1、P2、P3 执行的过程,设置 2 个信号量分别为 S1、S2 且初值均为零。分别列出 3 个进程的进程执行图来计算每个进程的 PV 操作。
我们可以看到 P1、P2、P3 三个进程是串联关系,一一执行,只有前面的进程执行了后面的才可以执行,我们将这类前驱图归类为单线前驱图。
2.2、如何计算单线前驱图的 PV?
那我们计算该进程的 PV 操作呢?我们将节点分为前驱节点(即首节点),中间节点,尾节点分别计算 PV。
2.2.1、计算前驱节点 PV
对于前驱的首结点 P1 进程,进程 P1 从初始状态执行操作的结果就是从阻塞队列中唤醒一个进程,即唤醒 P2,故其只有 V 操作,占用一个信号量 S1,进程 P1 执行 V(S1)操作。P1 进程执行图如下图所示:
2.2.2、计算中间节点 PV
对于中间节点 P2 进程,只有在前驱进程 P1 完成之后才可以执行,如果进程 P1 阻塞 P2 就无法正常执行,处于等待状态,故 P2 进程是从等待 S1 的信号量,运行本进程,结果就是唤醒另一个进程即 P3 进程,并占用一个信号量 S2。P2 进程执行图如下图所示:
2.2.3、计算尾节点 PV
对于 P3 进程,同理,只有在前驱节点 P2 执行完成将信号量 S2 传过来之后才可以执行,然后进程结束。P3 进程执行图如下图所示:
三、并联进程(多线前驱图)
3.1、什么是多线前驱图?
多线前驱图即并联进程,多个进程趋于合并或者单个进程展开为多个进程,类似于初中我们所学的串并联电路知识。下面我们分别从并联进程趋于合并与并联进程趋于展开两个方向来讨论不同情况如何计算 PV 操作。
3.2、并联进程趋于合并
并联进程趋于合并是并联进程中较为简单的,我在这里举一例较为经典的例题。进程前驱图如下:
题干信息:使用 PV 操作控制进程 P1、P2、P3、P4 并发执行的过程,设置 4 个信号量分别为 S1、S2、S3、S4 且初值均为零。分别列出 5 个进程的进程执行图来计算每个进程的 PV 操作。
3.2.1、计算前驱节点 PV
对于前驱的首结点,以 P1 进程为例,进程 P1 从初始状态执行操作的结果就是从阻塞队列中唤醒一个进程,即唤醒 P4,故其只有 V 操作,并占用一个信号量 S1,故进程 P1 执行 V(S1)操作。P1 进程执行图如下图所示:
同理,P2、P3 进程与 P1 相同,三个进程分别各占三个信号量S1、S2、S3,进程执行图如下图所示:
3.2.2、计算中间节点 PV
对于中间节点进程 P4,只有在前驱进程 P1、P2、P3 都已经完成之后才可以执行,而进程 P1、P2、P3 均有可能在阻塞队列中,故进程 P4 需要先等待 P1、P2、P3 进程的执行(即 P 操作)接收信号量,然后执行 P4 自身进程唤醒 P5 操作(即 V 操作)占用一条信号量 S4。P4 进程执行图如下图所示:
3.2.3、计算尾节点 PV
对于 P5 进程,同理,需要接收到 P4 进程的信号量才可以运行,然后进程结束。P5 进程执行图如下图所示:
3.3、并联进程趋于展开
并联进程趋于展开是并联进程中较为难的一种,但是理清了思绪还是得心应手的。举例题如下:
题干信息:使用 PV 操作控制进程 P1、P2、P3、P4、P5 执行的过程,设置 5 个信号量分别为 S1、S2、S3、S4、S5 且初值均为零。分别列出 5 个进程的进程执行图来计算每个进程的 PV 操作。
分析:对于本前驱图,我们应该注意 P2、P3、P4 进程,信号量的判别根据进程标识顺序走。
3.3.1、计算前驱节点 PV
前驱节点进程 P1跟之前我们讲到的一样,这里不再赘述。P1 进程执行图如下图所示:
3.3.2、计算中间节点 PV
对于进程 P2,需要等到 P1 的信号量 S1,并唤醒 P3、P4 进程分别占用信号量 S1、S2。P2 进程执行图如下图所示:
对于进程 P3,需要等到进程 P2 的信号量 S2 才可以执行,然后激活进行 P4,占用一个信号量 S4。P3 进程执行图如下图所示:
对于进程 P4,需要等到进程 P2、P3 的信号量 S3、S4 才可以执行,然后激活进程 P5,并占用一个信号量 S5。P4 进程执行图如下图所示:
3.3.3、计算尾节点 PV
对于尾节点进程 P5,需要等到进程 P4 的信号量 S5 才可以执行,直到进程结束。P5 进程执行图如下图所示:
总结
本文给大家介绍了操作系统基本原理中的一个重要知识点,进程管理之 PV 操作。我们通过对不同的前驱图进行分类,总结了两大类最为常见的前驱图类型,在不同的情境下设置不同的处理思路。循序渐进,从单进程到多进程,处理思路跟着题目给出的前驱图表示顺序走(跟着顺序走你会发现都是单进程的计算方式)。相信本篇文章更能让你在计算过程中起到事半功倍的效果。
我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!
操作系统原理:进程 PV 操作如何计算?全网最全三种前驱图计算类型总结相关推荐
- 【MySQL】对JSON数据操作(全网最全)
[MySQL]对JSON数据操作(全网最全) 总所周知,mysql5.7以上提供了一种新的字段格式-json,大概是mysql想把非关系型和关系型数据库一口通吃,所以推出了这种非常好用的格式,这样,我 ...
- JSP中的注释操作及JSP中的三种Scriptlet
***JSP中的注释操作及JSP中的三种Scriptlet******** 1,JSP中的注释操作 <h3><1>显示注释</h3>语法:<!--注释内容-- ...
- 操作系统中的P-V操作(转)
信号量是最早出现的用来解决进程同步与互斥问题的机制(也可实现进程通信),包括一个称为信号量的变量及对它进行的两个原语操作.信号量为一个整数,我们设这个信号量为:sem.很显然,我们规定在sem大于等于 ...
- Linux 操作系统原理 — 进程管理 — 进程调度
目录 文章目录 目录 进程调度 CFS 完全公平调度器 SCHED_NORMAL(普通进程调度算法) SCHED_BATCH(批量调度算法) RTS 实时调度器 SCHED_FIFO(先到先服务调度算 ...
- 【操作系统原理】1.操作系统概述
写在前面 这是作者在本学期学习操作系统原理的时候做的笔记,由于本人水平有限,对很多概念的理解比较浅显/(ㄒoㄒ)/,欢迎各位大佬多多评价,多多批评指正,希望与大家互相交流学习(●'◡'●). 参考资料 ...
- 简单理解操作系统中的PV操作
可以这样理解: 临界区门前有棵树 用来挂红灯 进程想进CPU的门 先得上树取下盏灯(调用一次P) 取下一个去敲门(S=S-1) 如果树上没有灯取(S<=0) 树说暂时欠你一盏灯(S为负时) 进程 ...
- 【操作系统】经典PV操作题目
5个经典PV操作题(附答案) 三个进程之间的同步 pv操作的经典习题 PV操作题型整理 生产者和消费者 生产者消费者问题 当只有一个生产者和一个消费者的时候,且只有一个缓冲区 要考虑生产者和消费者两个 ...
- Python解决操作系统习题中PV操作过桥问题
上图是一道操作系统PV操作的习题,用Python解决之,建立一个线程模拟行人从北向南过桥,另一个线程模拟行人从南向北过桥,建立四个信号量,分别实现对桥.北桥段.南桥段和桥中央的互斥. north_si ...
- 进程线程004 Windows线程切换的三种方式
文章目录 主动切换(调用API) KiSwapContext函数分析 哪些API调用了SwapContext函数 总结 时钟中断切换 如何中断一个正在执行的程序 系统时钟 时钟中断的执行流程 总结 时 ...
最新文章
- 解决ms_cannot_allocmem错误的两种方法
- 【原创】修改C#_WinForm设计中两个默认图标
- Weblogic 10.3.5在64位Windows系统下的安装和配置
- CSS样式(一)- 基本语法
- matlab传热模拟计算,MATLAB生物化工计算与模拟
- womic网络错误_wo mic 电脑版下载-WO Mic Client下载 3.4 最新电脑版 - 河东下载站
- js中outerHTML的问题
- 计算机术语alu,计算机术语大全
- animate发布html5教程,Adobe Animate CC 中的 HTML 发布模板 - Adobe Animate 用户指南
- 织梦cms怎么上传html模板,织梦dedecms 本地模板安装图文方法
- 北京君正案例:超能面板PRO采用4英寸IPS超清多彩屏,值不值得买?
- nginx 502 Bad Gateway解决办法
- 结构体构造和析构函数
- centos7-ip代理转发功能的配置
- cad坐标归零lisp_Z坐标归零的方法,不用插件,直接cad中修改
- 一文搞懂AVB的使用
- WPS JS 宏实现表间导入
- 南京师范大学计算机技术研究生就业,南京师范大学计算机技术在职研究生怎么样?...
- 【jq】自适应PC端幻灯片样式
- html合并的列内容不居中显示,表格不能合并居中 excel表格不能合并单元格怎么办...
热门文章
- 还在用 Python 2.x?Python 3.7.0 正式发布!
- 对象方法(包含es6)
- app获取个人信息是否合法_重拳出击!42款APP过度收集用户信息被点名
- linux 拖动图标有拖影_想要实现元素拖动效果,但是一拖动出现禁止的图标
- 如何把极坐标化为直角坐标_2019高考100题之063(极坐标)
- 移动端 uniapp 国际化一站式解决方案
- SpringCloud Gateway 集成 oauth2 实现统一认证授权_03
- linux shell读取配置文件中的内容
- 创新小组 实战Git团队企操作手册_精华版本
- linux查看pid 对应的程序_资深程序员总结:分析 Linux 进程的 6 个方法,我全都告诉你...