文档介绍:1. 题目分析
设计目的
理解死锁产生的原因和必要条件
了解避免死锁的几种基本方法
掌握银行家算法及安全性算法
设计内容
设计内容包括银行家算法和安全性算法,以及用VC界面实现输出
相关知识概述
银行家算法是一种最有代表性的避免死锁的算法。
要解释银行家算法,必须先解释操作系统安全状态和不安全状态。
安全状态:如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。
不安全状态:不存在一个安全序列。不安全状态一定导致死锁。
安全序列:一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。
2. 概要设计
static int MAX[5][3]; //最大需求矩阵
static int AVAILABLE[3]; //可利用资源矩阵
static int ALLOCATION[5][3]; //分配矩阵
static int NEED[5][3]; //需求矩阵
因为数组成员MAX,AVAILABLE, ALLOCATION, NEED的值每次调用一次银行家算法,如果分配成功,都会改变,所以将他们设定为静态成员变量。
int Request[3]; //请求向量
int Work[3]; //工作向量
bool FINISH[5];//标记系统是否有足够的资源分配给进程
流程图
(1)银行家算法流程图
单击“执行银行家算法”按钮时会调用OnButton1()函数,相当于银行家算法
OnButton1()开始
初始化请求数组Request[i]
Request[i]<=NEED[ip][i]
False
true
Request[i]>AVAILABLE[i]
输出相应的错误信息
False
true
系统先尝试性地分配资源
AVAILABLE[i]-=Request[i];
ALLOCATION[ip][i]+=Request[i];
NEED[ip][i]-=Request[i];
Safe()
True
false
分配请求被拒绝
系统处于不安全状态,恢复资源分配
AVAILABLE[i]+=Request[i];
ALLOCATION[ip][i]-=Request[i];
NEED[ip][i]+=Request[i];
系统处于安全状态,系统同意分配请求
OnButton1()结束
注:只要不按“退出”按钮退出程序,数组MAX,AVAILABLE, ALLOCATION, NEED中会保留上一次执行完后变化的值,不停的单击“进行银行家算法”按钮,程序会在上一次执行完后的基础上反复的执行银行家算法。
(2)安全性算法流程图
Safe() 开始
Work=AVAILABLE
FINISH=false
NEED[i]<=Work&&FINISH[i]=false
true
Work[k]+=ALLOCATION[i][k] FINISH[i]=true;;
false
所有进程的FINISH[i]=tr