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

下载本文档

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

文档简介

1、银行家算法 银行家算法法是一种最有有代表性的避避免死锁的算算法。 要解释银行行家算法,必必须先解释操操作系统安全全状态和不安安全状态。 安全状态:如果存在一一个由系统中中所有进程构构成的安全序序列P1,Pn,则则系统处于安安全状态。安安全状态一定定是没有死锁锁发生。 不安全状态态:不存在一一个安全序列列。不安全状状态不一定导导致死锁。 那么什么是是安全序列呢呢? 安全序列:一个进程序序列P1,Pn是是安全的,如如果对于每一一个进程Pii(1in),它以以后尚需要的的资源量不超超过系统当前前剩余资源量量与所有进程程Pj (jj i )当前占有有资源量之和和。 银行家算法法: 我们可以把把操作系统

2、看看作是银行家家,操作系统统管理的资源源相当于银行行家管理的资资金,进程向向操作系统请请求分配资源源相当于用户户向银行家贷贷款。操作系系统按照银行行家制定的规规则为进程分分配资源,当当进程首次申申请资源时,要要测试该进程程对资源的最最大需求量,如如果系统现存存的资源可以以满足它的最最大需求量则则按当前的申申请量分配资资源,否则就就推迟分配。当当进程在执行行中继续申请请资源时,先先测试该进程程已占用的资资源数与本次次申请的资源源数之和是否否超过了该进进程对资源的的最大需求量量。若超过则则拒绝分配资资源,若没有有超过则再测测试系统现存存的资源能否否满足该进程程尚需的最大大资源量,若若能满足则按按当

3、前的申请请量分配资源源,否则也要要推迟分配。 算法: n:系统中中进程的总数数 m:资源类类总数 Availlable: ARRAAY1.m off inteeger; Max: ARRAYY1.nn,1.mm of integger; Alloccationn: ARRRAY1.n,1.m oof intteger; Need: ARRAAY1.n,1.m off inteeger; Requeest: AARRAY1.n,1.m of iintegeer; 符号说明: Availlable 可用剩余资资源 Max 最最大需求 Alloccationn 已分配资资源 Need 需求资源 Re

4、queest 请求求资源 当进程pii提出资源申申请时,系统统执行下列 步骤:(“=”为赋值符符号,“=”为等号) step(11)若Reqquest=Needd, gotto steep(2);否则错误返返回 step(22)若Reqquest=Avaiilablee, gotto steep(3);否则进程等等待 step(33)假设系统统分配了资源源,则有: Availlable=Availlable-Requeest; Alloccationn=Alloocatioon+Reqquest; Need=Need-Requeest 若系统新状状态是安全的的,则分配完完成 若系统新状状态是不

5、安全全的,则恢复复原状态,进进程等待 为进行安全全性检查,定定义数据结构构: Work:ARRAYY1.mm of integger; Finissh:ARRRAY1.n oof Booolean; 安全性检查查的步骤: step (1): Work=Availlable; Finissh=fallse; step (2) 寻寻找满足条件件的i: a.Finnish=falsee; b.Neeed=Woork; 如果不存在在,gotoo stepp(4) step(3) Work=Work+Alloccationn; Finissh=truue; goto step(2) step (4) 若

6、若对所有i,Finissh=truue,则系统统处于安全状状态,否则处处于不安全状状态 /* 银行行家算法,操操作系统概念念(OS cconceppts Siix Ediition) reediit by Johnnny haggen,SCCAU,ruun at vc6.00 */ #incllude mallooc.h #incllude stdioo.h #incllude stdliib.h #defiine alllocleen sizzeof(sstructt alloocatioon) #defiine maaxlen sizeoof(strruct mmax) #defiine

7、avvalen sizeoof(strruct aavailaable) #defiine neeedlenn sizeeof(sttruct need) #defiine fiinilenn sizeeof(sttruct finissh) #defiine paathlenn sizeeof(sttruct path) strucct alllocatiion int vvalue; strucct alllocatiion *nnext; ; strucct maxx int vvalue; strucct maxx *nexxt; ; strucct avaailablle /*可可用

8、资源数*/ int vvalue; strucct avaailablle *neext; ; strucct neeed /*需需求资源数*/ int vvalue; strucct neeed *neext; ; strucct patth int vvalue; strucct patth *neext; ; strucct finnish int sstat; strucct finnish *next; ; int mmain() int rrow,coolum,sstatuss=0,i,j,t,ttemp,pprocessstestt; strucct alllocatiion *

9、aallochhead,*allocc1,*allloc2,*allooctempp; strucct maxx *maxxhead,*maxiium1,*maxiuum2,*mmaxtemmp; strucct avaailablle *avvaheadd,*avaailablle1,*aavailaable2,*workkhead,*workk1,*woork2,*workttemp,*workttemp1; strucct neeed *neeedheaad,*neeed1,*need22,*neeedtempp; strucct finnish *finihhead,*finissh1

