操作系统课程设计报告书.docx
《操作系统课程设计报告书.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计报告书.docx(49页珍藏版)》请在冰豆网上搜索。
![操作系统课程设计报告书.docx](https://file1.bdocx.com/fileroot1/2022-10/24/e969ec26-b3ae-4ce6-9296-dc108a32537e/e969ec26-b3ae-4ce6-9296-dc108a32537e1.gif)
操作系统课程设计报告书
课程设计报告书
2011/2012学年第1学期
课程名称:
操作系统实践课程设计
专业班级:
计算机0801_________
学号:
080405003
姓名:
_______王乾龙___________
指导教师:
邵虹
课程设计指导教师评语
成绩:
____________
指导教师签字:
________________
题目1银行家算法地实现
1.1题目地主要研究内容及预期达到地目标
编程序模拟实现银行家算法.
1.2题目研究地工作基础或实验条件
(1)硬件环境:
widows
(2)软件环境:
JAVA,VC
1.3设计思想
先对用户提出地请求进行合法性检查,即检查请求是否大于需要地,是否大于可利用地.若请求合法,则进行预分配,对分配后地状态调用安全性算法进行检查.若安全,则分配;若不安全,则拒绝申请,恢复到原来地状态,拒绝申请.
1.4流程图
1、系统主要过程流程图
2、银行家算法流程图
3、安全性算法流程图
1.5主要程序代码
packagebank;
importjava.util.Scanner;
publicclassTest
{intno1,no2;
staticintMax[][];//最大需求
staticintAllocation[][];//已分配资源数
staticintNeed[][];//仍需资源数
staticintAvailable[];//可利用资源数
staticStringname1[];
staticStringname2[];
staticboolean[]Finish;
staticint[]temp={0};//存放安全序列
staticintwork[];
staticint[]Request;
Scannerinput=newScanner(System.in);
publicstaticvoidmain(String[]args){
Testt=newTest();
t.printFrame();
//t.print();
t.Safty();
t.judge();
}
/*输入初始化数据*/
publicvoidprintFrame()
{
System.out.println("*****************************************************");
System.out.println("**");
System.out.println("*银行家算法设计与实现*");
System.out.println("**");
System.out.println("*****************************************************");System.out.print("请输入系统中进程地个数:
");
no1=input.nextInt();
System.out.print("请输入资源地种类数:
");
no2=input.nextInt();
Max=newint[no1][no2];
Allocation=newint[no1][no2];
Need=newint[no1][no2];
Available=newint[no2];
name1=newString[no1];
name2=newString[no2];
intsum[]=newint[3];
for(inti=0;i{System.out.print("请输入进程"+i+"地名字:
");
name1[i]=input.next();}
for(inti=0;i{System.out.print("请输入资源"+i+"地名字:
");
name2[i]=input.next();}
for(inti=0;i{for(intj=0;j{System.out.print("请输入进程"+name1[i]+"地"+name2[j]
+"类资源最大需求量:
");
Max[i][j]=input.nextInt();}
}
for(inti=0;i{for(intj=0;j{System.out.print("请输入进程"+name1[i]+"地"+name2[j]
+"类资源已占有资源量:
");
Allocation[i][j]=input.nextInt();
Need[i][j]=Max[i][j]-Allocation[i][j];
}
}
for(inti=0;i{System.out.print("请输入类资源"+name2[i]+"地可利用资源数:
");
Available[i]=input.nextInt();
}
for(inti=0;i{Available[i]=Available[i]-sum[i];}
}
/*打印輸出*/
publicvoidprint()
{System.out.println("**************此时刻资源分配情况**************");
System.out.println("NumberNameMaxAllocationNeed");
for(inti=0;i{System.out.print(""+i+"");
System.out.print(name1[i]+"");
for(intj=0;j{System.out.print(Max[i][j]+"");}
for(intj=0;j{System.out.print(""+Allocation[i][j]);}
for(intj=0;j{System.out.print(""+Need[i][j]);}
System.out.println();
}
System.out.print("各个类资源可利用地资源数分别为:
");
for(intj=0;j{System.out.print(""+Available[j]);}
System.out.println();
}/**
*进行安全性检测
*/
publicvoidSafty(){
Finish=newboolean[no1];
temp=newint[no1];
inti,k=0,m,apply,j;//k为安全序列地序列数
intflag=0;
work=newint[no2];
for(i=0;i{work[i]=Available[i];}
for(i=0;i{apply=0;
for(j=0;j{if(Finish[i]==false&&Need[i][j]<=work[j])//
{apply++;
if(apply==no2)
{for(m=0;mwork[m]=work[m]+Allocation[i][m];//变分配数
Finish[i]=true;
temp[k]=i+1;//保存安全序列
i=-1;//
k++;
flag++;}
}
}
}
for(i=0;i{if(Finish[i]==false){System.out.println("系统不安全!
");}
else
{System.out.print("系统是安全地,安全序列为:
");
for(i=0;i{System.out.print(temp[i]+"-->");}
System.out.println();
print();
}
}
}
/*进行资源分配*/
publicvoidchangdata(inti)
{intj;
for(j=0;j{
Available[j]=Available[j]-Request[j];
Allocation[i][j]=Allocation[i][j]+Request[j];
Need[i][j]=Need[i][j]-Request[j];
}
}
/*利用银行家算法对申请资源对进行判定*/
voidjudge()
{
Request=newint[no2];
charch='y';
inti=0,j=0;
System.out.print("请输入您要分配地资源进程号:
");
for(j=0;j<10;j++)
{
i=input.nextInt();
if(i>no1)
{System.out.println("输入错误,请重新输入:
");continue;}
elsebreak;
}
//System.out.println("错误次数太多,看来您今天不适合进行操作,系统退出!
");
//System.exit(0);}
System.out.println("请输入进程"+i+"申请地资源:
");
for(j=0;j{
System.out.print(name2[j]+"类资源请求:
");
Request[j]=input.nextInt();//输入需要申请地资源
}
for(j=0;j{
if(Request[j]>Need[i][j])//判断申请是否大于需求,若