计算机与信息工程系 《 计算机系统与系统软件》 课程设计报告 题 目:模拟实现银行家算法实现死锁避免 专 业: 信息管理与信息系统 班 级: 信管 082 班 学 号: 姓 名: 指导老师: 2010 年 9 月 9 日 一、实验题目 模拟实现银行家算法实现死锁避免 二、目的: 1、了解进程产生死锁的原因,了解为什么要进行死锁的避免。 2、掌握银行家算法的数据结构,了解算法的执行过程,加深对银行家算法的理解。 三、内容: 模拟实现银行家算法实现死锁避免。要求:初始数据(如系统在 T0 时刻的资源分配情况、每一种资源的总数量)从文本文件读入,文件中给出最大需求矩阵 Max 、分配矩阵Allocation,在程序中求得需求矩阵 Need 和可利用资源向量 Av ailable。 四、实验提示: 1、整个银行家算法的思路。 先对用户提出的请求进行合法性检查,再进行预分配,利用安全性检查算法进行安全性检查。 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)、系统调用安全性检查算法(safe()函数)进行检查,如果检查通过,则不用回收,否则进行回收,进程资源申请失败进入等待。 4、安全性检查算法(safe()子 函数) (1)、设 置 两 个临 时变 量。 FI...