《计算机操作系统》银行家算法实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
海南大学三亚学院
《计算机操作系统》课程设计
死锁的避免——银行家算法
专业班级:
成员:
提交时间:
一、问题描述(标题:宋体四号)
内容:1、解释什么是银行家算法(宋体,小四,行间距1.5倍)银行家算法又称“资源分配拒绝”法,其基本思想是,系统中的所有进程放入进程集合,在安全状态下系统受到进程的请求后试探性的把资源分配给他,现在系统将剩下的资源和进程集合中其他进程还需要的资源数做比较,找出剩余资源能满足最大需求量的进程,从而保证进程运行完成后还回全部资源。这时系统将该进程从进程集合中将其清除。此时系统中的资源就更多了。反复执行上面的步骤,最后检查进程的集合为空时就表明本次申请可行,系统处于安全状态,可以实施本次分配,否则,只要进程集合非空,系统便处于不安全状态,本次不能分配给他。请进程等待
我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。
2、银行家算法提出的原因
在多道程序系统中,虽可借助于多个进程的并发执行,来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险━━死锁。所谓死锁(Deadlock),是指多个进程在运行中因争夺资源而造成的一种僵局(Deadly_Embrace),当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁,这一组进程就称为死锁进程。
二、实验目的
1、掌握死锁概念、死锁发生的原因、死锁产生的必要条件
2、掌握死锁的预防、死锁的避免
3、深刻理解死锁的避免:安全状态和银行家算法
三、问题分析
1、什么是死锁?死锁如何产生?
所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力的作用,它们都将无法再向前推进。
死锁产生的原因:
(1)竞争资源
(2)进程间推进顺序非法
产生死锁的必要条件:互斥条件,请求和保持条件不剥夺条件,环路等待条件。
只要下面四个条件中有一个不具备,系统就不会出现死锁。
①互斥条件:即某个资源在一段时间内只能由一个进程占有,不
能同时被两个或两个以上的进程占有。
②不可抢占条件:进程所获得的资源在未使用完毕之前,资源申
请者不能强行地从资源占有者手中夺取资源,而只能由该资源的占有者进程自行释放。
③占有且申请条件:进程至少已经占有一个资源,但又申请新的
资源;由于该资源已被另外进程占有,此时该进程阻塞;但是,它在等待新资源之时,仍继续占用已占有的资源。
④循环等待条件:存在一个进程等待序列{P1,P2,…,Pn},其中
P1等待P2所占有的某一资源,P2等待P3所占有的某一资源,……,而Pn等待P1所占有的某一资源,形成一个进程循环等待环。
2、死锁对多道程序系统带来的影响?
在多道程序系统中,虽可借助于多个进程的并发执行,来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险━━死锁。所谓死锁(Deadlock),是指多个进程在运行中因争夺资源而造成的一种僵局(Deadly_Embrace),当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。一组进程中,每个进程都
无限等待被该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁,这一组进程就称为死锁进程。
3、如何预防死锁?
摒弃“请求和保持”条件,摒弃“不剥夺”条件,摒弃“环路等待”条件
4、死锁的预防:什么是安全态?如何保证多个进程在某个时刻是处
于安全态的?
所谓安全态是指系统能按某种进程顺序(P1,P2,…,Pn)(称(P1,P2,…,Pn)序列为安全序列)来为每个进程Pi分
配其所需资源,直至满足每个进程对资源的最大需求,使每个
进程都顺利的完成。
四、设计方案
1、数据结构的建立
1).可利用资源向量AVAILABLE。这是一个含有M个元素的数组,其中的每一个元素代表一类可利用的资源数目,其3初始值是系统中所配置的该类全部可哦那个资源的数目,其数值随该类资源的分配和回收而动态的改变。
2).最大需求矩阵MAX。这是一个M*N的矩阵,它定义了系统中N
个进程中的每一个进程对M类资源的最大需求。
3).分配矩阵ALLOCATION。这也是一个M*N的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。
4).需求矩阵NEED。这也是一个M*N的矩阵,用以表示每一个进程
尚需的各类资源数。
5).NEED[R,W]=MAX[R,W]-ALLOCATION[R,W]
数据结构详细介绍如下:
假设有M个进程N类资源,则有如下数据结构:
#define W 10
#define R 20
int A;//总进程数
int B;//资源种类
int ALL_RESOURCE[W]; //各种资源的数目总和
int MAX[W]; //M个进程对N类资源最大资源需求量
int AVAILABLE ; //系统可用资源数
int ALLOCATION[W] ; //M个进程已经得到N类资源的资源量int NEED[W] ; //M个进程还需要N类资源的资源量
int Request ; //请求资源个数
主要函数说明
void showdata();//主要用来输出资源分配情况
void changdata(int); //主要用来输出资源分配后后的情况
void rstordata(int); //用来恢复资源分配情况,如:银行家算法时,由于分配不安全则要恢复资源分配情况
int chkerr(int); //银行家分配算法的安全检查
void bank();//银行家算
2、算法的设计