银行家算法实验报告
更新时间:2023-08-19 16:57:01 阅读量: 高中教育 文档下载
课程设计(大作业)报告
课程名称: 操 作 系 统 设计题目: 银行家算法实现 院 系: 信 息 技 术 学 院 班 级:
姓 名: 学 号: 指导教师:
设计时间:2013年12月30日至1月3日
昆明学院
昆明学院课程设计(大作业)任务书
课程设计(大作业)成绩学号:201111010309 课程设计题目:银行家算法的实现 总结: 不知不觉又过了一个星期了,这次实训,总的下来,感觉不易。 为准确理解,应该以手动模式下运行为准,这样的交互性较好!而自动实现下,更接近 于机器的工作方式。程序在设计初,只是用了手动这一模式,后来听取同学的意见以随机 数实现自动模式,在设计时出了好些问题,但想多了问题也就通了,而新的问题又出现, 却总能解决。在这种模式下能更彻底理解银行家算法中的资源分配策略。 姓名:蒋兴发 指导教师:张德海
指导教师评语:
成绩:
填表时间:2013 年 12 月 27 日
指导教师签名:
目录
课程设计(大作业)报告 ................................................................................... 1
昆明学院课程设计(大作业)任务书 ............................................................ 2
一、题目分析 .......................................................................................................... 5
1.1实验名称:.................................................................................................. 5 1.2实验目的 ..................................................................................................... 5 1.3问题分析与设计 ........................................................................................... 5
1.3.1算法思路 .......................................................................................... 5 1.3.2银行家算法步骤 ................................................................................. 5 1.3.3安全性算法步骤 ................................................................................. 6 1.3.4、流程图 ........................................................................................... 7
二、程序设计 ........................................................................................................ 10 三、结果分析 ........................................................................................................ 20 四、心得体会 ........................................................................................................ 22
计算机操作系统实验报告
一、题目分析
1.1实验名称:
银行家算法 1.2实验目的
银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。
1.3问题分析与设计
1.3.1算法思路
先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。 1.3.2银行家算法步骤
(1)如果Requesti<or =Need,则转向步骤(2);否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。
(2)如果Request<or=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。
(3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值:
Available=Available-Request[i]; Allocation=Allocation+Request; Need=Need-Request;
(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。
1.3.3安全性算法步骤
(1)设置两个向量
①工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Allocation;
②布尔向量Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]=false,当有足够资源分配给进程时,令Finish[i]=true。
(2)从进程集合中找到一个能满足下述条件的进程:
①Finish[i]=false ②Need<or=Work
如找到,执行步骤(3);否则,执行步骤(4)。
(3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:
Work=Work+Allocation; Finish[i]=true; 转向步骤(2)。
(4)如果所有进程的Finish[i]=true,则表示系统处于安全状态;否则,系统处于不安全状态。
1.3.4、流程图
系统主要过程流程图
银行家算法流程图
安全性算法流程图
二、程序设计
#include<iostream.h> #include<string.h> #include<stdio.h> #define False 0
#define True 1
int Max[100][100]={0};//各进程所需各类资源的最大需求
int Avaliable[100]={0};//系统可用资源 char name[100]={0};//资源的名称
int Allocation[100][100]={0};//系统已分配资源 int Need[100][100]={0};//还需要资源 int Request[100]={0};//请求资源向量 int temp[100]={0};//存放安全序列 int Work[100]={0};//存放系统可提供资源 int p[100]={0}; int q[100][100]={0}; int z[100][100]={0};
int M=100;//作业的最大数为100 int N=100;//资源的最大数为100 int gg=1;
void showdata()//显示资源矩阵 { int i,j;
cout<<endl<<"此时刻的资源分配情况为:"<<endl; cout<<" Max Allocation Need Avaliable"<<endl;
cout<<"进程名 "; for(j=0;j<4;j++){ for(i=0;i<N;i++) cout<<name[i]<<" ";
cout<<" "; }
cout<<endl; for(i=0;i<M;i++){ cout<<" "<<i<<" "; for(j=0;j<N;j++) cout<<Max[i][j]<<" "; cout<<" "; for(j=0;j<N;j++)
cout<<Allocation[i][j]<<" "; cout<<" "; for(j=0;j<N;j++) cout<<Need[i][j]<<" "; if(i==0){ cout<<" "; for (j=0;j<N;j++)
cout<<Avaliable[j]<<" ";//输出分配资源 }
cout<<endl; } }
int changdata(int i)//进行资源分配 { int j;
for (j=0;j<M;j++) {//p[j]=Avaliable[j];
Avaliable[j]=Avaliable[j]-Request[j]; //q[i][j]=Allocation[i][j];
Allocation[i][j]=Allocation[i][j]+Request[j]; //z[i][j]=Need[i][j];
Need[i][j]=Need[i][j]-Request[j]; } return 1; }
int safe()//安全性算法 {
int i,d,k=0,m,h,s,apply,Finish[100]={0}; int j; int flag=0; for(i=0;i<N;i++) Work[i]=Avaliable[i];
cout<<endl<<" 安全性检查 "<<endl; cout<<" Work Need Allocation Work+Allocation Finish"<<endl;
cout<<"进程名 "; for(h=0;h<4;h++){ for(s=0;s<N;s++) cout<<name[s]<<" "; cout<<" "; }
cout<<endl;
for(i=0;i<M;i++){ apply=0;
for(j=0;j<N;j++){
if (Finish[i]==False&&Need[i][j]<=Work[j]) {
apply++; if(apply==N)
{ cout<<" "<<i<<" "; for(d=0;d<N;d++)
cout<<Work[d]<<" "; cout<<" ";
for(d=0;d<N;d++) cout<<Need[i][d]<<" "; cout<<" "; for(d=0;d<N;d++) cout<<Allocation[i][d]<<" "; cout<<" "; for(m=0;m<N;m++) {
Work[m]=Work[m]+Allocation[i][m]; cout<<Work[m]<<" ";
}//变分配数 Finish[i]=True; temp[k]=i; cout<<" ";
cout<<"true"<<" "; cout<<endl; i=-1; k++; flag++; } } } }
for(i=0;i<M;i++){ if(Finish[i]==False){ for(j=0;j<N;j++){
Avaliable[j]=Avaliable[j]+Request[j];;
Allocation[i][j]=Allocation[i][j]-Request[j];;
Need[i][j]=Need[i][j]+Request[j]; }
cout<<endl<<"系统进入不安全状态!此时系统不分配资源!"<<endl;//不成功系统不安全
return 0;
} }
cout<<endl<<"此时系统是安全的!"<<endl;//如果安全,输出成功
cout<<"安全序列为:";
for(i=0;i<M;i++){//输出运行进程数组 cout<<temp[i]; if(i<M-1) cout<<"->"; }
cout<<endl; return 0; }
void share()//利用银行家算法对申请资源对进行判定 { char ch; int i=0,j=0; ch='y';
cout<<endl<<"请输入要求分配的资源进程号(0-"<<M-1<<"):";
cin>>i;//输入须申请的资源号
cout<<endl<<"请输入进程 "<<i<<" 申请的资源:"<<endl;
for(j=0;j<N;j++) {
cout<<name[j]<<":";
cin>>Request[j];//输入需要申请的资源 }
for (j=0;j<N;j++){
if(Request[j]>Need[i][j])//判断申请是否大于需求,若大于则出错
{
cout<<endl<<"进程 "<<i<<"申请的资源大于它需要的资源";
cout<<" 分配不合理,不予分配!"<<endl; ch='n'; break; }
else {
if(Request[j]>Avaliable[j])//判断申请是否大于当前资源,若大于则
{ //出错
cout<<endl<<"进程"<<i<<"申请的资源大于系统现在可利用的资源";
cout<<" 分配出错,不予分配!"<<endl; ch='n'; break; } } }
if(ch=='y') {
changdata(i);//根据进程需求量变换资源 showdata();//根据进程需求量显示变换后的资源
safe();//根据进程需求量进行银行家算法判断 } }
int main()//主函数 {
int t=1,i,j,number,choice,m,n,flag; char ming;
cout<<"*****************银行家算法的设计与实现*****************"<<endl;
cout<<endl<<"请首先输入系统可供资源种类的数量:"; cin>>n; N=n;
for(i=0;i<n;i++) {
cout<<"资源"<<i+1<<"的名称:"; cin>>ming; name[i]=ming; cout<<"资源的数量:"; cin>>number; Avaliable[i]=number; }
cout<<endl;
cout<<"请输入作业的数量:"; cin>>m;
M=m;
cout<<endl<<"请输入各进程的最大需求量("<<m<<"*"<<n<<"矩阵)[Max]:"<<endl;
for(i=0;i<m;i++) for(j=0;j<n;j++) cin>>Max[i][j]; do{ flag=0;
cout<<endl<<"请输入各进程已经申请的资源量("<<m<<"*"<<n<<"矩阵)[Allocation]:"<<endl;
for(i=0;i<m;i++) for(j=0;j<n;j++){ cin>>Allocation[i][j]; if(Allocation[i][j]>Max[i][j]) flag=1;
Need[i][j]=Max[i][j]-Allocation[i][j]; } if(flag)
cout<<endl<<"申请的资源大于最大需求量,请重新输入!\n"<<endl;
}
while(flag);
showdata();//显示各种资源
safe();//用银行家算法判定系统是否安全 while(1){
if(t==1){
cout<<endl<<" 利用银行家算法预分配资源 "<<endl; share();
t=0;} else break;
cout<<endl<<" 是否继续银行家算法?(按 1 键继续,按其它任意键退出):";
}
return 1; }
三、 结果分析
cin>>t; cout<<endl;
正在阅读:
银行家算法实验报告08-19
小学生经典美文欣赏02-20
课外经典美文摘抄赏析11-21
十篇经典哲理美文欣赏11-21
小学生经典美文欣赏11-21
经典美文语句摘抄70句11-21
经典美文欣赏:六月荷塘11-21
七颗钻石的经典美文欣赏11-21
- 上海大众、一汽大众、东风日产车型与VIN代号对照表
- 第2章服装原型及原型制作
- 江苏省工商行政管理系统经济户口管理办法及四项制度
- 纪检监察业务知识试题2
- 传感器综合题答案
- 北京第二外国语学院翻硕招生人数及学费
- 初三新编英语教材下册
- 公司庆中秋、迎国庆联欢会客串词
- 向区委常委会汇报安全生产工作材料
- 2006年GCT英语模拟试题(三)及答案解析
- 经济法概念的早期使用
- 我爱做家务课堂教学设计
- 学校安全工作月报表、消防安全排查表、消防隐患排查台账
- 成本会计毕业论文
- 班级文化建设论文
- 2018年天津市高考文科试题与答案汇总(Word版) - 图文
- 铁路论文
- 2017年嵌入式系统设计师考试时间及地点
- 1.111--灾害与突发公共卫生事件应急预案
- 起爆点主图 注意买入 拉升 逃顶源码指标通达信指标公式源码
- 银行家
- 算法
- 实验
- 报告