全球旧事资料 分类
假设一家银行拥有资金2000万,现有10家公司向其贷款进行筹建,每家均需300万才能建成。如果这家银行将2000万的资金平均贷给这10家公司,则每家公司将得到200万的贷款,都不能筹建成功,也就不能还贷,那么这10家公司都将“死锁”。若这家银行给其中的4家各贷300万,另4家各贷200万,这样将还有2家公司得不到贷款,不能开工建设,但有4家可筹建完成,这4家公司运营所得利润可向该银行还贷,银行可以利用还贷的资金继续向其他的公司贷款,从而保证所有公司筹建成功投入运营。银行家算法是为了把一定数量的资金供多个用户周转,并保证资金的安全。银行家算法可归纳为:(1)当一个用户对资金的最大需求量不超过银行家现有的资金时,就可接纳该用户。(2)用户可以分期贷款,但贷款总数不能超过最大需求量。(3)当银行家现有的资金不能满足用户的尚需贷款数时,可以推迟支付,但总能使用户在有限的时间里得到贷款。(4)当用户得到所需的全部资金后,一定能在有限时间里归还所有的资金。我们可以把操作系统看作银行家,把进程看作用户,把操作系统管理的资源看作银行家管理的资金,把进程向操作系统请求资源看作用户向银行家贷款。操作系统按照银行家规定的规则为进程分配资源。当进程首次申请资源时,要测试该进程对资源的最大需求量。如果系统现存的资源可以满足它的最大需求量,则按当前的申请量分配资源,否则推后分配。当进程在执行中继续申请资源时,先测试该进程已占有的资源数与本次申请的资源数之和是否超过该进程对资源的最大需求量。如果超过,则拒绝分配资源,否则再测试系统现存的资源能否满足该进程尚需的最大资源量。若能满足,则按当前的申请量分配资源,否则也要推迟分配。这样做,能保证在任何时刻至少有一个进程可以得到所需要的全部资源而执行到结束,执行结束后归还资源,并把这些资源加入到系统的剩余资源中,用同样的方法为其他的进程分配资源。
银行家算法的数据结构包括:
1
f(1)可用资源向量Available。(2)最大需求矩阵Max。(3)分配矩阵Allocatio
。(4)需求矩阵Need。
银行家算法如下:设Requesti是进程Pi的请求向量,Requestijk表示进程Pi请求分配Rj类资源k个,当Pi发出资源请求后,系统按照下列步骤进行检查。(1)若Requesti≤Need,则执行步骤(2);否则系统会因为它所需要的资源数已超过它要求的最大值而认为出错。(2)若Requesti≤Available,则执行步骤(3);否则系统会因为系统中尚无r
好听全球资料 返回顶部