操作系统实验银行家算法C语言实现_第1页
操作系统实验银行家算法C语言实现_第2页
操作系统实验银行家算法C语言实现_第3页
操作系统实验银行家算法C语言实现_第4页
操作系统实验银行家算法C语言实现_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上#include<stdio.h>#include<stdlib.h>#include<string.h>#define a 10#define b 10 /*银行家算法中的数据结构*int Availablea; /.各资源可利用的数量int Maxbb; /.各进程对各类资源的最大需求数int Allocationbb; /.各进程当前已分配的资源数量int Needbb; /.尚需多少资源/*int Requesta; /.申请多少资源int Worka; /.工作向量,表示系统可提供给进程继续运行所需的各类资源数量int F

2、inishb; /.表示系统是否有足够的资源分配给进程,1为是/*函数声明*void init();/.创建进程,资源种类与分配等,初始化函数int banker();/.银行家分配算法 void safe(); /.判断算法的安全性/*/*过程中定义的全局变量*int i,j,x,y,l,counter=0;int p; /记录是哪个进程正在申请资源int qb; /存储安全序列/*/*创建进程*void init()/初始化 printf("输入当前进程量:n"); scanf("%d",&x);printf("输入资源的种类数目:

3、n"); scanf("%d",&y);printf("*输入各种资源当前可用的数量*n");for( i=0;i<y;i+)printf("请输入资源%d的资源可利用量n",i);scanf("%d",&Availablei);Worki=Availablei; /初始化Worki,它的初始值就是当前可用的资源数printf("请输入每个进程申请到的资源n");for( j=0;j<x;j+)for(i=0;i<y;i+)printf("请

4、输入进程%d的申请到的资源%d:n",j,i);scanf("%d",&Allocationji);Finishj=0;/初始化Finishjprintf("请输入每个进程需要的最大的资源数目:n");for(j=0;j<x;j+)for(i=0;i<y;i+)printf("请输入进程%d需要的最大的资源数目%d:n",j,i);scanf("%d",&Maxji); if (Maxji>=Allocationji) /根据 需求量=需要最大资源数目-已分配数目,计算需

5、求量need Needji=Maxji-Allocationji; else Needji=0;/资源充足,不需要再申请printf("初始化完成n");/安全性算法函数void safe() l=0; for (j=0; j<y;j+) if (Finishj=0) /逐个查找Finishj=0的进程 条件一 counter=0; /记数器for (i=0; i<x; i+) if (Worki>=Needji) counter=counter+1;/可用大于需求,记数 if(counter=x) /i进程的每类资源都符合Worki>=Needji

6、 条件二 ql=j; /存储安全序列Finishj=1; /i进程标志为可分配for (i=0; i<x;i+) Worki=Worki+Allocationji; /释放资源l=l+1; /记数,现在有L个进程是安全的,当L=N时说明满足安全序列 j= -1; /从第一个进程开始继续寻找满足条件一二的进程 /*银行家算法* int banker()/.银行家分配算法 printf("请输入请求资源的进程n"); scanf("%d",&p); printf("n请输入此进程请求各种资源的个数n"); for(i=0;i

7、<x;i+) do printf("进程%d申请资源%d的数量",p,i); scanf("%d",&Requesti); if(Requesti>Needpi)/申请量不能超过需求量printf("申请量超过需求量出错;!请重新输入!n");else if(Requesti>Availablei) printf("资源不充足,目前可用资源只有%d,进程要等待!",Availablei); Finishp=0; /该进程等待return 0; while(Requesti>Needp

8、i|Requesti>Availablei); for (i=0; i<x; i+) Availablei=Availablei-Requesti;Allocationpi=Allocationpi+Requesti;Needpi=Needpi-Requesti;Worki=Availablei; /改变Avilable、Allocation、Need的值 /判断银行家算法的安全性if(l<x) l=0;printf("试分配不成功,不与分配,恢复原状态!"); for (i=0; i<x; i+) Availablei = Availablei+R

9、equesti; Allocationpi = Allocationpi-Requesti; Needpi = Needpi+Requesti; Worki = Availablei; for (j=0; j<y; j+) Finishj=0; /进程置为未分配状态else l=0; printf("n申请资源成功!n");for(i=0;i<x;i+) if(Needpi=0); else /有一种资源还没全部申请到,该进程还处于就绪态 l=1; /判断标志 break; if(l!=1) /进程可以执行,释放该进程的所有资源 for (i=0;i<x;

10、i+) Availablei=Availablei+Allocationpi; Allocationpi=0; printf("有需求资源,执行后将释放其所有拥有资源!"); l=0; /归零printf("安全序列为:n"); printf("进程%d",q0); /输出安全序列,考虑显示格式,先输出第一个 Finish0=0; for (i=1; i<y; i+) printf(" 进程%d",qi); Finishi=0; /重新将所有进程置为未分配状态 printf(" nnn"); return 0; void main()printf("n*n");printf("n 银行家算法模拟 n");printf("n*n");init();/safe(); /判断当前状态的安全性if(l<y)printf("找不到安全序列,拒绝申请n");else i

温馨提示

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

评论

0/150

提交评论