首页 > 试题广场 >

根据银行家算法,填写三个时刻的进行占有和阻塞情况

[问答题]
采用银行家算法防止死锁,用Pi→n表示Pi 进程申请n个资源,用Pi←n表示Pi 进程占有n个资源。如果占有n个资源的进程被阻塞,可以用Pi*←n 来表示,假设系统中有某类资源10个,进程P1, P2, P3各自的最大需求量为3,7,10个,各进程T0时刻开始运行: T1时刻发生: P1→2, P2→3, P3→3 T2时刻发生: P2→1, P3→2 T3时刻发生: P1→1, P2→1 根据银行家算法,填写三个时刻的进行占有和阻塞情况.
补充一下银行家算法的概念
避免死锁:银行家算法
在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。该方法将系统的状态分为安全和不安全,只要系统处于安全状态,便可避免 死锁 的发生。
算法原理:在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。
所以有几个关键的数据结构:每个进程当前需要的资源NEED[i][j] 每个进程最多需要的资源MAX[i][j] 每个进程当前已分配到的资源ALLOCATION[i][j] 当前可用的资源AVAILABLE[i][j]
算法假设:每个进程都可以得到他想要的资源,并且得到资源后执行,执行后释放所用的资源
算法伪代码:
P - 进程的集合
Mp - 进程p的最大的请求数目
Cp - 进程p当前被分配的资源
A - 当前可用的资源

while(P!=NULL)
{
found=FALSE;
for each P{
if(Mp-Cp<=A)
{
A=A+Cp;
P=P-{p};
found=TRUE
}
}
if(!found)
return FAIL;
}
注意:银行家算法中的安全序列不唯一,进程获得资源的顺序可以不同。比起其他解决死锁的方法,该算法需要较多的数据结构,实现起来比较困难,但是资源利用率最高。
发表于 2016-03-29 15:06:22 回复(0)
    进程       T0       T1          T2         T3
    P1       P1←0    P1←2       P1←2      P1←3
    P2       P2←0    P2←3       P2←4      P2*←4
    P3       P3←0    P3←3       P3*←3     P3*←3
发表于 2015-05-19 17:56:51 回复(0)