[操作系统 ] 银行家算法操作系统实验报告
实验目标
理解银行家算法。
掌握进程安全性检查的方法及资源分配的方法。
加深了解有关资源申请、避免死锁等概念。
体会和了解死锁和避免死锁的具体实施方法。
实验要求
观察死锁产生的条件, 并采用银行家算
编写和调试一个系统动态分配资源的简单模拟程序,
法,有效的防止和避免死锁的发生 。
设计思路
1. 银行家算法
在避免死锁的方法中, 如果施加的限制条件较弱, 有可能获得令人满意的系统性能。 在该方
法中把系统的状态分为安全状态和不安全状态, 只要能使系统始终都处于安全状态, 便可以
避免发生死锁。
基本思想为:在分配资源之前,判断系统是否是安全的;若安全,才分配。它是最具代表性
的死锁算法,具体算法如下表示:
假设进程 P 提出请求 Request[i] ,则银行家算法按如下步骤进行判断:
如果 Request[i] <=Need[i] ,则转向 2) ;否则出错。
如果 Request[i] <=Available[i] ,则转向 3 ) ;否则出错。
系统试探分配相关资源,修改相关数据:
Available[i]=Available[i]-Request[i];
Allocation[i]=Allocation[i]+Request[i];
Need[i]=Need[i]-Request[i];
系统执行安全性检查, 如安全, 则分配成立; 否则试探性分配资源作废, 系统恢复原状,
进程进入等待状态。
根据以上银行家算法步骤,可得出如下图所示流程图 :
V'd h'i.'R:I ;3 S| \ i ]
安全性检查算法主要是根据银行家算法进行资源分配后, 检查资源分配后的系统状态是否处
于安全状态之中。具体算法如下所示 :
1)设置两个工作向量 Work=Available , Finish=false ;
2)从进程集合中找到一个满足下述条件的进程;
Finish=false;
Need<=work;
如果能够找到该进程,则执行 3),否则,执行4);
3)假设上述找到的进程获得资源,可顺利执行,直至完成,从而释放资源。
Work=Work+Allocation;
Finish=true;
Goto 2);
4)如果所有进程的Finish=true ,则表示该系统安全,否则系统不安全,请求被拒。
5)根据以上安全检查算法步骤,可得出如下图所示流程图 :
主要数据结构
#include <>
〃/〃〃〃/〃〃/〃/〃〃〃/〃〃/〃/〃〃〃/〃〃/〃/〃/〃〃〃/〃/〃/〃〃/〃〃/
//全局变量定义
int Available[100]; 〃
int Max[50][100]; //
int Allocation[50][100];
int Need[50][100];
int Request[50][100];
//
//
//M
可利用资源数组
最大需求矩阵
分配矩阵
需求矩阵
个进程还需要N类
操作系统银行家算法 来自淘豆网m.daumloan.com转载请标明出处.