银行家算法实验报告
更新时间:2023-07-21 09:15: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;
正在阅读:
银行家算法实验报告07-21
2017-2022年中国锡矿石市场运行态势报告(目录) - 图文05-12
皮肤软组织骨恶性肿瘤06-05
污染防治措施09-22
土木工程毕业论文(工程量清单计价与项目成本核算体系)05-10
幼儿园优秀教案08-01
电缆故障测试系统06-10
八年级英语上册 Unit 1 Lesson 1 Computers reading教案 牛津深圳版五四制09-06
怎么理财赚钱 投资理财 白银投资05-20
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 银行家
- 算法
- 实验
- 报告
- 会计核算的具体内容和一般要求
- 五金冲模设计规范
- 贵州远程医疗大数据云平台建设与应用项目可研报告前60页
- 城管局科学发展观学习调研阶段工作总结
- 0-J2EE开发基础教程
- 浅谈中国奢侈品市场发展特点及奢侈品的贸易发展
- 2015年北京中医药大学临床医学院(东直门医院)中医内科学专业复试分数线、复试参考书目
- 合肥工业大学 人机工程学 试题
- 湖心亭看雪背景资料
- 【状元之路——高考政治总复习专题】【专题7】国际社会与我国的外交政策
- 喷浆护壁施工方案
- 外科总论考试大纲
- 肯德基日常工作与危机处理手册
- 五笔拆字规则和技巧
- 导学案:6.1源远流长的中华文化
- 人教统编版2019-2020年四年级上册语文第6单元达标测试卷D卷
- 如何提高教学有效性
- 奥巴马在开学第一课上的演讲词(中英文对照)
- 化学《必修2》讲学练参考答案
- 吉安市2012年度事业单位招聘工作人员报考岗位表