假设5个进程P0、P1、P2、P3、P4共享三类资源R1、R2、R3,这些资源总数分别为18、6、22。T0时刻的资源分配情况如下表所示,此时存在的一个安全序列是( )
进程 |
已分配资源 |
资源最大需求 |
||||
R1 |
R2 |
R3 |
R1 | R2 | R3 | |
P0 |
3 | 2 | 3 | 5 | 5 | 10 |
P1 |
4 | 0 | 3 | 5 | 3 | 6 |
P2 | 4 | 0 | 5 | 4 | 3 | 6 |
P3 | 2 | 0 | 4 | 4 | 2 | 5 |
P4 | 3 | 1 | 4 | 4 | 2 | 4 |
A. P0,P2,P4,P1,P3 B. P1,P0,P3,P4,P2
C. P2,P1,P0,P3,P4 D. P3,P4,P2,P1,P0
首先,我们需要了解一下,什么是安全序列?
安全序列
如果系统在执行进程的过程中,对进程按某种不安全序列进行资源分配会使系统进入不安全状态,这个时候需要进行【进程等待】。
【需要知道的是】不是所有不安全状态都是死锁状态。
【需要知道的是】系统进入不安全状态后,有一定概率进而进入死锁状态。
【需要知道的是】计算机操作系统处于安全状态,系统便可避免进入死锁状态。
为了进入安全状态,系统会允许进程动态地申请资源,并在系统资源分配给进程之前,系统会根据进程序列先计算判断是否能进入安全状态。
如果系统能按某种序列为每个进程分配直到最大需求的所需资源,使每个进程都可顺利完成,则该序列便可称为安全序列。如果按该安全序列进行资源分配就会使系统进入安全状态,此时系统才会允许将资源分配给进程去执行。
这里要求的是5个进程在R1、R2、R3这3个资源是否存在安全序列,也提供了1个表,我们可以将这个表换个形式延伸继续做,从而更方便我们理解整个计算过程。
进程 |
已分配资源 |
资源最大需求 |
||||
R1 |
R2 |
R3 |
R1 | R2 | R3 | |
P0 |
3 | 2 | 3 | 5 | 5 | 10 |
P1 |
4 | 0 | 3 | 5 | 3 | 6 |
P2 | 4 | 0 | 5 | 4 | 0 | 11 |
P3 | 2 | 0 | 4 | 4 | 2 | 5 |
P4 | 3 | 1 | 4 | 4 | 2 | 4 |
R1的资源总数为18 | R2的资源总数为6 | R3的资源总数为22 | ||||
目前已分配资源量 |
3+4+4+2+3=16 | 2+0+0+0+1=3 | 3+3+5+4+4=19 | |||
可利用资源矢量Available |
18-16=2 | 6-3=3 | 22-19=3 | 【可利用资源矢量】由【各资源总数】减去【目前已分配资源量】可得 | ||
故目前资源R1、R2、R3的可利用资源矢量为(2,3,3) | ||||||
⬇由进程对相应资源的最大需求减去目前该进程已分配到的资源⬇ | ||||||
R1 | R2 | R3 | ||||
进程P0需要的资源量Need | 2 | 3 | 7 | |||
进程P1需要的资源量Need | 1 | 3 | 3 | |||
进程P2需要的资源量Need | 0 | 0 | 6 | |||
进程P3需要的资源量Need | 2 | 2 | 1 | |||
进程P4需要的资源量Need | 1 | 1 | 0 |
由上表可知,R1、R2、R3的可利用资源矢量为(2,3,3)
进程P0需要的资源量为(2,3,7),其中对资源R3需要的资源量达到7,很明显目前可利用资源矢量(2,3,3)里的最后1个3不够用,所以判断如果以进程P0开头的这个【P0,P2,P4,P1,P3】序列进行资源分配有可能会让系统进入到不安全的状态,故序列【P0,P2,P4,P1,P3】不是安全序列。
进程P1需要的资源量为(1,3,3),目前可利用资源矢量(2,3,3)都能涵盖进程P1的需求,所以判断以进程P1开头的序列可能是安全序列。
进程P2需要的资源量为(0,0,6),其中对资源R3需要的资源量达到6,很明显目前可利用资源矢量(2,3,3)里的最后1个3不够用,所以判断如果以进程P2开头的这个【P2,P1,P0,P3,P4】序列进行资源分配有可能会让系统进入到不安全的状态,故序列【P2,P1,P0,P3,P4】不是安全序列。
进程P3需要的资源量为(2,2,1),目前可利用资源矢量(2,3,3)都能涵盖进程P3的需求,所以判断以进程P3开头的序列可能是安全序列。
通过上面我们得出,以进程P1或进程P3开头的序列可能是安全序列。
因为通过上面的表格我们已计算出目前资源R1、R2、R3的【可利用资源矢量Available】为(2,3,3)
如果一开始给进程P1分配资源,
【R1的可利用资源】为2,那么分1个去给P1使它原本已分配资源4个加上1个为5个,此时满足资源最大需求5,它满足的话它这个进程P1对资源R1的资源获取就完成,同时也就将R1的资源最大需求5个给释放出来,因为刚才【R1的可利用资源】为2,那么分1个去给P1,也就是只剩下了1个,那么这1个加上刚刚释放出来的5个,也就是1个+5个=6个,故此时的【R1的可利用资源】为6个。
【R2的可利用资源】为3,它的原本已分配给进程P1的资源为0,即还没分配,它的资源最大需求为3,那么从【R2的可利用资源】3个全部抽出来去满足进程P1对R2资源的最大需求,它满足的话进程P1对资源R2的资源获取也就完成,也就将R2的资源最大需求3个给释放出来,因为刚才【R2的可利用资源】已全部抽出,故没有剩下,所以0个+3个=3个,故此时的【R2的可利用资源】为3个。
【R3的可利用资源】为3,它的原本已分配资源为3,进程P1对它的资源最大需求为6,那么从【R3的可利用资源】3个全部抽出来去满足进程P1对R3资源的最大需求,它满足的话进程P1对资源R3的资源获取也就完成,也就将R3的资源最大需求6个给释放出来,因为刚才【R3的可利用资源】已全部抽出,故没有剩下,所以0个+6个=6个,故此时的【R3的可利用资源】为6个。
即给进程P1分配资源完成后,
R1、R2、R3的【可利用资源矢量Available】将变为(6,3,6)
而题目选项讲到的以进程P1开头的序列为【P1,P0,P3,P4,P2】,即进程P1后面为进程P0,进程P0对资源R1、R2、R3的最大需求为(5,5,10),其中P0对R2的资源最大需求为5,此时P1分配资源完成后,【R2的可利用资源】仅为3,无法满足进程P0对R2的需求,所以判断如果以进程P1开头的这个【P1,P0,P3,P4,P2】序列进行资源分配有可能会让系统进入到不安全的状态,所以序列【P1,P0,P3,P4,P2】不是安全序列。
因为通过上面的表格我们已计算出目前资源R1、R2、R3的【可利用资源矢量Available】为(2,3,3)
如果一开始给进程P3分配资源,
【R1的可利用资源】为2,那么分2个去给进程P3使它原本已分配资源2个加上2个为4个,此时满足资源最大需求4,它满足的话这个进程P3对资源R1的资源获取就完成,也就将R1的资源最大需求4个给释放出来,因为刚才【R1的可利用资源】为2,那么分2个去给P3,也就是只剩下了0个,已全部抽出,故没有剩下,所以0个+4个=4个,故此时的【R1的可利用资源】为4个。
【R2的可利用资源】为3,那么分2个去给P3使它原本已分配资源0个加上2个为2个,此时满足资源最大需求2,它满足的话这个进程P3对资源R2的资源获取就完成,也就将R2的资源最大需求2个给释放出来,因为刚才【R2的可利用资源】为3,那么分2个去给P3,也就是只剩下了1个,所以1个+2个=3个,故此时的【R2的可利用资源】为3个。
【R3的可利用资源】为3,那么分1个去给P3使它原本已分配资源4个加上1个为5个,此时满足资源最大需求5,它满足的话这个进程P3对资源R3的资源获取就完成,也就将R3的资源最大需求5个给释放出来,因为刚才【R3的可利用资源】为3,那么分1个去给P3,也就是只剩下了2个,所以2个+5个=7个,故此时的【R3的可利用资源】为7个。
即给进程P3分配资源完成后,
R1、R2、R3的【可利用资源矢量Available】将变为(4,3,7),
而题目选项讲到的以进程P3开头的序列为【P3,P4,P2,P1,P0】,即进程P3后面为进程P4,可查到进程P4的对资源R1、R2、R3的最大需求为(4,2,4),均小于目前R1、R2、R3的【可利用资源矢量Available】(4,3,7)
所以判断以P3开头的序列可能是安全序列。
继续画表进一步判断。以进程P3开头的序列【P3,P4,P2,P1,P0】,进程P3完成后轮到进程P4,已知进程P3完成后R1、R2、R3的【可利用资源矢量Available】为(4,3,7)
以进程P3开头的序列为【P3,P4,P2,P1,P0】 | ||||
R1 | R2 | R3 | ||
进程P4的资源最大需求 |
4 | 2 | 4 | 比如从R1的可利用资源4抽取1个去加上已分配资源的3个来满足进程P4的资源最大需求4,那么现在R1的可利用资源变为3,这个3加上刚刚已满足的最大需求4就是3+4=7,其他以此类推 |
已分配资源 |
3 | 1 | 4 | |
目前可利用资源矢量Available |
4 | 3 | 7 | |
3+4=7 |
2+2=4 |
7+4=11 |
||
进程P2的资源最大需求 |
4 | 0 | 11 | |
已分配资源 |
4 | 0 | 5 | |
目前可利用资源矢量Available |
7 | 4 | 11 | |
7+4=11 |
4+0=4 |
6+11=17 |
||
进程P1的资源最大需求 |
5 | 3 | 6 | |
已分配资源 |
4 | 0 | 3 | |
目前可利用资源矢量Available |
11 | 4 | 17 | |
10+5=15 | 1+3=4 | 14+6=20 | ||
进程P0的资源最大需求 |
5 | 5 | 10 | |
已分配资源 |
3 | 2 | 3 | |
目前可利用资源矢量Available |
15 | 4 | 20 | |
13+5=18 | 1+5=6 | 13+10=23 | ||
故此时假设走完了整个序列,最后的可利用资源矢量Available为 |
18 | 6 | 23 | |
因为
经过上面的各项计算,进程P3开头的序列【P3,P4,P2,P1,P0】能为每个进程分配直到最大需求的所需资源,使每个进程都可顺利完成,执行该序列能让系统进入到安全状态,故该序列为安全序列。 |