什么是扩展的银行家算法,求大神解释一下

如题所述

第1个回答  2016-05-16
扩展的银行家算法
就是银行家算法的扩展。

描述:
n:系统中的进程个数。m:系统中的资源类型数。
Available(1:m):现有资源向量。Available(j)=k 表示有k个未分配的j类资源。
Max(1:n,1:m):资源最大申请量矩阵。Max(i,j)=k表示第i个进程对第j类资源的最大申请量为k。
Allocation(1:n,1:m):资源分配矩阵。Allocation(i,j)=k表示进程i已占有k个j类资源。
Need(1:n,1:m):进程以后还需要的资源矩阵。Need(i,j)=k表示第i个进程以后还需要k个第j类资源。显然Need=Max-Allocation
Request(1:n,1:m):进程当前申请资源矩阵。Request(i,j)=k表示进程i正申请k个第j类资源。
资源分配程序的工作过程:
当进程提出资源申请时,系统首先检查该进程对资源的申请量是否超过其最大需求量及系统现有资源能否满足进程需要。若能则进一步检查:若把资源分给该进程系统能否处于安全状态。若安全则分配,否则置该进程为等待资源状态。
为简单起见,记Ai为A(i,1),A(i,2)...A(i,m)。其中A为n*m矩阵。定义长度为m的向量X、Y间的关系为:X<=Y当且仅当X(i)<=Y(i)(i=1,2,...,m)
设进程i申请资源,申请资源向量为Requesti,则有如下的资源分配过程:
1)如果Requesti>Needi,则报错返回。
2)如果Requesti>Available,则进程i进入等待资源状态,返回。
3)假设进程i的申请已获准,于是修改系统状态:
Available=Available-Requesti;
Allocationi=Allocationi+Requesti;
Needi=Needi-Requesti;
4)调用安全状态检查算法。
5)若系统处于安全状态,则将进程i申请的资源分配给进程i,返回。
6)若系统处于不安全状态,则进程i进入等待资源状态,并恢复系统状态后返回:
Available=Available+Requesti;
Allocationi=Allocationi-Requesti;
Needi=Needi+Requesti;
安全状态检查算法:
设Work(1:m)为临时工作向量。初始时Work=Available。令N={1,2,...,n}
1)寻找jÎN使其满足Needj<=Work,若不存在这样的j则转(3)
2)Work=Work+Allocationj N=N-{j},转(1)
3)如果N为空则返回(系统安全);如果N不为空则返回(系统不安全)。
死锁检测算法:设Work(1:m)为临时工作向量。初始时Work=Available。令N={1,2,...,n}
1)寻找jN使其满足Requestj<=Work,若不存在这样的j则转(3)
2)Work=Work+Allocationj N=N-{j},转(1)
3)如果N为空则无死锁;如果N不为空有死锁,N就是处于死锁状态的进程集合。
采用化简资源分配图的方法检测系统中有无进程处于死锁状态。资源分配图的简化过:
1.在图中找一个进程顶点Pi,Pi的请求边均能立即满足。
2.若找到这样的Pi则将与Pi相连的边全部删去,转(1);否则化简过程结束。
3.如果化简后所有的进程顶点都成了孤立点,则称该图可完全化简;否则称该图是不可完全化简的。
4.系统中有死锁的充分必要条件是资源分配图不可完全化简。
死锁恢复:检测出死锁后的处理---破坏循环等待(杀掉有关进程或删除文件)
死锁的综合处理:把系统中的资源分成几大类,整体上采用资源顺序分配法,再对资源根据其特点选择最适合的方法。例如:
(1)主存、处理机---剥夺法
(2)辅存---预分配法
(3)其他---死锁检测
设立资源阀值,当资源少于阀值时不让新进程申请,只让老进程申请,避免申请不到资源。追问

怎么扩展呢

本回答被网友采纳
第2个回答  2016-05-16
C语言。在银行家算法的基础上进行扩展即可,避免死锁,保证系统安全运行。追问

怎么扩展

追答

安全序列是指一个进程序列{P1,…,Pn}是安全的,即对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。依次类推下去即可。

追问

这些我都知道,我只想问扩展的与不扩展的区别

追答

其实算法都差不多的,扩展无非就是在银行家算法基础之上,加上C++的扩展功能。