操作系统实验报告
课题:银行家算法
专
业:
班
级:
学
号:
姓
名:
年 月 日
目
录
一 实验目的 ……………………………………………………错误!
未定义书签。
二 实验内容 ………………………………………………………3
三 问题描述 ……………………………………………………3
四 设计思路 ………………………………………………………4
五 详细设计 ……………………………………………………5
六 运行结果 …………………………………………………10
七 心得体会 ……………………………………………………16
八 参考文献 ………………………………………………………17
附 源程序
………………………………………………………17
一、 实验目的
模拟实现银行家算法,用银行家算法实现资源分配。
1.加深了解有关资源申请、避免死锁等概念。
2.体会和了解死锁和避免死锁的具体实施方法。
3、输入:
4、输出:
1.系统中各类资源表
2.每个进程需要各类资源总数 系统分配给各个进程各类资源数
1.判断 T0 时刻的安全性 2.如果系统是安全的,任意给出某个进程的一
个资源请求方式并判断系统能否接受此请求,如果可以接受,其输出全
部安全序列,反之,不予分配。
二、实验内容
1.设计进程对各类资源最大申请表示及初值的确定。
2.设定系统提供资源的初始状况。
3.设定每次某个进程对各类资源的申请表示。
4.编制程序,依据银行家算法,决定其资源申请是否得到满足。
5.显示资源申请和分配时的变化情况。
三、 问题描述
银行家算法.顾名思义是来源于银行的借贷业务,一定数量的本金要应多
个客户的借贷周转,为了防止银行加资金无法周转而倒闭,对每一笔贷款,必须
考察其是否能限期归还。在操作系统中研究资源分配策略时也有类似问题,系统
中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内
归还资源,以供其他进程使用资源。如果资源分配不得到就会发生进程循环等待
资源,则进程都无法继续执行下去的死锁现象。
在死锁的避免中,银行家算法把系统状态分为安全状态和不安全状态,只要
能使系统始终处于安全状态,便可以避免发生死锁。所谓安全状态,是指系统能
按某种顺序为每个进程分配所需资源,直到最大需求,使每一个进程都可以顺利
完成,即可找到一个安全资源分配序列。模拟实现这个工作过程。
四、设计思路
我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家
管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操
作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,
要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最
大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中
继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和
是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有
超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满
足则按当前的申请量分配资源,否则也要推迟分配。
银行家算法是一种最具代表性的避免死锁的算法。要解释银行家算法,
必须先解释操作系统的安全状态和不安全状态。安全状态:如果存在一个由系统
中所有进程构成的安全序列 P1,…,Pn,则系统处于安全状态。安全状态一定没
有死锁发生。
不安全状态:不存在一个安全序列。不安全状态不一定导致死锁。
安全序列:一个进程序列{P1,…,Pn}是安全的,如果对于每个进程 Pi
(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、整体流程图
开始
初始化
录入请求资源
REQUEST[i]>NEED[i]或者
REQUEST[i]>AVAILABLE[i]
NO
AVAILABLE[i]-=REQUEST [i];
ALLOCATION[i]+=REQUEST [i];
NEED[i]-=REQUEST[i];
安全性检查
安全
YE
S
保持原分配
进程执行完
释放资源
继续分配
NO
结束
YES
YES
报错,重新输
入
NO
AVAILABLE[i]+=REQUEST [i];
ALLOCATION[i]-=REQUEST [i];
NEED[i]+=REQUEST[i];
NO
YES