银行家算法习题.docx
- 文档编号:10052886
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:13
- 大小:84.33KB
银行家算法习题.docx
《银行家算法习题.docx》由会员分享,可在线阅读,更多相关《银行家算法习题.docx(13页珍藏版)》请在冰豆网上搜索。
银行家算法习题
银行家算法习题
假设一家银行拥有资金2000万,现有10家公司向其贷款进行筹建,每家均需300万才能建成。
如果这家银行将2000万的资金平均贷给这10家公司,则每家公司将得到200万的贷款,都不能筹建成功,也就不能还贷,那么这10家公司都将“死锁”。
若这家银行给其中的4家各贷300万,另4家各贷200万,这样将还有2家公司得不到贷款,不能开工建设,但有4家可筹建完成,这4家公司运营所得利润可向该银行还贷,银行可以利用还贷的资金继续向其他的公司贷款,从而保证所有公司筹建成功投入运营。
银行家算法是为了把一定数量的资金供多个用户周转,并保证资金的安全。
银行家算法可归纳为:
(1)当一个用户对资金的最大需求量不超过银行家现有的资金时,就可接纳该用户。
(2)用户可以分期贷款,但贷款总数不能超过最大需求量。
(3)当银行家现有的资金不能满足用户的尚需贷款数时,可以推迟支付,但总能使用户在有限的时间里得到贷款。
(4)当用户得到所需的全部资金后,一定能在有限时间里归还所有的资金。
我们可以把操作系统看作银行家,把进程看作用户,把操作系统管理的资源看作银行家管理的资金,把进程向操作系统请求资源看作用户向银行家贷款。
操作系统按照银行家规定的规则为进程分配资源。
当进程首次申请资源时,要测试该进程对资源的最大需求量。
如果系统现存的资源可以满足它的最大需求量,则按当前的申请量分配资源,否则推后分配。
当进程在执行中继续申请资源时,先测试该进程已占有的资源数与本次申请的资源数之和是否超过该进程对资源的最大需求量。
如果超过,则拒绝分配资源,否则再测试系统现存的资源能否满足该进程尚需的最大资源量。
若能满足,则按当前的申请量分配资源,否则也要推迟分配。
这样做,能保证在任何时刻至少有一个进程可以得到所需要的全部资源而执行到结束,执行结束后归还资源,并把这些资源加入到系统的剩余资源中,用同样的方法为其他的进程分配资源。
银行家算法的数据结构包括:
(1)可用资源向量Available。
(2)最大需求矩阵Max。
(3)分配矩阵Allocation。
(4)需求矩阵Need。
银行家算法如下:
设Requesti是进程Pi的请求向量,Requesti(j)=k表示进程Pi请求分配Rj类资源k个,当Pi发出资源请求后,系统按照下列步骤进行检查。
(1)若Requesti≤Need,则执行步骤
(2);否则系统会因为它所需要的资源数已超过它要求的最大值而认为出错。
(2)若Requesti≤Available,则执行步骤(3);否则系统会因为系统中尚无足够的资源满足Pi的申请而使进程Pi等待。
(3)系统试探地把资源分配给进程Pi并修改如下数据结构中的值:
Available=Available-Requesti
Allocationi=Allocationi+Requesti
Needi=Needi-Requesti
(4)系统执行安全算法,检查此次资源分配后,系统是否处于安全状态。
若是则系统才真正将资源分配给进程Pi以完成本次分配;若不是则系统将试探分配作废,恢复原来的资源分配状态,让进程Pi等待。
系统所执行的安全性算法描述如下:
(1)设置两个向量:
Work和Finish。
其中Work表示系统可提供给进程继续运行的各类资源数,初始时Work=Available;Finish表示系统是否有足够的资源分配给进程并使之运行结束,初始时Finish(i)=false,当有足够资源分配给进程Pi时,令Finish(i)=true。
(2)从进程集合中找到一个能满足下述条件的进程:
①Finish(i)=false
②Needi≤Work
若能找到这样的进程则执行步骤(3),否则跳过步骤(3)而执行步骤(4)。
(3)当进程Pi获得资源后可顺利执行直到完成,然后释放分配给它的资源,并做如下工作:
①Work=Work+Allocation
②Finish(i)=true
最后转去执行步骤
(2)。
(4)若所有进程的Finish(i)的值都为true,则说明系统处于安全状态;否则系统处于不安全状态。
例1.某系统有A、B、C类型的3种资源,在T0时刻进程P1、P2、P3、P4对资源的占用和需求情况见下表。
此刻系统可用资源向量为(2,1,2)。
问:
(1)将系统中各种资源总数和进程对资源的需求数目用向量或矩阵表示出来。
(2)判定此刻系统的安全性。
如果是安全的,写出安全序列,如果是不安全的,写出参与死锁的进程。
(3)如果此时P1和P2均再发出资源请求向量Request(1,0,1),为了保持系统安全性,应该如何分配资源给这两个进程?
说明你所采用策略的原因。
(4)如果(3)中的请求都立刻满足后,系统此刻是否处于死锁状态?
最终能否进入死锁状态?
若能,说明参与死锁的进程,若不能,说明原因。
解:
(1)系统资源总数向量=available+Allocation
=(2,1,2)+(7,2,4)=(9,3,6)
进程对资源的需求矩阵
(2)采用银行家算法进行计算步骤如下:
work=(2,1,2)
finish=(false,false,false,false)
①因为:
need[2] 系统可以满足P2对资源的请求,将资源分配给P2后,P2可执行完成,然后释放它所占有的资源。 因此, finish[2]=true; work=work+allocation[2]=(2,1,2)+(4,1,1)=(6,2,3) ②此时,need[1] P1可执行完成。 finish[1]=true; work=work+allocation[1]=(6,2,3)+(1,0,0)=(7,2,3) ③此时,need[3] P3可执行完成。 finish[3]=true; work=work+allocation[3]=(7,2,3)+(2,1,1)=(9,3,4) ④此时,need[4] P4可执行完成。 finish[4]=true; work=work+allocation[4]=(9,3,4)+(0,0,2)=(9,3,6) 结论: 系统至少可以找到一个安全的执行序,如(P2,P1,P3,P4)可使各进程正常运行终结。 (3)系统不能将资源分配给进程P1,因为虽然可利用资源还可以满足进程P1现在的需求,但是一旦分配给进程P1后,就找不到一个安全执行的序列保证各进程能够正常运行终结。 所以进程P1应该进入阻塞状态。 (4)系统满足进程P1和P2的请求后,没有立即进入死锁状态,因为这时所有进程没有提出新的资源申请,全部进程均没有因资源没有得到满足而进入阻塞状态。 只有当进程提出资源申请且全部进程都进入阻塞状态时,系统才处于死锁状态。 但最终会进入死锁状态。 例2: 某系统有同类资源m个,n个并发进程可共享该类临界资源。 求: 每个进程最多可申请多少个该类临界资源,保证系统一定不会发生死锁。 解: 设每个进程最多申请该类资源的最大量为x。 每个进程最多申请x个资源,则n个进程最多同时申请的该类临界资源数为: n*x。 为保证系统不会发生死锁,应满足下列不等式: n(x-1)+1≤m(*) 则系统一定不会发生死锁。 这是因为进程最多申请x个资源,最坏的情况是每个进程都已得到了(x-1)个资源,现均申请要最后一个资源。 只要系统至少还有一个资源就可使其中一个或几个进程得到所需的全部资源,在它们执行结束后归还的资源可供其他进程使用,因而不可以发生死锁。 解不等式(*),可得: x≤1+[(m-1)/n] 即: x的最大值为1+[(m-1)/n]。 因而,当每个进程申请资源的最大数值为1+[(m-1)/n]时,系统肯定不会发生死锁。 例3: 设系统中有3中类型的资源(A,B,C)和5个进程P1、P2、P3、P4、P5,A类资源的数目为17,B类资源的数目为5,C类资源的数目为20。 在T0时刻系统状态如下表所示。 系统采用银行家算法实施死锁避免策略。 资源情况 进程 Max ABC Allocation ABC Available ABC P1 559 212 233 P2 536 402 P3 4011 405 P4 425 204 P5 424 314 (1)T0时刻是否为安全状态? 若是,给出安全序列。 (2)若在T0时刻进程P2请求资源(0,3,4),是否能实施资源分配? 为什么? (3)在 (2)的基础上,若进程P4请求资源(2,0,1),是否能实施资源分配? 为什么? (1)由题目所给出的最大资源需求量和已分配的资源数量,可以计算出T0时刻各进程的资源需求量Need,Need=Max-Allocation,利用银行家算法对T0时刻的资源分配情况进行分析,可得此时的安全性分析情况,如下表: 进程 资源情况 Work ABC Need ABC Allocation ABC Work+Allocation ABC Finish P5 233 110 314 547 true P4 547 221 204 7411 true P3 7411 006 405 11416 true P2 11416 134 402 15418 true P1 15418 347 212 17520 true 从T0的安全性分析中可以看出,存在一个安全序列{P5、P4、P3、P2、P1},故T0时刻的状态是安全的。 (6分) (2)若在T0时刻进程P2请求资源(0,3,4),因请求资源数(0,3,4)大于剩余资源数(2,3,3),所以不能分配。 (2分) (3)在 (2)的基础上,若进程P4请求资源(2,0,1),按银行家算法进行检查: P4请求资源(2,0,1)<=P4需求资源(2,2,1) P4请求资源(2,0,1)<=剩余资源数(2,3,3) 试分配并修改相应的数据结构,由此形成的资源分配情况如下表所示: 资源情况 进程 Allocation ABC Need ABC Available ABC P1 212 347 033 P2 402 134 P3 405 006 P4 405 020 P5 314 110 此时,如题 (1)利用银行家算法检查系统的安全状态,存在一个安全序列{P4、P5、P3、P2、P1},故该状态是安全的,可以立即将P4请求的资源分配给它。 例4: 某系统有同类资源m个,n个并发进程可共享该类临界资源。 求: 每个进程最多可申请多少个该类临界资源,保证系统一定不会发生死锁。 解: 设每个进程最多申请该类资源的最大量为x。 为保证系统不会发生死锁,应满足下列不等式: n(x-1)+1≤m(*) 解不等式(*),可得: x≤1+[(m-1)/n] 即: x的最大值为1+[(m-1)/n]。 因而,当每个进程申请资源的最大数值为1+[(m-1)/n]时,系统肯定不会发生死锁。 某系统中有5个并发进程,都需要同类资源3个,试问该系统不会发生死锁的最少资源数是(11)。 某系统中有4个并发进程,都需要同类资源3个,试问该系统不会发生死锁的最少资源数是(9)。 某计算机系统中有8台打印机,有K个进程竞争使用,每个进程最多需要3台打印机.该系统可能会发生死锁的K的最小值是(4) 系统中有3个进程,每个进程需2台打印机,如果系统配有4台打印机,则系统______不可能________出现死锁的情况(本题要判断出现死锁的可能性: 可能或不可能)。 若系统运行中出现如下表所示的资源分配情况,该系统是否安全? 若是,给出安全序列;如果进程P2此时提出资源申请(1,2,2,2),系统能否将资源分配给它? 为什么? 资源情况 进程 Allocation (已分配资源数) Need (还需要资源数) Available (系统可以分配资源数) P0 0032 0012 1622 P1 1000 1750 P2 1354 2356 P3 0332 0652 P4 0014 0656 答: (1)利用安全性算法对此刻的资源分配情况进行如下表的安全性检: 资源情况 进程 Work Need Allocation Work+Allocation P0 1622 0012 0032 1654 P3 1654 0652 0332 1986 P4 1986 0656 0014 19910 P1 19910 1750 1000 29910 P2 29910 2356 1354 3121414 从表中可以看出,此时存在一个安全序列{P0,P3,P4,P1,P2},故系统是安全的。 (2)P2请求资源(1,2,2,2)<=P2需求资源(2,3,5,6)&<=剩余资源数(1,6,2,2) 资源情况 进程 Allocation Need Available P0 0032 0012 0400 P1 1000 1750 P2 2576 1134 P3 0332 0652 P4 0014 0656 此时,可利用资源(0,4,0,0)已不能满足任何进程的需要,故系统进入不安全状态,故不能将资源分配给P2。 资源分配图。 系统死锁可以利用资源分配图来描述。 该图是由一组方框、圆圈和一组箭头线组成的, (1)资源分配图。 资源分配图采用图素的含义分别是: 方框: 表示资源。 有几类资源就画几个方框,方框中的小圆圈表示该类资源的个数。 当个数较大时可以在方框内用阿拉伯数字表示。 圆圈: 表示进程。 有几个进程就画几个圆圈,圆圈内标明进程名称。 箭头线: 表示资源的分配与申请。 由方框指向圆圈的箭头线表示资源的分配线,由圆圈指向方框的箭头线表示资源的请求线。 (2)死锁定理。 在死锁检测时,可以利用把资源分配图进行简化的方法来判断系统当前是否处于死锁状态。 具体方法如下: ①在资源分配图中,找出一个既非阻塞又非孤立的进程结点Pi。 如果Pi可以获得其所需要的资源而继续执行,直至运行完毕,就可以释放其所占用的全部资源。 这样,就可以把Pi所有关连的资源分配线和资源请求线消去,使之成为孤立的点。 ②重复进行上述操作。 在一系列的简化后,如果消去了资源分配图中所有的箭头线,使所有进程结点都成为孤立结点,则称该资源分配图是可完全简化的;反之,则称该资源分配图是不可完全简化的。 如果当前系统状态对应的资源分配图是不可完全简化的,则系统处于死锁状态,该充分条件称为死锁定理。 什么是死锁定理? 利用死锁定理判断下图的当前状态是否会产生死锁? 死锁定理: S为死锁状态的充分条件是,当且仅当S状态的资源分配图不可完全简化。 简化过程,结论: 不会产生死锁。 死锁的检测 1.利用资源分配图 系统对资源的分配情况可以用有向图加以描述: 该图由结对组成: G=(V,E)。 其中,V是顶点的集合,E是有向边的集合,顶点集合可分为两部分: P={P1,P2,…Pn},它由系统中全部进程组成;R={r1,r2,r3},它由系统中的全部资源组成。 由边组成的集合E中,每一个元素都是一个有序结对(pi,rj)或(rj,pi)。 其中,pi是P中的一个进程(pi∈P),rj是R中的资源类型(rj∈R)。 如果(pi,rj)∈E,则存在一条从进程pi指向资源rj的有向边,进程pi申请一个rj资源单位。 当前pi在等待资源。 如果(pi,rj)∈E,则有向边是从资源rj指向进程pi,就表示有一个rj资源分配给进程pi。 边(pi,rj)称为申请边,而(rj,pi)称为赋给边。 在资源分配图中,我们用圆圈表示每个进程,用方框表示各种资源的类型。 方框中圆点的数量表示该类资源的个数。 当然,申请边只能指向方框,而赋给边必须指向方框中的一个圆点。 例如 如图所示的资源分配图表示: P1申请临界资源R,同时R已被进程P2占有。 临界资源R类中只有一个资源。 2.资源分配图的简化 在利用资源分配图进行死锁检测时,目的是为了决定当前状态是否发生死锁。 如果满足下列条件,那么一个连续可重被利用的资源图就能够通过进程P来进行化简: (1)进程没有被阻塞 (2)进程没有请求边 (3)有分配边指向P 通过消除所有指向P的分配边,可以化简资源分配图。 如果一个资源分配图不能通过任一个进程化简,那么它就是不可被简化的;如果有一个化简序列,导致图中没有任何种类的边,那么它就是可完全简化的。 3.死锁定理 通过资源分配图,我们就可以很直观地看出系统中的进程使用资源的情况。 很显然,如果图中不出现封闭的环路,则系统中不会存在死锁。 但如果系统出现由各有向边组成的环路,则是否产生死锁,还需进一步分析: 如果环路可以通过化简的方式取消,则系统一定不产生死锁;如果环路通过化简的方式仍不能取消,即不能再进行简化,则系统一定会产生死锁。 这就是著名的死锁定理。 某系统状态S为死锁状态的充分必要条件是: 当且仅当S状态的资源分配图是不可完全简化的。 即: 如果资源分配图中不存在环路,则系统不存在死锁;如果资源分配图中存在环路,则系统中可能产生死锁,如果不可再简化,则系统产生死锁。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 银行家 算法 习题