操作系统课程设计银行家算法算法的模拟实现.docx
《操作系统课程设计银行家算法算法的模拟实现.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计银行家算法算法的模拟实现.docx(26页珍藏版)》请在冰豆网上搜索。
操作系统课程设计银行家算法算法的模拟实现
枣庄学院
信息科学与工程学院课程设计任务书
题目
银行家算法算法的模拟实现
学生1:
学生2:
专业:
计算机应用技术
课程:
操作系统
指导教师:
职称:
完成时间:
2014年12月----2015年1月
枣庄学院信息科学与工程学院制
2014年12月10日
课程设计任务书及成绩评定
课程设计的任务和具体要求
操作系统课程设计是操作系统课程学习的延续。
主要目的是配合操作系统课程的学习,对Linux操作系统有一定掌握,能够熟练操作,并能在Linux系统下模拟实现操作系统的功能,有助于对操作系统的理解。
本次课程设计共分两部分,其中第一部分为操作题,同学们需要对Linux的基本的命令(常用的几个,讲课的时候强调的),这部分,任课教师实时检查,让学生用命令完成一定的功能,然后,根据完成情况评定成绩。
第二部分为编程设计题,每组同学必须独立完成,可以选择进程调度,也可以根据自己的兴趣,选择模拟实现磁盘调度、银行家算法、页面置换算法等。
指导教师签字:
日期:
指导教师评语
成绩:
指导教师签字:
日期:
课程设计所需软件、硬件等
系统:
WindowsXP上的虚拟机上运行的Centos
语言:
C语言
课程设计进度计划
起至日期
工作内容
备注
12:
11—12:
11
课程设计选题选题
12:
21:
—12:
25
机房调试
12:
25
打印
参考文献、资料索引
序号
文献、资料名称
编著者
出版单位
[1]鞠文飞.《Linux操作系统实用教程》.科学出版社,2012
[2]陈向群/陈渝.《操作系统精髓与设计原理》.机械工业出版社,2010
[3]汤子瀛•《计算机操作系统(修订版)》•西安电子科技大学出版社,2012
[4]吕雪峰•《嵌入式Linux软件开发从入门到精通》•清华大学出版社,2014
1引言
1.1linux及其特点4
1.1.1Linux的概述4
1.2Linux的结构4
1.3Linux的版本5
2常用命令基本介绍
2.1Linux目录命令5
2.2Linux文件命令5
3银行家算法
3.1实验目的6
3.2实验内容……6
3.3实验方法…7
3.3.1算法流程图.……7
3.3.2算法数据结构7
3.4实验代码…
3.5运行示例17
4实验小结
..…17
摘要
在计算机网络高速发展的今天,计算机技术不断地更新与完善,无论是硬件还是软件的变更都会在计算机操作系统的设计技术与使用风格上得到体现
操作系统是计算机系统配置的所有软件中使用最广泛的基础软件,它在整个计算机系统软件中处于中心地位,也是计算机专业课教学中做重要的环节之一。
从操作系统自身角度讲,它不仅很好地体现了计算机日益发展中的软件研究成果,而且也较好地体现了计算机的硬件技术发展及计算机系统结构的用户界面环境。
本实验主要根据是按动态优先数设计五个进程的调度算法。
即在它们调度的过程中,其优先数是不断变化的。
引言
1.1Linux及其特点
1.11Linux的概述
Linux是一种免费的、开放源代码的、交互式、多用户和多任务的、类Unix
的网络操作系统一,它包括系统内核、系统工具、应用程序以及一个完整的的开发环境。
实际上,准确点说,Linux指的是:
一个类似UNIX的开放的操作系统内核。
1.1.2Linux的特点
(1)自由和开放性
(2)类UNIX
(3)交互性强
(4)多用户和多任务
(5)出色的速度性能
(6)丰富的网络功能
(7)可靠的系统安全
(8)良好的可移植性
(9)具有标准兼容性
1.2linux的结构
内核:
Linux操作系统的主要部分,是运行程序和管理像磁盘和打印机等硬件设备的核心程序
Shell:
是系统的用户界面,提供了用户与内核进行交互操作的一种接口,实际上
Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核.而且,Shell有自己的编程语言用于对命令的编辑。
当然也提供图形界面
实用程序:
的Linux标准系统都有一套称为应用程序的程序集,它们是专门的程序,包括文本编辑器,编程语言,XWindow,办公套件,Internet工具,数据库等
1.3Linux的版本:
内核版本:
根据约定,次版本号为奇数时,表示该版本加入新内容,但不一定很稳定,相当于测试版;次版本号为偶数时,表示这是一个可以使用的稳定版本。
由于Linux内核开发工作的连续性,因此内核的稳定版本与在此基础上进一步开发的不稳定版本总是同时存在的。
对于一般用户,建议采用稳定的内核版本发行版本:
(1)SlackwareLinux
(2)RedHatLinux(3)TurboLinux
(4)DebianLinux(5)红旗Linux
2常用基本命的基本介绍:
2.1Linux目录命令
1.pwd---显示当前工作目录的绝对路径
格式:
pwd
2.cd---改变当前工作目录
命令格式:
cd[目录名]
3.Ls---列出文件目录的信息
命令格式:
Is[可选项][子目录名][文件名]
4.mkdir---建立目录
命令格式:
mkdir[可选项][目录名]
5.rmdir---删除目录
本命令用于删除指定的一个或多个目录,必须保证要删除的目录中没有任何文件。
命令格式:
rmdir[可选项][目录名]
2.2linux文件命令
1.ls-1文件名
2.chmod---改变文件或目录的访问权限
命令格式:
chmod[可选项][权限][目录或文件名]
3.chgrp命令----改变文件或目录所属的组。
命令格式:
chgrp[选项]groupfilename
选项:
-R:
递归式地改变指定目录及其下的所有子目录和文件的属组
4.chown----更改某个文件或目录的属主和属组
命令格式:
chown[选项]文件或目录的新属主[.文件或目录所在的新组][文件名|目录]
5.cat----显示,新建,连接文件
6.cp---功能:
文件或目录的拷贝,如同dos的copy
命令格式:
cp[选项]源文件或目录目标文件或目录
7.mv---功能:
为文件或目录改名或将文件由一个目录移入另一个目录中
命令格式:
mv[选项]源文件或目录目标文件或目录
8.rm---功能:
删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除
命令格式:
rm[选项]文件……
3银行家算法
3.1实验目的
银行家算法是避免死锁的一种重要方法。
通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁、产生死锁的必要条件、安全状态等重要概念,并掌握避免死锁的具体实施方法。
3.2实验内容
根据银行家算法的基本思想,编写和调试一个实现动态资源分配的模拟程序,并能够有效地防止和避免死锁的发生。
3.3实验方法
3.3.1算法流程图
3.3.2算法数据结构
1)可利用资源向量Available,它是一个最多含有100个元素的数组,其中
的每一个元素代表一类可利用的资源的数目,其初始值是系统中所配置的该类全部可用资源数目。
其数值随该类资源的分配和回收而动态地改变。
如果Available(j)=k,标是系统中现有j类资源k个。
2)最大需求矩阵Max这是一个nxm的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。
如果Max(i,j)=k,表示进程i需要i类资源的最大数目为k。
3)分配矩阵Allocation,这也是一个nXm的矩阵,它定义了系统中的每类资
源当前一分配到每一个进程的资源数。
如果Allocation(i,j)=k,表示
进程i当前已经分到j类资源的数目为k。
Allocationi表示进程i的分配
向量,有矩阵Allocation的第i行构成。
4)需求矩阵Need这还是一个nXm的矩阵,用以表示每个进程还需要的各类资源的数目。
如果Need(i,j)=k,表示进程i还需要j类资源k个,才能完成其任务。
Needi表示进程i的需求向量,由矩阵Need的第i行构成。
5)上述三个矩阵间存在关系:
Need(i,j)=Max(i,j)-Allocation(i,j);
1.银行家算法
设Request[i]是进程i的请求向量,如果Request[i,j]=K,表示进程i需要K个j类型的资源。
当i发出资源请求后,系统按下述步骤进行检查:
1)如果Requesti2)如果Requesti3)系统试探性地把资源分配给进程i,并修改下面数据结构中的数值:
Available=Available-Requesti
Allocationi=Allocationi+Requesti
Needi=Needi-Requesti
4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。
如果安全才正式将资源分配给进程i,以完成本次分配;否则,将试探分配作废,恢复原来的资源分配状态,让进程i等待。
3.4实验代码
源代码:
#include
#include
#include
#defineFalse0
#defineTrue1
usingnamespacestd;
intMax[100][100]={0};//各进程所需各类资源的最大需求
intAvaliable[100]={0};//系统可用资源
charname[100]={0};//资源的名称
intAllocation[100][100]={0};//系统已分配资源
intNeed[100][100]={0};//还需要资源
intRequest[100]={0};//请求资源向量
inttemp[100]={0};//存放安全序列
intWork[100]={0};//存放系统可提供资源
intM=100;〃进程的最大数为
intN=100;〃资源的最大数为
voidshowdata()//显示资源矩阵
inti,j;
cout«"系统目前可用的资源[Avaliable]:
"<for(i=0;icout<cout«endl;
for(j=0;jcout<<cout«"MaxAllocationNeed"
coutvv"进程名";
for(j=0;j<3;j++){
for(i=0;icout<}cout«endl;
for(i=0;icout«""<
for(j=0;jcout«Max[i][j]vv"";
cout<<"";
for(j=0;jcout«Allocation[i][j]<<"";
cout<<"";
for(j=0;j}
}
intchangdata(inti)//进行资源分配
{
intj;
for(j=0;jAvaliable[j]=Avaliable[j]-Request[j];
Allocation[i][j]=Allocation[i][j]+Request[j];Need[i][j]=Need[i][j]-Request[j];
}
return1;
}
intsafe()//安全性算法
{
inti,k=0,m,apply,Finish[100]={0};
inti;
intflag=O;
Work[0]=Avaliable[0];
Work[1]=Avaliable[1];
Work[2]=Avaliable[2];
for(i=0;iapply=0;
for(j=0;jif(Finish[i]==False&&Need[i][j]<=Work[j]){apply++;
if(apply==N){
for(m=0;mWork[m]=Work[m]+Allocation[i][m];//变分配数
Finish[i]=True;temp[k]=i;i=-1;k++;flag++;
}
}
}
}
for(i=0;iif(Finish[i]==False){coutvv"系统不安全"<}
}
cout<<"系统是安全的!
"<";
for(i=0;icout<if(i";
}
cout«endl;
return0;
}
voidshare()//利用银行家算法对申请资源对进行判定
{
charch;
inti=0,j=0;
ch='y';
coutvv"请输入要求分配的资源进程号(0-"<";
cin»i;//输入须申请的资源号
coutvv"请输入进程"vvivv"申请的资源:
"<for(j=O;j{
coutv";
cin>>Request[j];//输入需要申请的资源
}
for(j=O;jif(Request[j]>Need[i][j])//判断申请是否大于需求,若大于则出错{
coutvv"进程"vvivv"申请的资源大于它需要的资源";coutvv"分配不合理,不予分配!
"<ch='n';break;
}
else{
if(Request[j]>Avaliable[j])//判断申请是否大于当前资源,若大于则
{//出错
coutvv"进程"vvivv"申请的资源大于系统现在可利用的资源";
coutvv"分配出错,不予分配!
"vvendl;
ch='n';
break;
}
}
}
if(ch=='y'){
changdata(i);//根据进程需求量变换资源
showdata();//根据进程需求量显示变换后的资源safe();//根据进程需求量进行银行家算法判断
}
}
voidaddresources(){//添加资源
intn,flag;
coutvv"请输入需要添加资源种类的数量:
";
cin>>n;
flag=N;
N=N+n;
for(inti=0;ivn;i++){
coutvv"名称:
";
cin>>name[flag];
coutvv"数量:
";
cin>>Avaliable[flag++];
}
showdata();
safe();
}
voiddelresources(){//删除资源charming;
inti,flag=1;coutvv"请输入需要删除的资源名称:
";
do{
cin»ming;
for(i=0;iif(ming==name[i]){flag=0;break;
}
if(i==N)coutvv"该资源名称不存在,请重新输入:
";
}
while(flag);
for(intj=i;j{
name[j]=name[j+1];Avaliable[j]=Avaliable[j+1];
}N=N-1;showdata();safe();
}
voidchangeresources(){//修改资源函数coutvv"系统目前可用的资源[Avaliable]:
"<for(inti=0;icout<"vcoutvv"输入系统可用资源[Avaliable]:
"<cin>>Avaliable[0]>>Avaliable[1]>>Avaliable[2];coutvv"经修改后的系统可用资源为"vvendl;for(intk=0;kvN;k++)
coutvvname[k]vv":
"vvAvaliable[k]vvendl;showdata();
safe();
}
voidaddprocess(){//添加作业
intflag=M;
M=M+1;
coutvv"请输入该作业的最大需求量[Max]"vvendl;for(inti=0;ivN;i++){
coutvvname[i]vv":
";
cin>>Max[flag][i];
Need[flag][i]=Max[flag][i]-Allocation[flag][i];
}showdata();safe();
}
intmain()//主函数
{
inti,j,number,choice,m,n,flag;charming;
cout«"\t"
ndl;
cout«"\t||
||"<coutvv"\t||银行家算法的实现
II"<cout«"\t||
||"<cout«"\t||
||"<cout«"\t||
||"<||"<ndl;coutvv"请首先输入系统可供资源种类的数量:
";cin>>n;
N=n;
for(i=0;i{
coutvv"资源"vvi+1vv"的名称:
";cin»ming;
name[i]=ming;
coutvv"资源的数量:
";
cin»number;Avaliable[i]=number;
}
coutvvendl;coutvv"请输入作业的数量:
";cin>>m;
M=m;
coutvv"请输入各进程的最大需求量("vvmvv*"vv*v,矩阵)[Max]:
"vvendl;
vve
vve
for(i=0;ivm;i++)
for(j=0;jcin»Max[i][j];
do{
flag=0;
cout«"请输入各进程已经申请的资源量("<"<for(i=0;ifor(j=0;jcin>>Allocation[i][j];
if(Allocation[i][j]>Max[i][j])flag=1;Need[i][j]=Max[i][j]-Allocation[i][j];
}
if(flag)coutvv"申请的资源大于最大需求量,请重新输入!
\n";
}
while(flag);
showdata();//显示各种资源
safe();//用银行家算法判定系统是否安全
while(choice)
{
cout<<"\t----
II
<银仃豕算法演示
cout<<"
1:
增加资源"
<cout<<"
2:
删除资源"
<cout<<"
3:
修改资源"
<cout<<"
4:
分配资源"
<cout<<"
5:
增加作业"
<cout<<"
0:
离开"
<<cout<<"\t"
ndl;
cout<<"请选择功能号:
";
cin>>choice;
switch(choice)
{
case1:
addresources();break;
case2:
delresources();break;
case3:
changeresources();break;
case4:
share();break;
case5:
addprocess();break;
case0:
choice=0;break;
default:
cout<<"请正确选择功能号(0-5)!
"<}
return1;
}
3.5运行结果:
1)初始化状态:
C:
\WindoW5\systein32\cmd.exe
银行家算法的实现
输
先
甘IX源源源源源
3的
-A0B5C7一T-1尺:
1:
0:
0可方.尔■■』尔:
逾K作业的懿胃汚
输人各进程前叢大需求量佔珀矩阵小
53
22
02
22
请输龛各进程已经申请的资源量站昭矩阵>[filloCationJ:
1
1
S累统目前叮用的资源EfiualiableJz
BC
^57
0
0
2
1
2
AllucaABCI1
毎
1
I毎
MaxfiBC153
22
珏2
22
33
进程名
&
1
2
3
:
统是安全的?
分配的序?
I]:
0->1->2->3->4
S
0
2
1
2
NeedfiBC14
2
野
1
3
3
2
S
1
1
mC:
\Window5\system32\cmd.exe
银行家算法的实现
需求量z矩阵〉ms
请输入各进程已经申请的资源量估旧矩阵〉IfiIlocationJ:
!
10
0U
:
92
11
02
系统目前可用的资源CHustliablel?
..0C
0S7
系统星安全的甲
分配的序列:
0->1->2->3->4半三
2)为进程0分配资源:
C:
\Windows\system32\cmd.e