银行家算法和安全性算法的区别 银行家算法( 二 )


系统找安全序列的过程需要不断判断和修改当前资源数量,不能直接修改原始数据记录Aailable 。
v标志向量Finish
表示每个进程是否有足够的资源使之运行完成 。开始时所以进程都设置初值Finish[i]:=false;
找安全序列的过程相当于使所有Finish[i]:=true 。
(2)找安全序列的过程
从Finish[i] = false 的进程集合中找一个进程
IFNeed[i,j] = work[j]
THEN执行步骤 a;
ELSE执行步骤 b;
a)假设Pi获得资源顺利执行完,释放出分配给它的资源,修改相应的值:
work【j】= work【i】+Allocation【i,j】;
Finish【i】= true;
goto step (2);//返回去继续找下一个进程 。
b)当算法不再在(2)、a)步间循环找进程,到达本步时,若所有Finish[i]=true都满足,则表示所有进程都按某个顺序执行完了,系统处于安全状态;否则,系统当前所处的资源分配状态是不安全状态 。
银行家算法所谓死锁,是指多个进程循环等待它方占有的资源而无限期地僵持下去的局面 。死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去 。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程 。
银行家算法:避免死锁
资源有序分配法:预防死锁
资源分配图化简法:检测死锁
撤销进程法:解决死锁
银行家算法:银行家算法是从当前状态出发,按照系统各类资源剩余量逐个检查各进程需要申请的资源量,找到一个各类资源申请量均小于等于系统剩余资源量的进程P1 。然后分配给该P1进程所请求的资源,假定P1完成工作后归还其占有的所有资源,更新系统剩余资源状态并且移除进程列表中的P1,进而检查下一个能完成工作的客户,...... 。如果所有客户都能完成工作,则找到一个安全序列,银行家才是安全的 。若找不到这样的安全序列,则当前状态不安全 。

银行家算法和安全性算法的区别 银行家算法

文章插图
浅析银行家算法作为避免死锁的一种算法,银行家算法可以说是最为出名的了 。这个名字的来源是因为该算法起初是为银行系统设计的,以确保银行在发放现金贷款时,不会发生不能满足所有客户需要的情况 。在操作系统中也可以用它来实现避免死锁 。
首先我们要了解银行家算法的本质也即避免死锁的原理 。避免死锁作为一种事先预防死锁的策略,原理是在为各个进程分配资源的过程中不允许系统进去不安全状态,以此来避免死锁的发生 。所谓安全状态,是指系统能按某种进程推进顺序为每个进程分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可以顺利地完成 。此时称该进程推进序列为安全序列,如果无法找到这样一个安全序列,则称系统处于不安全状态 。
银行家算法中的数据结构 。为了实现银行家算法,在系统中必须设置这样四个数据结构,分别用来描述系统中可利用的资源,所有进程对资源的最大需求,系统中的资源分配以及所有进程还需要多少资源的情况 。
(1)可利用资源向量Available 。这是一个含有m个元表的数组,其中的每一个元素代表一类可利用的资源数目 。其数值随该类资源的分配和回收而动态地改变 。如果 Available=K,则表示系统中现有Rj类资源K个 。
(2)最大需求矩阵Max 。这是一个nxm的矩阵,它定义了系统中n个进程中的每个进程对m类资源的最大需求 。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K 。
(3)分配矩阵 Allocation 。这也是一个nxm的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数 。如果Allocation[i,j]=K,表示进程i当前已分得Rj类资源的数目为K 。
(4)需求矩阵Need 。这也是一个nxm的矩阵,用以表示每一个进程尚需的各类资源数 。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个才能完成 。
【银行家算法和安全性算法的区别 银行家算法】 当一个进程发出请求资源的请求后,如果它所请求的资源大于目前系统可利用资源则不予分配 。如果小于可利用资源,则系统试探着把资源分配给该进程,并修改分配之后的资源数值 。接着系统执行安全算法,检查此次资源分配后系统是否处于安全状态 。若安全,才正式将资源分配给该进程,以完成本次分配 。否则,将本次的试探分配作废,恢复原来的资源分配状态,让该进程等待 。

秒懂生活扩展阅读