1、银行家算法安全性序列分析摘要:在操作系统的处理机调度的过程中,由于竞争资源或者进程间推进顺序非法,都会导致死锁的发生。本文主要研究如何利用银行家算法可以避免死锁,并分析银行家算法安全性序列。关键词:银行家算法;安全性序列;避免死锁引言处理死锁的方法主要包括预防死锁、避免死锁、检测死锁和解除死锁。而利用银行家算法可以避免死锁,在这一避免死锁的过程中,银行家算法安全性序列分析是尤为重要的。1. 银行家算法中的数据结构 (1) 空闲资源向量 Available。这是一个数组,它里面包括 m 个元素,这些元素都可以分别用来表示一种空闲的资源的数量的多少,系统中存储的这种全部空闲的资源的数量的多少为它的
2、初始值,随该类资源的分配和回收,其数值发生动态地改变。如果 Availablej=K,那么,系统中当前存在 K 个 Rj 类资源。(2) 最大需求矩阵 Max。Max 矩阵是 nm 维的,该矩阵定义了系统中n 个进程中的每一个进程对 m 类资源的最大需求。如果 Maxi,j=K ,那么,进程 i 需要 Rj 类资源的最大数量的多少为 K。(3) 分配矩阵 Allocation。Allocation 矩阵是 nm 维的,该矩阵定义了系统中每一类资源当前已分配给每一进程的资源数。如果 Allocationi,j=K ,那么,进程 i 当前已分得 Rj 类资源的数量的多少为 K。(4) 需求矩阵 N
3、eed。Need 矩阵是 nm 维的,该矩阵定义了所有进程仍然需求的各类资源数。如果 Needi,j=K,那么,为了能够完成其任务,进程i 还需要 Rj 类资源 K 个。 Needi,j=Maxi,j-Allocationi,j2. 银行家算法设 Requesti 是进程 Pi 的请求向量,如果 Requestij =K ,表示进程 Pi 需要 K 个 Rj 类型的资源。当 Pi 发出资源请求后,系统按下述步骤进行检查:(1) 如果 RequestijNeed i,j ,便转向步骤 2;否则认为出错,因为它所需要的资源数大于它仍然需要的最大值。(2) 如果 RequestijAvailable
4、j ,便转向步骤( 3) ;否则, 表示尚无足够资源,Pi 须等待。(3) 系统试探着把资源分配给进程 Pi,并修改下面数据结构中的数值:Available j=Available j-Requestij;Allocationi,j=Allocationi,j+Requesti j ;Needi,j=Needi,j-Requesti j;(4) 系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。如果安全,就正式将资源分配给进程 Pi,从而实现本次分配;反之,取消这次的试探分配,保持上一次的资源分配状态,让进程 Pi 等待。3. 安全性算法 (1) 设置两个向量: 工作向量 Work
5、:它表示系统可提供给进程继续运行所需的各类资源数量的多少,它含有 m 个元素,在执行安全算法开始时,Work =Available; Finish:它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做 Finishi=false ;当有足够资源分配给进程时, 再令 Finishi=true 。(2) 从进程集合中找到一个能满足下述条件的进程: Finishi=false; Needi,jWorkj ; 如果找到,那么,执行步骤(3) , 否则,执行步骤(4) 。(3) 当进程 Pi 获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Workj= Worki+Allo
6、cationi,j;Finishi= true;go to step 2;(4) 如果所有进程的 Finishi=true 都满足, 则表示系统处于安全状态;否则,系统处于不安全状态。4. 银行家算法安全性序列分析之例 假定系统中有五个进程P0, P1, P2, P3, P4和三类资源A, B, C ,各种资源的数量分别为 10、5、7,在 T0 时刻的资源分配情况如表 1 所示。表 1 T0 时刻的资源分配表Max Allocation Need Available资源情况进程 A B C A B C A B C A B CP0 7 5 3 0 1 0 7 4 3P1 3 2 2 2 0 0
7、 1 2 2P2 9 0 2 3 0 2 6 0 0P3 2 2 2 2 1 1 0 1 1P4 4 3 3 0 0 2 4 3 13 3 2(1)T0 时刻的安全性: 表 2 T0 时刻的安全序列Work Need Allocation Work+Allocation资源情况进程A B C A B C A B C A B CFinishP1 3 3 2 1 2 2 2 0 0 5 3 2 TRUEP3 5 3 2 0 1 1 2 1 1 7 4 3 TRUEP4 7 4 3 4 3 1 0 0 2 7 4 5 TRUEP2 7 4 5 6 0 0 3 0 2 10 4 7 TRUEP0 10
8、 4 7 7 4 3 0 1 0 10 5 7 TRUE(2) P1 请求资源:P1 发出请求向量 Request1(1,0,2) ,系统按银行家算法进行检查: Request1(1, 0, 2)Need1(1, 2, 2) Request1(1, 0, 2)Available1(3, 3, 2) 系统先假定可为 P1 分配资源,并修改 Available, Allocation1 和 Need1向量,由此形成的资源变化情况如表 2 所示。表 2 系统先假定可为 P1 分配资源时刻的资源分配表Max Allocation Need Available资源情况进程 A B C A B C A B
9、 C A B CP0 7 5 3 0 1 0 7 4 3P1 3 2 2 3 0 2 0 2 0P2 9 0 2 3 0 2 6 0 0P3 2 2 2 2 1 1 0 1 1P4 4 3 3 0 0 2 4 3 12 3 0 再利用安全性算法检查此时系统是否安全。表 3 P1 申请资源时的安全性检查Work Need Allocation Work+Allocation资源情况进程A B C A B C A B C A B CFinishP1 2 3 0 0 2 0 3 0 2 5 3 2 TRUEP3 5 3 2 0 1 1 2 1 1 7 4 3 TRUEP4 7 4 3 4 3 1 0
10、 0 2 7 4 5 TRUEP2 7 4 5 6 0 0 3 0 2 10 4 7 TRUEP0 10 4 7 7 4 3 0 1 0 10 5 7 TRUE(3) P4 请求资源:P4 发出请求向量 Request4(3,3,0) ,系统按银行家算法进行检查: Request4(3, 3, 0)Need4(4, 3, 1); Request4(3, 3, 0) Available(2, 3, 0) ,让 P4 等待。参考文献:1 崔建平. 深入探讨银行家算法J. 科技信息( 学术研究), 2008,(17) . 2 侯刚. 深入解析银行家算法J. 潍坊学院学报, 2006,(02) . 3 曹现玲. 浅谈银行家算法J. 中国科技信息, 2008,(16) . 4 仲兆满,管燕. 银行家算法的改进及其在操作系统上的推广J. 连云港师范高等专科学校学报, 2002,(02) . 5 王继奎,王会勇. 基于银行家算法的进程安全序列全搜索算法J. 甘肃科学学报, 2009,(02) .