《 银行家算法的模拟实现》 --实验报告 题 目: 银行家算法的模拟实现 专 业: 班 级: 组 员: 指导老师: 一、实验目的 死锁会引起计算机工作僵死,因此操作系统中必须防止。本实验的目的在于让学生独立的使用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生,以加深对课堂上所讲授的知识的理解。 二、实验内容 模拟实现银行家算法实现死锁避免。要求:初始数据(如系统在T0 时刻的资源分配情况、每一种资源的总数量)从文本文件读入,文件中给出最大需求矩阵 Max 、分配矩阵Allocation,在程序中求得需求矩阵 Need 和可利用资源向量 Av ailable。 三、实验分析过程 1、整个银行家算法的思路。 先对用户提出的请求进行合法性检查,再进行预分配,利用安全性检查算法进行安全性检查。 1)进程一开始向系统提出最大需求量. 2)进程每次提出新的需求(分期贷款)都统计是否超出它事先提出的最大需求量. 3)若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的 剩余资源量,若不超出,则分配,否则等待 2、算法用到的主要数据结构和C 语言说明。 (1)、可利用资源向量 INT AVAILABLE[M] M 为资源的类型。 (2)、最大需求矩阵 INT MAX[N][M] N 为进程的数量。 (3)、已分配矩阵 INT ALLOCATION[N][M] (4)、还需求矩阵 INT NEED[N][N] (5)、申请各类资源数量 int Requ est[x ]; // (6)、工作向量 int Work[x ]; (7)、int Finish[y ]; //表示系统是否有足够的资源分配给进程,0 为否,非 0 为是 3、银行家算法 (主程序) (1)、系统初始化。输入进程数量,资源种类,各进程已分配、还需求各资源数量,各资源可用数量等 (2)、输入用户的请求三元组(I,J,K),为进程I 申请 K 个J 类资源。 (3)、检查用户的请求是否小于还需求的数量,条件是 K<=NEED[I,J]。如果条件不符则提示重新输入,即不允许索取大于需求量 (4)、检查用户的请求是否小于系统中的可利用资源数量,条件是 K<=AVALIABLE[I,J]。如果条件不符则申请失败,阻塞该进程,重新进行进程动态资源申请(使用goto 语句) (5)、进行资源的预分配,语句如下: AVALIBLE[I][J]= AVALIBLE[I][J]-K; ALLOCATION[I][J]= ALLOCATION[I][J]+K; NEED[I][J]=NEED[I][J]-K; (6)、系统调用安全性检查算法(ch...