银行家算法防止死锁-银行家算法
课程名称:操作系统 
课程类型:必修 实验项目名称:银行家算法
       实验题目:采用银行家算法防止死锁                    班级:实验学院一班 
                                                 设计成绩  报告成绩  指导老师 
一、实验题目 
设计一个 n 个并发进程共享 m 个系统资源的系统。进程可动态 申请资源和释放资源,系统按各进程的申请动态的分配资源。要求采 用银行家算法防止死锁。
二、实验目的
死锁会引起计算机工作僵死,造成整个系统瘫痪。因此,死锁现 象是操作系统特别是大型系统中必须设法防止的。通过本次实验,使 学生掌握死锁的概念和产生死锁的原因和必要条件, 预防和避免死 锁的方法,死锁的检测与解除。通过本次实验,使学生加深了对死锁 概念的理解和掌握,深刻领会银行家算法的实质及实现过程。
三、设计思想(本程序中的用到的所有数据类型的定义,主
程序的流程图及各程序模块之间的调用关系) 1.程序流程图 开 始
                                                             收回假定分配给现 
          剩余资源能否满              否 
                                                             行进程的资源 
          足现行进程? 
                                                             输出信息资源不足 
是
                                   承认已假定分配给现行                如不采用死锁预防算 
         当前分配状态               是    进程的资源,输出完成信               法,将现行进程死锁 
安全吗?(safe) 息,置ADVANCE=true 位置 1
否
                                   收回假定分配给现行进                采用死锁预防算法如 
          采用死锁预防算              是 
                                   程的资源,输出失败信                已 有 进 程 死 锁 置 
              法? 
                                   息,置ADVANCE=true           ADVANCE=false 
否
承认已假定分配给现行进
程的资源,输出完成信息,
置ADVANCE=true
结 束
安全(safe)函数框图如下: 开 始
未完成进程的T 标志为 1
置 已完成进程的T 标志为0
置局部变量Change 为‘true ’
(即是否有进程标志位T 从1变0)
                   否 
                                 Change 是否为 
‘true ’
是
判定是否还存在不能 置change 为‘false’
完成的进程,若不存
在,置 SAFE 为 ‘true ’,
否则为‘false’
全部进程已经完成?即 是
                              各进程T 标志都为0 
      结 束 
否
                              剩余资源与新完成资源 
                   否 
                              之和是否超过某进程还 
需要的资源?
是
置局部变量PROGRESS 为true
改变对应的T 值
2.逻辑设计
用结构体数组表示 3 个进程,其中包括使用数组形式的线性表
表示某个进程申请资源的列表(队列),以及进程需要的总资源数338