银行家算法防止死锁-银行家算法
课程名称:操作系统
课程类型:必修 实验项目名称:银行家算法
实验题目:采用银行家算法防止死锁 班级:实验学院一班
设计成绩 报告成绩 指导老师
一、实验题目
设计一个 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