[操作系统] 银行家算法操作系统实验报告 实验目标 1. 理解银行家算法。 2. 掌握进程安全性检查的方法及资源分配的方法。 3. 加深了解有关资源申请、避免死锁等概念。 4. 体会和了解死锁和避免死锁的具体实施方法。 实验要求 编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和避免死锁的发生。 设计思路 1.银行家算法 在避免死锁的方法中,如果施加的限制条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。 基本思想为:在分配资源之前,判断系统是否是安全的;若安全,才分配。它是最具代表性的死锁算法,具体算法如下表示: 假设进程P 提出请求 Request[i],则银行家算法按如下步骤进行判断: 1) 如果 Request[i] <=Need[i],则转向2);否则出错。 2) 如果 Request[i] <=Available[i],则转向3);否则出错。 3) 系统试探分配相关资源,修改相关数据: Available[i]=Available[i]-Request[i]; Allocation[i]=Allocation[i]+Request[i]; Need[i]=Need[i]-Request[i]; 4) 系统执行安全性检查,如安全,则分配成立;否则试探性分配资源作废,系统恢复原状,进程进入 等待 状态。 根 据以上 银行家算法步骤,可得出如下图 所 示流 程图 : 2 .安全性检查算法 安全性检查算法主要是根据银行家算法进行资源分配后,检查资源分配后的系统状态是否处于安全状态之中。具体算法如下所示: 1) 设置两个工作向量 Work=Available,Finish=false; 2) 从进程集合中找到一个满足下述条件的进程; Finish=false; Need<=w ork; 如果能够找到该进程,则执行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 Req...