【操作系统】银行家算法,当其中一个进程发出请求时,需要判断系统是否能够将资源分配给它
银行家算法的基本思想是分配资源前,先判断系统是否是安全的,只有在系统安全的情况下,才会进行分配资源
上接前一篇博文
Q:在银行家算法中,若出现下述资源分配情况(5 个进程,资源 A/B/C 共 3 类)
假设系统有 A类资源5个,B类资源7个,C类资源 12 个,某一时刻有以下分资源分配
Process Max Allocation Need
A B C A B C A B C
P1 4 1 3 2 1 2 2 0 1
P2 0 6 2 0 2 2 0 4 0
P3 1 2 2 0 0 1 1 2 1
P4 1 0 3 1 0 0 0 0 3
P5 3 5 7 1 2 5 2 3 2
Max[i][j]=allocation[i][j]+need[i][j]
如果P2提出请求 Request(0,1,0)后,系统能否将资源分配给它 ? 为什么?(能与不能都要求详细写出各自的理由)
我们在分配资源前,已经先行判断过了系统是安全的,那么,在系统安全的情况下,就会进行分配资源
当P2提出请求的时候,银行家算法要按照以下规则来进行判断
第一步,判断该进程的Request是否小于等于该进程的Need,如果是,就跳转到下一步,如果不是,就说明不能分配资源
那么,我先将之前P2的Need给放上来(0,4,0)
那很明显,该进程的Request是小于该进程的Need的
第二步,判断该进程的Request是否小于等于该进程已分配的资源,如果是,就跳转到下一步,如果不是,就说明不能分配资源
那么,我先将之前P2的Available给放上来(1,2,2)
那很明显,该进程的Request是小于该进程已分配的资源的
所以,我们可以执行第三步,系统先试探性的分配资源
要满足如下条件:
Available[i]-=Request[i],那么很明显Available[i]=Available[i]-Request[i]=(1,2,2)-(0,1,0)=(1,1,2)
Allocation[i]+=Request[i],那么很明显Allocation[i]=Allocation[i]+Request[i]=(0,2,2)+(0,1,0)=(0,3,2)
Need[i]-=Request[i],那么很明显Need[i]=Need[i]-Request[i]=(0,4,0)-(0,1,0)=(0,3,0)
之后系统进行安全性检查,如果安全就说明可以分配,如果不安全就说明不能分配
此时可以发现,Available不满足任何一个进程的need,所以显而易见,系统不能够将资源分配给它
【操作系统】银行家算法,当其中一个进程发出请求时,需要判断系统是否能够将资源分配给它
银行家算法的基本思想是分配资源前,先判断系统是否是安全的,只有在系统安全的情况下,才会进行分配资源
上接前一篇博文
Q:在银行家算法中,若出现下述资源分配情况(5 个进程,资源 A/B/C 共 3 类)
假设系统有 A类资源5个,B类资源7个,C类资源 12 个,某一时刻有以下分资源分配
Process Max Allocation Need
A B C A B C A B C
P1 4 1 3 2 1 2 2 0 1
P2 0 6 2 0 2 2 0 4 0
P3 1 2 2 0 0 1 1 2 1
P4 1 0 3 1 0 0 0 0 3
P5 3 5 7 1 2 5 2 3 2
Max[i][j]=allocation[i][j]+need[i][j]
如果P2提出请求 Request(0,1,0)后,系统能否将资源分配给它 ? 为什么?(能与不能都要求详细写出各自的理由)
我们在分配资源前,已经先行判断过了系统是安全的,那么,在系统安全的情况下,就会进行分配资源
当P2提出请求的时候,银行家算法要按照以下规则来进行判断
第一步,判断该进程的Request是否小于等于该进程的Need,如果是,就跳转到下一步,如果不是,就说明不能分配资源
那么,我先将之前P2的Need给放上来(0,4,0)
那很明显,该进程的Request是小于该进程的Need的
第二步,判断该进程的Request是否小于等于该进程已分配的资源,如果是,就跳转到下一步,如果不是,就说明不能分配资源
那么,我先将之前P2的Available给放上来(1,2,2)
那很明显,该进程的Request是小于该进程已分配的资源的
所以,我们可以执行第三步,系统先试探性的分配资源
要满足如下条件:
Available[i]-=Request[i],那么很明显Available[i]=Available[i]-Request[i]=(1,2,2)-(0,1,0)=(1,1,2)
Allocation[i]+=Request[i],那么很明显Allocation[i]=Allocation[i]+Request[i]=(0,2,2)+(0,1,0)=(0,3,2)
Need[i]-=Request[i],那么很明显Need[i]=Need[i]-Request[i]=(0,4,0)-(0,1,0)=(0,3,0)
之后系统进行安全性检查,如果安全就说明可以分配,如果不安全就说明不能分配
此时可以发现,Available不满足任何一个进程的need,所以显而易见,系统不能够将资源分配给它