c实现银行家算法_第1页
c实现银行家算法_第2页
c实现银行家算法_第3页
c实现银行家算法_第4页
c实现银行家算法_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、银行家算法坝 银行家算法挨是一种最有代表啊性的避免死锁的邦算法。埃 要解释银行佰家算法,必须先百解释操作系统安拜全状态和不安全蔼状态。斑 安全状态:埃如果存在一个由凹系统中所有进程凹构成的安全序列艾P1,Pn百,则系统处于安凹全状态。安全状半态一定是没有死傲锁发生。绊 不安全状态瓣:不存在一个安叭全序列。不安全跋状态不一定导致安死锁。把 那么什么是敖安全序列呢?半 安全序列:罢一个进程序列昂P1,Pn坝是安全的,如捌果对于每一个进百程Pi(1i癌n),它以后矮尚需要的资源量癌不超过系统当前阿剩余资源量与所班有进程Pj (案j i )版当前占有资源量懊之和。阿 银行家算法拜:哀 我们可以把笆操作

2、系统看作是柏银行家,操作系巴统管理的资源相耙当于银行家管理岸的资金,进程向巴操作系统请求分澳配资源相当于用般户向银行家贷款敖。操作系统按照阿银行家制定的规百则为进程分配资罢源,当进程首次背申请资源时,要按测试该进程对资搬源的最大需求量肮,如果系统现存啊的资源可以满足半它的最大需求量奥则按当前的申请扮量分配资源,否白则就推迟分配。阿当进程在执行中爸继续申请资源时挨,先测试该进程挨已占用的资源数扒与本次申请的资鞍源数之和是否超凹过了该进程对资矮源的最大需求量柏。若超过则拒绝斑分配资源,若没盎有超过则再测试挨系统现存的资源凹能否满足该进程皑尚需的最大资源罢量,若能满足则袄按当前的申请量肮分配资源,否

3、则安也要推迟分配。 算法:绊 n:系统中般进程的总数肮 m:资源类啊总数靶 Avail奥able: A俺RRAY1.伴.m of 稗integer邦;靶 Max: 版ARRAY1暗.n,1.坝m of i坝nteger;凹 Alloc般ation: 般ARRAY1皑.n,1.案m of i岸nteger;拌 Need:胺 ARRAY凹1.n,1.拜.m of 把integer熬;靶 Reque叭st: ARR邦AY1.n捌,1.m 奥of 氨integer耙; 符号说明:瓣 Avail芭able 可用挨剩余资源昂 Max 最柏大需求拜 Alloc盎ation 已埃分配资源蔼 Need 按需求资

4、源摆 Reque熬st 请求资源绊 当进程pi巴提出资源申请时跋,系统执行下列板 步骤:(“捌=”为赋值符号昂,“=”为等啊号)白 step(绊1)若Requ按est=Ne凹ed, got芭o step(佰2);否则错误爸返回艾 step(罢2)若Requ蔼est=Av背ailable埃, goto 胺step(3)版;否则进程等待凹 step(艾3)假设系统分扳配了资源,则有罢:跋 Avail吧able=Av班ailable拜-Reques靶t;柏 Alloc耙ation=A翱llocati叭on+Requ蔼est;氨 Need=罢Need-Re盎quest癌 若系统新状背态是安全的,则癌分

5、配完成癌 若系统新状跋态是不安全的,板则恢复原状态,搬进程等待耙 为进行安全摆性检查,定义数白据结构:背 Work:按ARRAY1摆.m of挨 intege碍r;搬 Finis佰h:ARRAY瓣1.n 拔of Bool百ean;摆 安全性检查霸的步骤:哎 step 百(1): 盎 Work=艾Availab爱le;凹 Finis颁h=false般;耙 step 八(2) 寻找满背足条件的i:蔼 a.Fin扮ish=fa扳lse;斑 b.Nee昂d=Work疤;霸 如果不存在埃,goto s按tep(4)矮 step(板3) 板 Work=板Work+Al芭locatio霸n;爸 Finis叭

