操作系统实验报告
课题:银行家算法
专业:
班级:
学号:
姓名:
年月日
目录
一实验目的 „„„„„„„„„„„„„„„„„„„„错误~未定义
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
签。
二实验内容„„„„„„„„„„„„„„„„„„„„„3
三问题描述 „„„„„„„„„„„„„„„„„„„„3
四设计思路 „„„„„„„„„„„„„„„„„„„„„4
五详细设计 „„„„„„„„„„„„„„„„„„„„5
六运行结果 „„„„„„„„„„„„„„„„„„„10
七
心得体会
决胜全面小康心得体会学党史心得下载党史学习心得下载军训心得免费下载党史学习心得下载
„„„„„„„„„„„„„„„„„„„„16
八参考文献„„„„„„„„„„„„„„„„„„„„„17
附源程序„„„„„„„„„„„„„„„„„„„„„17
一、实验目的
模拟实现银行家算法,用银行家算法实现资源分配。
1(加深了解有关资源申请、避免死锁等概念。
2(体会和了解死锁和避免死锁的具体实施方法。
3、输入:
1.系统中各类资源表
2.每个进程需要各类资源总数系统分配给各个进程各类资源数
4、输出:
1.判断T0时刻的安全性2.如果系统是安全的,任意给出某个进程的一
个资源请求方式并判断系统能否接受此请求,如果可以接受,其输出全
部安全序列,反之,不予分配。
二、实验内容
1(设计进程对各类资源最大
申请表
食品经营许可证新办申请表下载调动申请表下载出差申请表下载就业申请表下载数据下载申请表
示及初值的确定。
2(设定系统提供资源的初始状况。
3(设定每次某个进程对各类资源的申请表示。
4(编制程序,依据银行家算法,决定其资源申请是否得到满足。
5(显示资源申请和分配时的变化情况。
三、问题描述
银行家算法.顾名思义是来源于银行的借贷业务,一定数量的本金要应多个客户的借贷周转,为了防止银行加资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。
在死锁的避免中,银行家算法把系统状态分为安全状态和不安全状态,只要能使系统始终处于安全状态,便可以避免发生死锁。所谓安全状态,是指系统能按某种顺序为每个进程分配所需资源,直到最大需求,使每一个进程都可以顺利完成,即可找到一个安全资源分配序列。模拟实现这个工作过程。
四、设计思路
我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。
银行家算法是一种最具代表性的避免死锁的算法。要解释银行家算法,必须先解释操作系统的安全状态和不安全状态。安全状态:如果存在一个由系统中所有进程构成的安全序列P,„,P,则系统处于安全状态。安全状态一定没1n
有死锁发生。
不安全状态:不存在一个安全序列。不安全状态不一定导致死锁。
安全序列:一个进程序列{P,„,P}是安全的,如果对于每个进程Pi1n
(0?i?n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj(j,i)当前占有资源量之和。
先对系统从源文件中读取的数据进行安全性判断,然后对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,不大于系统可利用的资源。若请求合法,则进行试分配,最后对试分配状态调用安全性算法进行安全性检查。若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。
五、详细设计
1、初始化
由用户输入数据,分别对可利用资源向量矩阵AVAILABLE、最大需求矩
阵MAX、分配矩阵ALLOCATION、需求矩阵NEED赋值。
2、银行家算法
在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。
设进程cusneed提出请求REQUEST [i],则银行家算法按如下规则进行判断。
(1)如果REQUEST [cusneed] [i]<= NEED[cusneed][i],则转(2);否则,
出错。
(2)如果REQUEST [cusneed] [i]<= AVAILABLE[cusneed][i],则转(3);否
则,出错。
(3)系统试探分配资源,修改相关数据:
AVAILABLE[i]-=REQUEST[cusneed][i];
ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];
NEED[cusneed][i]-=REQUEST[cusneed][i];
(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,
系统恢复原状,进程等待。
(5)对于某一进程i,若对所有的j,有NEED[i][j]=0,则表此进程资源分配完毕,应将占用资源释放。
3、安全性检查算法
(1)设置两个工作向量Work=AVAILABLE;FINISH (2)从进程集合中找到一个满足下述条件的进程,
FINISH==false;
NEED<=Work;
如找到,执行(3);否则,执行(4)
(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。
Work+=ALLOCATION;
Finish=true;
GOTO 2
(4)如所有的进程Finish= true,则表示安全;否则系统不安全。
4、流程图
1、整体流程图
开始
初始化
录入请求资源
数
YES
REQUEST[i]>NEED[i]或者 报错,重新输
REQUEST[i]>AVAILABLE[i] 入
NO
AVAILABLE[i]-=REQUEST [i];
ALLOCATION[i]+=REQUEST [i];
NEED[i]-=REQUEST[i];
安全性检查
AVAILABLE[i]+=REQUEST [i]; NO ALLOCATION[i]-=REQUEST [i]; 安全 NEED[i]+=REQUEST[i];
YE
S 保持原分配
进程执行
NO 完
YES
释放资源
YES
继续分配
NO
结束
2、判断系统的安全性Safe()
Safe()开始
初始化i,j,t,tempn
Fihish[i]=false
Tempn==0?
F
i
=Need[i][0]) && (Work[1]>=Need[i][1]) && (Work[2]>=Need[i][2])
Ftp==1?i++
Y
Finish[i]=true;
Work[j]+=Allocation[i][j];
Tempn--
i=0
i
#include
#include
#define M 10 //最大进程数
#define N 3 //系统所拥有的资源类型
int Max[M][N];//进程对各类资源的最大需求
int Allocation[M][N];//系统已为进程所分配的各类资源数
int Need[M][N];//运行进程尚需的各类资源数
int Work[N];//运行进程时系统所拥有的资源数
bool finish[M];//表示系统是否有足够的资源分配给进程
int Available[N];//系统可利用的资源数
int n_pro=0;//进程的数目
int flag[M]={-1};//用于标记安全序列
int Readfile();//从磁盘读文件
int Safe1(int flag[],int n,int t);//输出所有安全状态
void show();
int Safe();//判断系统是否处于安全状态
int Request();//请求资源分配函数
void show()
{
printf(" \t%-9s\t%-9s\t%-9s\n","MAX","Allocation","Need");
printf(" \tA B C\tA B C\tA B C\n");
for(int i=0;i
规定
关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定
的
格式
pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载
提取线程等信息
for(j=0;j> Available[j];
inFile.get();
printf("系统最大资源数:\n");
printf(" \tA\tB\tC\n");
printf("\t%d\t%d\t%d\n",Available[0],Available[1],Available[2]);
inFile >> n_pro;
inFile.get();
printf("当前进程的数目:%d\n",n_pro);
while(i> Max[i][j];
for(j=0;j> Allocation[i][j];
for(j=0;j=Need[i][0]) && (Work[1]>=Need[i][1]) &&
(Work[2]>=Need[i][2]);
if(tp)
{
finish[i]=true;
for(int j=0;j=Need[i][0]) && (Work[1]>=Need[i][1]) &&
(Work[2]>=Need[i][2]);
if(tp)
{
for(j=0;j
本文档为【银行家算法实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。