银行家算法操作系统课程设计报告.docx
《银行家算法操作系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《银行家算法操作系统课程设计报告.docx(27页珍藏版)》请在冰豆网上搜索。
![银行家算法操作系统课程设计报告.docx](https://file1.bdocx.com/fileroot1/2022-12/14/24955426-1be5-492d-80a0-c08542ab6b08/24955426-1be5-492d-80a0-c08542ab6b081.gif)
银行家算法操作系统课程设计报告
操作系统原理课程设计
题目:
银行家算法
院系:
计算机科学技术学院
班级学号:
*****************
姓名:
******
同组成员:
************
指导教师:
*******
2014年**月**日
操作系统原理课程设计任务书
1、题目:
银行家算法
二、设计要求
(1)*****负责设计与实现,定义全局变量,签名函数和主函数以及显示分配情况函数showdata();*****负责设计与实现系统初始化函数chushihua();安全性算法函数safe();*****负责设计与实现银行家算法函数bank()。
(2)查阅相关资料,自学具体课题中涉及到的新知识。
(3)采用结构化、模块化程序设计方法,功能要完善,具有一定的创新。
(4)所设计的程序应有输入、输出。
(5)按要求写出课程设计报告,于设计结束后1周内提交。
其主要内容包括:
封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件总体设计、详细设计、软件的调试、总结、致谢、附录(带中文注释的程序清单)、参考文献。
总体设计应配合软件总体模块结构图来说明软件应具有的功能;详细设计应用传统或N-S流程图和屏幕抓图说明;调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。
三、课程设计工作量
一般每人的程序量在200行有效程序行左右。
四、课程设计工作计划
2013年12月30日,指导教师讲解布置题目,学生根据题目准备资料;
2013年12月30日,进行总体方案设计;
2013年12月31日~2014年1月3日,完成程序模块并通过独立编译;
2014年1月4日~1月6日,将各模块集成为一完整的系统,并录入足够数据进行调试运行;
2014年1月7日~1月12日,验收、撰写课程设计报告。
指导教师签章:
专业主任签章:
操作系统原理课程设计指导教师评语与成绩
指导教师评语:
课程设计表现成绩:
课程设计验收成绩:
课程设计报告成绩:
课程设计总成绩:
指导教师签章
2014年1月13日
一概述
1.1课程设计目的
本课程设计的目的是通过设计一个银行家算法来避免程序系统中发生死锁现象
1.2程序的主要设计思想
选择开发环境是vc++6.0,运用结构达到数据结构设计的合理性和必要性
1.3课程设计的要求
(1)学生自由组成课程设计小组,建议每组最多不超过3个学生
(2)选择课程设计题目中的一个课题,每组独立完成。
(3)查阅相关资料,自学具体课题中涉及到的新知识
根据课堂学习的操作系统理论知识,完成本系课程设计。
通过本想课程设计,可以培养我们的独立思考,综合运用所学有关相应知识的能力,并能更好的巩固《操作系统原理》课程学习的内容,掌握工程软件设计的基本方法,强化上机手编程能力,闯过理论与实践相结合的难关。
二总体方案设计
2.1功能设计
该操作系统管理模拟银行家管理模拟功能。
该管理模拟系统中,主要包含了系统安全性的判断、申请资源、输出当前资源分配情况等功能。
2.2结构设计
如图2.2.1
如图2.2.1
三详细设计
在银行家管理模拟系统中,初始化函数chushihua(),安全性算法函数safe();银行家算法函数bank(),输出当前资源分配情况showdata()签名函数sign();
3.1初始化函数
voidchushihua()
{
//===系统初始化输入===
cout<<"-------程序开始,系统初始化输入-------"<cout<<"==============================================================="<cout<<"请输入进程的数量:
";//从此开始输入有关数据
cin>>n;
cout<<"请输入资源种类数:
";
cin>>m;
cout<"<cout<for(j=0;j{
cout<<"输入资源"<";
cin>>Available[j];
Work[j]=Available[j];//初始化Work[j]
}
cout<cout<<"请输入各进程当前已分配的资源数量Allocation["<"<for(i=0;i{
for(j=0;j{
cout<<"请输入进程"<
";
cin>>Allocation[i][j];
}
cout<Finish[i]=0;//初始化Finish[i]
}
cout<cout<<"请输入各进程对各类资源的最大需求数Max["<"<for(i=0;i{
for(j=0;j{
cout<<"请输入进程"<
";
cin>>Max[i][j];
if(Max[i][j]>Allocation[i][j])//
Need[i][j]=Max[i][j]-Allocation[i][j];//计算还需求量
else
Need[i][j]=0;//最大需求量小于已分配量时还需求量为0,即此类资源已足够不需再申请
}
cout<}
cout<------"<}
3.2安全算法函数
voidsafe()
{
l=0;
for(i=0;i{
if(Finish[i]==0)
{//寻找Finish[i]==0的进程条件一
counter=0;//记数器
for(j=0;jif(Work[j]>=Need[i][j]);//可用大于等于需求
else
{
counter=1;
break;
}
if(counter!
=1)
{//进程的每类资源量都符合条件Work[j]>=Need[i][j]条件二
p[l]=i;//存储安全序列
Finish[i]=1;//标志为可分配
for(j=0;jWork[j]=Work[j]+Allocation[i][j];//释放资源
l=l+1;//记数,当L=N时说明满足安全序列,即都符合条件Work[j]>=Need[i][j]
i=-1;//从第一个进程开始继续寻找满足条件一二的进程
}
}
i++;//for循环继续寻找
}
}
//===显示分配情况函数===
voidshowdata()//函数showdata,输出当前资源分配情况
{
inti,j;//局部变量
intAll[y];//各种资源的总数量
intl2;//局部变量l1,
cout<<"==============================================================="<cout<<"------系统当前状态如下:
------"<cout<<"%%各种资源的总数量(all):
"<for(j=0;j{
cout<<"资源"<";
All[j]=Available[j];//初始化先赋值加上可利用量
for(i=0;iAll[j]+=Allocation[i][j];//再加上每个进程已分配量计算J类资源总量
cout<if((j+1)%5==0)cout<=0
}
cout<cout<<"------系统目前各种资源可用的数为(available):
"<for(j=0;j{
cout<<"资源"<"<if((j+1)%5==0)cout<=0
}
cout<cout<<"%%各进程已经得到的资源量(allocation):
"<for(i=0;i<=m/5;i++)
{//设计每行最多显示五种资源
for(j=i*5;j
cout<for(l2=0;l2{
cout<<"进程"<";
for(j=i*5;j
cout<cout<}
}
cout<cout<<"%%各进程还需要的资源量(need):
"<for(i=0;i<=m/5;i++)
{//设计每行显示五种资源
for(j=i*5;j
cout<<"资源"<cout<for(l2=0;l2{
cout<<"进程"<";
for(j=i*5;j
cout<cout<}
}
cout<cout<<"==============================================================="<cout<system("pause");//暂停
}
3.3主函数以及输出资源分配情况
intmain()
{
system("color6f");//设置当前窗口的背景色和前景色0=黑色8=灰色
cout<cout<<"\t\t================================================"<cout<<"\t\t||||"<cout<<"\t\t||模拟银行家算法||"<cout<<"\t\t||||"<cout<<"\t\t||歡飲使用本系統||"<cout<<"\t\t||您的支持是我們前進的最大動力!
||"<cout<<"\t\t================================================"<system("pause");//暂停
chushihua();//初始化函数调用
cout<showdata();//输出初始化后的状态
//===判断当前状态的安全性===
safe();//安全性算法函数调用
if(l{
cout<<"\n当前状态不安全,无法申请,程序退出!
!
!
!
!
"<cout<system("pause");
sign();//调用签名函数
return0;//break;
}
else
{
system("color2e");
inti;//局部变量
l=0;
cout<<"\n安全的状态!
!
!
"<cout<<"安全序列为:
";
cout<for(i=1;icout<<"==>>"<<"进程"<<"("<
for(i=0;iFinish[i]=0;//所有进程置为未分配状态
cout<}
bank();//银行家算法函数调用
return0;//break;
}
四程序的调试
该操作系统模拟实现功能较完善,且界面简洁,美观,给人一种思路清晰的感觉。
且每块功能都有相应的操作提示信息。
打开开发工具VC++6.0,打开源文件,通过调用菜单项Build->Rebuildall进行编译连接,可以在指定的工程目录下得到debug->process.exe程序,可以在控制台进入该debug目录运行程序。
出现开始运行界面,即欢迎您光临本系统,进入开始界面后,按任意键进入该系统。
开始界面:
如图4.1
如图4.1开始界面
程序开始:
如图4.2
如图4.2程序开始
输入资源状况:
如图4.3
如图4.3输入资源状况
判断安全性,以及安全序列:
如图4.4
如图4.4判断安全性,以及安全序列
进行资源分配申请:
如图4.5
如图4.5进行资源分配申请
资源分配情况:
如图4.6
如果资源不够可分配,直接输出不是安全序列,转入结束。
如果安全,直接进行资源分配,并输出安全序列
如图4.6资源分配情况
判断是否加入新作业:
如图4.7
如图4.7判断是否加入新作业
结束界面:
如图4.8
如图4.8结束界面
五课程设计总结
我们本次操作系统实验是对我们所学知识的另一种检验,把所学知识真正的运用到实际中,摆脱了那个仅仅的理论环节。
为我们以后工作打下很好的基础,让我们知道编写一个程序不仅要自己明白,还要让他人也能理解并且可以正确运用到我们的程序。
一个好的程序应该具有正确性、可读性、健壮性和效率于低存储等特性。
回顾起此次数据结构课程设计,我有很多感慨从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
我们的课题是银行家算法,运用到了c++的知识,还有判断安全性以及其他一些函数。
每个部分都有不同的方法来完成问题,从而我知道了,不能小看每个看似简单的部分,都会起到很大的作用。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导和同学的帮助下,终于解决了。
通过这次课设,让我们对书本上所学的一些知识有了更加深刻的了解,提高了自身的能力以及合作精神,同时再次对帮助我们的老师和同学表示感谢。
六后记
在我们这个小组从选择这个程序到编写程序再到程序的调试再到最后的验收,都使我学到了许多的东西,有的根本就是书本上学不到的。
在我看来,这次课程设计也可以看作是我们在社会上工作时候的一场小小的模拟,跟我们在以后的工作学习中有很多地方相像之处。
这次的课程设计让我学到的很多东西,例如:
遇到困难应该自己独立解决,不能遇到困难就找老师,或者一决不振,不想再继续了,在这个时候我们应该调整我们的心态,冷静一下。
不应该烦躁,试想在以后的工作中如果遇到了类似的更难得问题时,那时候我们可不能再找老师或者不想干了,那样是不行的。
还有就是我学到了有的错误是以前从没犯过的,最后知道了,也增加了我的经验,为以后的学习奠定基础。
虽然我们的程序已经基本完事了,一些基本的功能已经基本实现但是还是有不足之处,因为这次得时间有限,所以以后应该进一步学习,以增加自己的学习经验。
非常感谢老师在实验的的过程中耐心的帮助我修改程序的错误,并给我讲解是为什么错的,并如何改正,这样使我学到了很多课本上学不到的东西,还有我要感谢我们组的成员,这样使我懂得了什么叫团队合作精神,他们给予我的帮助也是很巨大的,如果没有我们组的共同努力,我们的这个程序也不会运行成功。
七致谢
非常感谢我同组同学的帮忙,没有她们的帮助我们的程序也不能完整的进行,只有我们共同努力,我们的程序才能编译成功。
最后,非常感谢这学期感谢***老师的教导,让我了解到操作系统课程的用处。
使我的知识更加的丰富,忠心感谢老师的指导与帮助。
老师您辛苦了。
八附录
全部代码及注释:
#include
#include
#include
#include
#include
//===定义全局变量===
constintx=50,y=100;//定义常量,便于修改
intAvailable[x];//各种资源可利用的数量
intAllocation[y][y];//各进程当前已分配的资源数量
intMax[y][y];//各进程对各类资源的最大需求数
intNeed[y][y];//还需求矩阵
intRequest[x];//申请各类资源的数量
intWork[x];//工作向量,表示系统可提供给进程继续运行所需的各类资源数量
intFinish[y];//表示系统是否有足够的资源分配给进程,0为否,非0为是
intp[y];//存储安全序列
inti,j;
intn,m;//n为进程的数量,m为资源种类数
intl=0,counter=0;
//函数声明
voidchushihua();//系统初始化函数
voidsafe();//安全性算法函数
voidbank();//银行家算法函数
voidshowdata();//函数showdata,输出当前资源分配情况
voidsign();//签名函数
//===系统初始化函数===
voidchushihua()
{
//===系统初始化输入===
cout<<"-------程序开始,系统初始化输入-------"<cout<<"==============================================================="<cout<<"请输入进程的数量:
";//从此开始输入有关数据
cin>>n;
cout<<"请输入资源种类数:
";
cin>>m;
cout<"<cout<for(j=0;j{
cout<<"输入资源"<";
cin>>Available[j];
Work[j]=Available[j];//初始化Work[j]
}
cout<cout<<"请输入各进程当前已分配的资源数量Allocation["<"<for(i=0;i{
for(j=0;j{
cout<<"请输入进程"<
";
cin>>Allocation[i][j];
}
cout<Finish[i]=0;//初始化Finish[i]
}
cout<cout<<"请输入各进程对各类资源的最大需求数Max["<"<for(i=0;i{
for(j=0;j{
cout<<"请输入进程"<
";
cin>>Max[i][j];
if(Max[i][j]>Allocation[i][j])//
Need[i][j]=Max[i][j]-Allocation[i][j];//计算还需求量
else
Need[i][j]=0;//最大需求量小于已分配量时还需求量为0,即此类资源已足够不需再申请
}
cout<}
cout<------"<}
//===安全性算法函数===
voidsafe()
{
l=0;
for(i=0;i{
if(Finish[i]==0)
{//寻找Finish[i]==0的进程条件一
counter=0;//记数器
for(j=0;jif(Work[j]>=Need[i][j]);//可用大于等于需求
else
{
counter=1;
break;
}
if(counter!
=1)
{//进程的每类资源量都符合条件Work[j]>=Need[i][j]条件二
p[l]=i;//存储安全序列
Finish[i]=1;//标志为可分配
for(j=0;jWork[j]=Work[j]+Allocation[i][j];//释放资源
l=l+1;//记数,当L=N时说明满足安全序列,即都符合条件Work[j]>=Need[i][j]
i=-1;//从第一个进程开始继续寻找满足条件一二的进程
}
}
i++;//for循环继续寻找
}
}
//===显示分配情况函数===
voidshowdata()//函数showdata,输出当前资源分配情况
{
inti,j;//局部变量
intAll[y];//各种资源的总数量
intl2;//局部变量l1,
cout<<"==============================================================="<cout<<"------系统当前状态如下:
------"<