6、h=true;稗 goto 挨step(2)霸 step 哎(4) 若对所胺有i,Fini熬sh=true疤,则系统处于安般全状态,否则处靶于不安全状态坝 /* 银行翱家算法,操作系般统概念(OS 岸concept按s Six E摆dition)暗 reed碍it by J版ohnny h敖agen,SC拌AU,run 奥at vc6.耙0 */斑 #incl叭ude ma矮lloc.h跋 #incl板ude st背dio.h岸 #incl柏ude st袄dlib.h稗 #defi半ne allo氨clen si案zeof(st爱ruct al盎locatio芭n)爸 #defi叭ne max

7、l般en size吧of(stru岸ct max)扒 #defi捌ne aval搬en size拜of(stru啊ct avai唉lable)笆 #defi耙ne need吧len siz绊eof(s挨truct n埃eed)叭 #defi疤ne fini哎len siz皑eof(str霸uct fin斑ish)瓣 #defi稗ne path澳len siz办eof(str罢uct pat柏h)奥 struc哀t alloc罢ation 坝 int v爸alue;罢 struc挨t alloc般ation *耙next; ;唉 struc跋t max 阿 int v叭alue;皑 struc袄

8、t max *隘next; ;办 struc肮t avail霸able /*熬可用资源数*/ 吧 int v坝al百ue;摆 struc摆t avail般able *n巴ext; ;摆 struc般t need 矮/*需求资源数阿*/ 安 int v把alue;翱 struc艾t need 扳*next; ;凹 struc哎t path 盎 int v袄alue;板 struc跋t path 罢*next; ;靶 struc拔t finis氨h 敖 int s埃tat;案 struc胺t finis靶h *next癌; ;搬 int m矮ain() 扮 int r伴ow,colu般m,stat

9、板us=0,i,拔j,t,tem埃p,proce安sstest;啊 struc挨t alloc隘ation *岸alloche澳ad,*all颁oc1,*al搬loc2,*a拌lloctem扳p;稗 struc蔼t max *案maxhead邦,*maxiu暗m1,*max阿ium2,*m埃axtemp;搬 struc蔼t avail把able *a傲vahead,扒*availa奥ble1,*a疤vailabl八e2,*wor拌khead,*敖work1,*白work2,*俺worktem邦p,*work肮temp1;挨 struc白t need 扳*needhe懊ad,*nee扒d1,*n

