银行家算法操作系统实验报告.docx
- 文档编号:29731265
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:6
- 大小:17.33KB
银行家算法操作系统实验报告.docx
《银行家算法操作系统实验报告.docx》由会员分享,可在线阅读,更多相关《银行家算法操作系统实验报告.docx(6页珍藏版)》请在冰豆网上搜索。
银行家算法操作系统实验报告
竭诚为您提供优质文档/双击可除
银行家算法操作系统实验报告
篇一:
计算机操作系统银行家算法实验报告
计算机操作系统实验报告
一、实验名称:
银行家算法
二、实验目的:
银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。
三、问题分析与设计:
1、算法思路:
先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。
若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。
若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。
2、银行家算法步骤:
(1)如果Requesti<or=need,则转向步骤
(2);否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。
(2)如果Request<or=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。
(3)系统试探把要求的资源分配给进程pi,并修改下面数据结构中的数值:
Available=Available-Request[i];
Allocation=Allocation+Request;
need=need-Request;
(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。
3、安全性算法步骤:
(1)设置两个向量
①工作向量work。
它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,work=Allocation;
②布尔向量Finish。
它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]=false,当有足够资源分配给进程时,令Finish[i]=true。
(2)从进程集合中找到一个能满足下述条件的进程:
①Finish[i]=false
②need 如找到,执行步骤(3);否则,执行步骤(4)。
(3)当进程p获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:
work=work+Allocation;
Finish[i]=true;
转向步骤
(2)。
(4)如果所有进程的Finish[i]=true,则表示系统处于安全状态;否则,系统处于不安全状态。
四.程序源代码:
#include
#definew5//最大进程数w=5
#defineR3//最大资源总数=3
intAvailable[3];//可利用资源向量
intmax[5][3];//最大需求矩阵
intAllocation[5][3];//分配矩阵
intneed[5][3];//需求矩阵
intRequest[3];//进程请求向量
voiddispose()
{
printf("请输入可利用资源向量Available(格式:
a,b,c)\n");scanf("%d,%d,%d",
printf("请输入最大需求数max(格式:
a,b,c)\n");
for(intj=0;j {
printf("进程%d:
\n",j);
scanf("%d,%d,%d",}
printf("请输入分配数Allocation(格式:
a,b,c)\n");
for(j=0;j {
printf("进程%d\n",j);
scanf("%d,%d,%d",
}//输入max[5][3],Available[5][3],Allocation[5][3]for(j=0;j for(inti=0;i need[j][i]=max[j][i]-Allocation[j][i];//求出need[5][3]}
main()
{
printf("银行家算法\n");dispose();
printf("安全性检查\n");
intwork[3];//系统可提供进程继续运行所需的各类资源数charFinish[5];//表示系统是否有足够的资源分配
for(inti=0;i Finish[i]=f;
for(intk=0;k work[k]=Available[k];
intq[5];
for(intx=0;x {
printf("请输入一个序列:
\n");
scanf("%d,%d,%d,%d,%d",for(i=0;i {
(:
银行家算法操作系统实验报告) if((need[q[i]][0] work[k]=work[k]+Allocation[q[i]][k];
Finish[i]=t;
}
}
if((Finish[0]==t)t)t)t)t))//通过Finish[i]判断系统是否安全
break;
else
printf("此序列不是安全序列,请重新输入一个序列!
\n");if(x==49)
return0;
}
printf("这个系统安全!
\n");
篇二:
操作系统实验报告--c语言实现银行家算法
实验报告
篇三:
银行家算法实验报告
计算机学院《操作系统》课程设计报告
设计题目:
银行家算法的实现
姓名:
学号:
班级:
06网络工程班
完成日期:
20XX年6月13日
银行家算法分析、设计与实现
一、设计理论描述
本设计的目的是通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地发生。
要求如下:
(1)模拟一个银行家算法;
(2)初始化时让系统拥有一定的资源;
(3)用键盘输入的方式申请资源;
(4)如果预分配后,系统处于安全状态,则修改系统的资源分配情况;
(5)如果预分配后,系统处于不安全状态,则提示不能满足请求,设计的主要内容是模拟实现动态资源分配。
同时编写和调试一个系统动态资源的简单模拟程序,观察死锁产生的条件,并使用适当的算法,有效的防止和避免死锁的发生。
银行家算法.顾名思义是来源于银行的借贷业务,一定数量的本金要应多个客户的借贷周转,为了防止银行加资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。
在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。
如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。
把一个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块pcb其中“状态”有就绪态、等待态和完成态。
当进程在处于等待态时,表示系统不能满足该进程当前的资源申请。
“资源需求总量”表示进程在整个执行过程中总共要申请的资源量。
显然,,每个进程的资源需求总量不能超过系统拥有的资源总数,银行算法进行资源分配可以避免死锁.
二、算法描述及数据结构模型
1.银行家算法:
设进程i提出请求Request[n],则银行家算法按如下规则进行判断。
(1)如果Request[n]>need[i,n],则报错返回。
(2)如果Request[n]>Available,则进程i进入等待资源状态,返回。
(3)假设进程i的申请已获批准,于是修改系统状态:
Available=Available-Request
Allocation=Allocation+Request
need=need-Request
(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。
2.安全性检查
(1)设置两个工作向量work=Available;Finish[m]=False
(2)从进程集合中找到一个满足下述条件的进程,
Finish[i]=False
need 如找到,执行(3);否则,执行(4)
(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。
work=work+Allocation
Finish=True
goTo2
(4)如所有的进程Finish[m]=true,则表示安全;否则系统不安全。
3.数据结构
#defineFalse0
#defineTrue1
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;//作业的最大数为100
intn=100;//资源的最大数为100
voidshowdata()//显示资源矩阵
三、源代码
#include
#include
#include
#defineFalse0
#defineTrue1
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;//作业的最大数为100
intn=100;//资源的最大数为100
voidshowdata()//显示资源矩阵
{
inti,j;
cout for(i=0;i cout cout for(j=0;j cout cout cout for(j=0;j for(i=0;i cout cout }
cout for(i=0;i cout for(j=0;j cout cout for(j=0;j cout
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 银行家 算法 操作系统 实验 报告