进程资源分配的安全性判断与安全序列

发布于:2025-07-22 ⋅ 阅读:(14) ⋅ 点赞:(0)

        假设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】能为每个进程分配直到最大需求的所需资源,使每个进程都可顺利完成,执行该序列能让系统进入到安全状态,故该序列为安全序列。


网站公告

今日签到

点亮在社区的每一天
去签到