10、ee吧d2,*nee鞍dtemp;岸 struc拔t finis皑h *fini昂head,*f颁inish1,盎*finish矮2,*fini凹shtemp;暗 struc按t path 癌*pathhe笆ad,*pat碍h1,*pat埃h2;瓣 print八f(n俺请输入系统资源靶的种类数:)版;懊 scanf岸(%d,&熬colum);伴 print拔f(请输入现颁时内存中的进程办数:);叭 scanf般(%d,&鞍row);懊 print芭f(请输入已八分配资源矩阵:稗n);颁 for(i绊=0;iro摆w;i+) 班 for (埃j=0;jnext拜=alloc2摆-next=拌NU

11、LL;埃 scanf案(%d,&笆alloche罢ad-val唉ue);袄 statu柏s+; else 邦 alloc坝2=(stru埃ct allo背cation 傲*)mallo蔼c(alloc叭len);跋 scanf笆(%d,%d霸,&allo哎c2-val哎ue);疤 if(st耙atus=1笆) 爸 alloc哎head-n办ext=all蔼oc2;疤 statu傲s+; 笆 alloc俺1-next拌=alloc2耙;搬 alloc柏1=alloc矮2; 暗 alloc盎2-next般=NULL;氨 statu胺s=0;斑 print伴f(斑请输入最大需求袄矩阵:n)般;叭 f

12、or(i八=0;iro版w;i+) 氨 for (暗j=0;jnex俺t=maxiu翱m2-nex百t=NULL;矮 scanf爱(%d,&爱maxium1氨-value拜)俺;盎 statu伴s+; else 百 maxiu袄m2=(str凹uct max阿 *)mall霸oc(maxl岸en);瓣 scanf阿(%d,%d拜,&maxi案um2-va案lue);笆 if(st啊atus=1伴) 邦 maxhe肮ad-nex佰t=maxiu巴m2;盎 statu把s+; 邦 maxiu板m1-nex坝t=maxiu背m2;败 maxiu挨m1=maxi稗um2; 袄 maxiu凹m2-nex

13、败t=NULL;安 statu唉s=0;碍 print拔f(靶请输入现时系统叭剩余的资源矩阵熬:n);板 for (氨j=0;j鞍next=av拔ailable背2-next伴=NULL;白 work1扒-next=白work2-唉next=NU捌LL;版 scanf疤(%d,&挨availab熬le1-va肮lue);爱 work1班-value柏=availa板ble1-v疤alue;斑 statu办s+; else 跋 avail邦able2=(昂struct 按availab艾le*)mal疤loc(ava蔼len);鞍 work2斑=(struc隘t avail瓣able*)m拔al

14、loc(a奥valen);岸 scanf癌(%d,%d蔼,&avai摆lable2-罢value)版;邦 work2按-value凹=availa案ble2-v半alue;唉 if(st背atus=1伴) 佰 avahe阿ad-nex哀t=avail搬able2;芭 workh氨ead-ne绊xt=work盎2;盎 statu坝s+; 哎 avail癌able1-皑next=av艾ailable艾2;暗 avail鞍able1=a翱vailabl蔼e2;扮 work1背-next=凹work2;拔 work1艾=work2; 叭 avail啊able2-拌next=NU白LL;爱 work2案

15、-next=稗NULL;盎 statu盎s=0;疤 alloc凹temp=al稗lochead伴;扳 maxte颁mp=maxh鞍ead;阿 for(i奥=0;iro背w;i+)爱 for (办j=0;jnext=办need2-懊next=NU挨LL;百 need1盎-value爱=maxtem搬p-valu班e-alloc爱temp-v盎alue;鞍 statu巴s+; else 败 need2板=(struc拔t need 敖*)mallo懊c(needl凹en);熬 need2懊-value八=(maxte暗mp-val爱ue)-(al摆loctemp佰-value靶);般 if(st白

16、atus=1白) 艾 needh癌ead-ne傲xt=need颁2;版 statu傲s+; 白 need1佰-next=胺need2;碍 need1安=need2; 吧 maxte吧mp=maxt啊emp-ne艾xt;安 alloc懊temp=al爸loctemp罢-next; 挨 need2叭-next=胺NULL;般 statu隘s=0;稗 for(i百=0;inex般t=finis唉h2-nex巴t=NULL;百 finis跋h1-sta懊t=0;佰 statu罢s+; else 凹 finis傲h2=(str捌uct fin瓣ish*)ma败lloc(fi版nilen);暗 finis

17、安h2-sta班t=0;皑 if(st柏atus=1扳) 懊 finih稗ead-ne跋xt=fini般sh2;阿 statu挨s+; 氨 finis氨h1-nex埃t=finis爸h2;霸 finis吧h1=fini坝sh2; 蔼 finis背h2-nex百t=NULL;袄 /*Init霸ializat板ion com罢pleated氨*/岸 statu柏s=0;霸 proce颁sstest=碍0;鞍 for(t哀emp=0;t罢emprow邦;temp+柏) 俺 alloc芭temp=al安lochead氨;皑 needt袄emp=nee按dhead;耙 finis挨htemp=f拔ini

18、head袄;蔼 workt罢emp=wor八khead;鞍 for(i搬=0;istat颁=0) 阿 for(j蔼=0;jn拔ext,wor耙ktemp=w昂orktemp艾-next)芭 if(ne傲edtemp-邦valueval奥ue)艾 proce啊sstest+疤+;把 if(pr碍ocesste扒st=col半um) 吧 for(j扳=0;jv盎alue+=a笆lloctem百p-valu案e;稗 workt瓣emp1=wo皑rktemp1叭-next;敖 alloc暗temp=al啊loctemp笆-next; 坝 if(st傲atus=0暗) 颁 pathh啊ead=pat扒h1=path岸2=(stru安ct path耙*)mallo矮c(pathl白en);柏 path1邦-next=扒path2-拜next=NU邦LL;巴 path1艾-value跋=i;翱 statu班s+; else 白 path2稗=(struc盎t path*白)m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论