某系统有A、B、C、D四类资源可供五个进程P1、P2、P3、P4、P5共享。系统对这四类资源的拥有量为:A类3个、B类14个、C类12个、D类12个进程对资源的需求和分配情况如下:
(1) 现在系统的各类资源还剩余多少?
根据下表:MAX表示最大需求数,ALL表示已分配的资源,NEED表示还需要的资源(最大需求量-已占有资源)
MAX | ALL | NEED | ||||||||||
A | B | C | D | A | B | C | D | A | B | C | D | |
p1 | 0 | 0 | 1 | 2 | 0 | 0 | 1 | 2 | 0 | 0 | 0 | 0 |
p2 | 1 | 7 | 5 | 0 | 1 | 0 | 0 | 0 | 0 | 7 | 5 | 0 |
p3 | 2 | 3 | 5 | 6 | 1 | 3 | 5 | 4 | 1 | 0 | 0 | 2 |
p4 | 0 | 6 | 5 | 2 | 0 | 6 | 3 | 2 | 0 | 0 | 2 | 0 |
p5 | 0 | 6 | 5 | 6 | 0 | 0 | 1 | 4 | 0 | 6 | 4 | 2 |
系统各类资源的剩余量:系统对各类资源的拥有量 - 各类资源已分配的量
得到Avail=A:1 B:5 C:2 D:0
① work表示剩余资源,从上表中NEED中各类资源选小于1,5,2,0的数,P4,P1都满足,下面选择P1
② 运行完P1后,work+all都释放了,则作为下一个资源的剩余资源,再在各类资源的NEED中找小于(1,5,3,2)的资源,以此类推:
work | all | need | work+all | T&F | |||||||||||||
A | B | C | D | A | B | C | D | A | B | C | D | A | B | C | D | ||
P1 | 1 | 5 | 2 | 0 | 0 | 0 | 1 | 2 | 0 | 0 | 0 | 0 | 1 | 5 | 3 | 2 | T |
P4 | 1 | 5 | 3 | 2 | 0 | 6 | 3 | 2 | 0 | 0 | 2 | 0 | 1 | 11 | 6 | 4 | T |
P2 | 1 | 11 | 6 | 4 | 1 | 0 | 0 | 0 | 0 | 7 | 5 | 0 | 2 | 11 | 6 | 4 | T |
P3 | 2 | 11 | 6 | 4 | 1 | 3 | 5 | 4 | 1 | 0 | 0 | 2 | 3 | 14 | 11 | 8 | T |
P5 | 3 | 14 | 11 | 8 | 0 | 0 | 1 | 4 | 0 | 6 | 4 | 2 | 3 | 14 | 12 | 12 | T |
(2) 现在系统是否处于安全状态?为什么?
因为可以找到如P1->P4->P2->P3->P5这样的安全序列,所以该系统处于安全状态。
(3) 如果现在进程P2提出需要A类资源0个、B类资源4个、C类资源2个和D类资源0个,系统能否去满足它的请求? 请说明原因。
P2:request(A:0,B:4,C:2,D:0)
①以下条件都满足才能继续下一步:
requestNEED(0,7,5,0)
requestAvail(1,5,2,0)
②
Avail=Avail-request=(1, 5,2,0) - (0,4,2,0) =(1,1,0,0)
NEED=NEED-request=(0,7,5,0) - (0,4,2,0) =(0,3,3,0)
ALL=ALL+request=(1,0,0,0)+(0,4,2,0) = (1,4,2,0)
再将新的数据换到以上表格的P2中,继续以上步骤,如果能得出一个安全序列,则能满足请求,如果不能得到一个安全序列,则表示不能满足请求。