三种操作系统前驱图类型详细总结进程管理之如何使用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.3、计算尾节点 PV
对于 P3 进程,同理,只有在前驱节点 P2 执行完成将信号量 S2 传过来之后才可以执行,然后进程结束。P3 进程执行图如下图所示:
题干信息:使用 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 进程执行图如下图所示:
3.2.2、计算中间节点 PV
对于中间节点进程 P4,只有在前驱进程 P1、P2、P3 都已经完成之后才可以执行,而进程 P1、P2、P3 均有可能在阻塞队列中,故进程 P4 需要先等待 P1、P2、P3 进程的执行(即 P 操作)接收信号量,然后执行 P4 自身进程唤醒 P5 操作(即 V 操作)占用一条信号量 S4。P4 进程执行图如下图所示:
3.3、并联进程趋于展开
并联进程趋于展开是并联进程中较为难的一种,但是理清了思绪还是得心应手的。举例题如下:
3.3.2、计算中间节点 PV
对于进程 P2,需要等到 P1 的信号量 S1,并唤醒 P3、P4 进程分别占用信号量 S1、S2。P2 进程执行图如下图所示:
对于进程 P4,需要等到进程 P2、P3 的信号量 S3、S4 才可以执行,然后激活进程 P5,并占用一个信号量 S5。P4 进程执行图如下图所示:
"三种操作系统前驱图类型详细总结进程管理之如何使用PV操作"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!