10、,*ffinishh2,*fiinishttemp; strucct patth *paathheaad,*paath1,*path22; printtf(nn请输入系统统资源的种类类数:); scanff(%d,&collum); printtf(请输输入现时内存存中的进程数数:); scanff(%d,&roww); printtf(请输输入已分配资资源矩阵:n); for(ii=0;irow;ii+) for (j=0;jjneext=allloc2-nextt=NULLL; scanff(%d,&alllocheaad-vaalue); statuus+; else allocc2=(

11、sttruct alloccationn *)maalloc(allocclen); scanff(%d,%d,&allocc2-vaalue); if(sttatus=1) allocchead-nextt=allooc2; statuus+; allocc1-neext=allloc2; allocc1=allloc2; allocc2-neext=NUULL; statuus=0; printtf(请输输入最大需求求矩阵:nn); for(ii=0;irow;ii+) for (j=0;jjnnext=mmaxiumm2-neext=NUULL; scanff(%d,&maxxium1-

12、valuue); statuus+; else maxiuum2=(sstructt max *)mallloc(mmaxlenn); scanff(%d,%d,&maxiuum2-vvalue); if(sttatus=1) maxheead-nnext=mmaxiumm2; statuus+; maxiuum1-nnext=mmaxiumm2; maxiuum1=maaxium22; maxiuum2-nnext=NNULL; statuus=0; printtf(请输输入现时系统统剩余的资源源矩阵:nn); for (j=0;jjnexxt=avaailablle2-nnext=NNUL

13、L; work11-nexxt=worrk2-nnext=NNULL; scanff(%d,&avaailablle1-vvalue); work11-vallue=avvailabble1-valuee; statuus+; else availlable22=(strruct aavailaable*)mallooc(avaalen); work22=(strruct aavailaable*)mallooc(avaalen); scanff(%d,%d,&availlable22-vallue); work22-vallue=avvailabble2-valuee; if(sttatus

14、=1) avaheead-nnext=aavailaable2; workhhead-next=work22; statuus+; availlable11-nexxt=avaailablle2; availlable11=avaiilablee2; work11-nexxt=worrk2; work11=workk2; availlable22-nexxt=NULLL; work22-nexxt=NULLL; statuus=0; allocctemp=allocchead; maxteemp=maaxheadd; for(ii=0;irow;ii+) for (j=0;jjnexxt=ne

15、eed2-nnext=NNULL; need11-vallue=maaxtempp-vallue-alllocteemp-vvalue; statuus+; else need22=(strruct nneed *)mallloc(neeedlenn); need22-vallue=(mmaxtemmp-vaalue)-(allooctempp-vallue); if(sttatus=1) needhhead-next=need22; statuus+; need11-nexxt=neeed2; need11=needd2; maxteemp=maaxtempp-nexxt; alloccte

16、mp=allocctemp-nextt; need22-nexxt=NULLL; statuus=0; for(ii=0;innext=ffinishh2-neext=NUULL; finissh1-sstat=00; statuus+; else finissh2=(sstructt finiish*)mmallocc(finiilen); finissh2-sstat=00; if(sttatus=1) finihhead-next=finissh2; statuus+; finissh1-nnext=ffinishh2; finissh1=fiinish22; finissh2-nnex

17、t=NNULL; /*Iniitialiizatioon commpleatted*/ statuus=0; proceesstesst=0; for(ttemp=00;tempprow;temp+) allocctemp=allocchead; needttemp=nneedheead; finisshtempp=finiihead; workttemp=wworkheead; for(ii=0;istat=0) for(jj=0;jnnext,wworkteemp=woorktemmp-neext) if(neeedtemmp-vaaluevaluee) proceesstesst+; i

18、f(prrocessstest=coluum) for(jj=0;jvaluue+=alllocteemp-vvalue; workttemp1=workttemp1-nextt; allocctemp=allocctemp-nextt; if(sttatus=0) pathhhead=ppath1=path22=(strruct ppath*)mallooc(patthlen); path11-nexxt=patth2-nnext=NNULL; path11-vallue=i; statuus+; else path22=(strruct ppath*)mallooc(patthlen); path22-vallue=i; if(sttatus=1) pathhhead-next=path22; statuus+; path11-nexxt=patth2; path11=pathh2; finisshtempp-staat=1; else for(tt=0;tnextt; finisshtempp-staat=0; else for(tt=0;tnnext; allocctemp=allocctemp-nextt; proceesstesst=0; workttemp=wworkheead; finisshtemp

温馨提示

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

评论

0/150

提交评论