银行家算法1文档格式.docx

上传人:b****1 文档编号:5861005 上传时间:2023-05-05 格式:DOCX 页数:14 大小:16.54KB
下载 相关 举报
银行家算法1文档格式.docx_第1页
第1页 / 共14页
银行家算法1文档格式.docx_第2页
第2页 / 共14页
银行家算法1文档格式.docx_第3页
第3页 / 共14页
银行家算法1文档格式.docx_第4页
第4页 / 共14页
银行家算法1文档格式.docx_第5页
第5页 / 共14页
银行家算法1文档格式.docx_第6页
第6页 / 共14页
银行家算法1文档格式.docx_第7页
第7页 / 共14页
银行家算法1文档格式.docx_第8页
第8页 / 共14页
银行家算法1文档格式.docx_第9页
第9页 / 共14页
银行家算法1文档格式.docx_第10页
第10页 / 共14页
银行家算法1文档格式.docx_第11页
第11页 / 共14页
银行家算法1文档格式.docx_第12页
第12页 / 共14页
银行家算法1文档格式.docx_第13页
第13页 / 共14页
银行家算法1文档格式.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

银行家算法1文档格式.docx

《银行家算法1文档格式.docx》由会员分享,可在线阅读,更多相关《银行家算法1文档格式.docx(14页珍藏版)》请在冰点文库上搜索。

银行家算法1文档格式.docx

  Request

  当进程pi提出资源申请时,系统执行下列

  步骤:

  

(1)若Request≤Need,转

(2);

  否则错误返回

  

(2)若Request≤Available,

  转(3);

否则进程等待

  (3)假设系统分配了资源,则有:

=Available-Request;

=

  Allocation+Request;

=Need-Request

  若系统新状态是安全的,则分配完成

  若系统新状态是不安全的,则恢复原状

  态,进程等待

  为进行安全性检查,定义数据结构:

  Work:

ARRAY【1..m】ofinteger;

  Finish:

ARRAY【1..n】ofBoolean;

  安全性检查的步骤:

  

(1)Work:

=Available;

=false;

  

(2)寻找满足条件的i:

  a.Finish=false;

  b.Need≤Work;

  如果不存在,则转(4)

  (3)Work:

=Work+Allocation;

=true;

  转

(2)

  (4)若对所有i,Finish=true,则系

  统处于安全状态,否则处于不安全

  状态

  /*银行家算法,操作系统概念(OSconceptsSixEdition)

  作者:

ctu_85

  */

  #include"

malloc.h"

stdio.h"

  #definealloclensizeof(structallocation)

  #definemaxlensizeof(structmax)

  #defineavalensizeof(structavailable)

  #defineneedlensizeof(structneed)

  #definefinilensizeof(structfinish)

  #definepathlensizeof(structpath)

  structallocation

  {

  intvalue;

  structallocation*next;

  };

  structmax

  structmax*next;

  structavailable

  structavailable*next;

  structneed

  structneed*next;

  structpath

  structpath*next;

  structfinish

  intstat;

  structfinish*next;

  intmain()

  introw,colum,status=0,i,j,t,temp,processtest;

  structallocation*allochead,*alloc1,*alloc2,*alloctemp;

  structmax*maxhead,*maxium1,*maxium2,*maxtemp;

  structavailable*avahead,*available1,*available2,*availabletemp,*workhead,*work1,*work2,*worktemp,*worktemp1;

  structneed*needhead,*need1,*need2,*needtemp;

  structfinish*finihead,*finish1,*finish2,*finishtemp;

  structpath*pathhead,*path1,*path2,*pathtemp;

  charc;

  printf("

\nPleaseenterthetypeofsourcesthesystemhas:

\n"

);

  scanf("

%d"

&

colum);

Pleaseenterthenumberofprocessesnowinthememory:

row);

Pleaseentertheallocationarray:

  for(i=0;

i<

row;

i++)

Theallocationforprocessp%d:

i);

  for(j=0;

j<

colum;

j++)

Thetype%csystemresourceallocated:

'

A'

+j);

  if(status==0)

  allochead=alloc1=alloc2=(structallocation*)malloc(alloclen);

  alloc1->

next=alloc2->

next=NULL;

allochead->

value);

  status++;

  }

  else

  alloc2=(structallocation*)malloc(alloclen);

%d,%d"

alloc2->

  if(status==1)

  allochead->

next=alloc2;

  alloc1=alloc2;

  alloc2->

  status=0;

Pleaseenterthemaxarray:

Themaxneededfromprocessp%d:

Thetype%cmaxiumsystemresourcemayneeded:

  maxhead=maxium1=maxium2=(structmax*)malloc(maxlen);

  maxium1->

next=maxium2->

maxium1->

  maxium2=(structmax*)malloc(maxlen);

maxium2->

  maxhead->

next=maxium2;

  maxium1=maxium2;

  maxium2->

Pleaseentertheavailablearraynowexistsinthesystem:

Thetype%cavailablesystemresourcenumber:

  avahead=available1=available2=(structavailable*)malloc(avalen);

  workhead=work1=work2=(structavailable*)malloc(avalen);

  available1->

next=available2->

  work1->

next=work2->

available1->

value=available1->

value;

  available2=(structavailable*)malloc(avalen);

  work2=(structavailable*)malloc(avalen);

available2->

  work2->

value=available2->

  avahead->

next=available2;

  workhead->

next=work2;

  available1=available2;

  work1=work2;

  available2->

  alloctemp=allochead;

  maxtemp=maxhead;

  needhead=need1=need2=(structneed*)malloc(needlen);

  need1->

next=need2->

value=maxtemp->

value-alloctemp->

  need2=(structneed*)malloc(needlen);

  need2->

value=(maxtemp->

value)-(alloctemp->

  needhead->

next=need2;

  need1=need2;

  maxtemp=maxtemp->

next;

  alloctemp=alloctemp->

  finihead=finish1=finish2=(structfinish*)malloc(finilen);

  finish1->

next=finish2->

stat=0;

  finish2=(structfinish*)malloc(finilen);

  finish2->

  finihead->

next=finish2;

  finish1=finish2;

/*Initializationcompleated*/

  processtest=0;

  for(temp=0;

temp<

temp++)

  needtemp=needhead;

  finishtemp=finihead;

  worktemp=workhead;

  worktemp1=worktemp;

  if(finishtemp->

stat==0)

  for(j=0;

j++,needtemp=needtemp->

next,worktemp=worktemp->

next)

  if(needtemp->

value<

=worktemp->

value)

  processtest++;

  if(processtest==colum)

  worktemp1->

value+=alloctemp->

  worktemp1=worktemp1->

  pathhead=path1=path2=(structpath*)malloc(pathlen);

  path1->

next=path2->

value=i;

  path2=(structpath*)malloc(pathlen);

  path2->

  pathhead->

next=path2;

  path1=path2;

  finishtemp->

stat=1;

  for(t=0;

t<

t++)

  needtemp=needtemp->

  finishtemp=finishtemp->

value==0)

\nWARNING,thesystemisinnonsafestatus!

  exit(0);

\nThesystemisinsafestatus!

\nThesafesequenceis:

  do

p%d"

pathhead->

  while(pathhead=pathhead->

next);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电力水利

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2