- 1
- 0
- 约1.6千字
- 约 7页
- 2019-01-02 发布于福建
- 举报
银行家歌算法模拟实验
实验二
课程名称:操作系统
课程类型:必修
实验项目名称:银行家算法
实验题目:采用银行家算法避免死锁
一、实验目的
通过本次实验,使学生掌握死锁的概念和产生死锁的原因和必要条件, 预防和避免死锁的方法,死锁的检测与解除。通过本次实验,使学生加深了对死锁概念的理解和掌握,深刻领会银行家算法的实质及实现过程。
二、实验要求及实验环境
设计一个能动态检查n个资源、m个进程的系统是否安全并且能实施动态分配的程序。(具体个数可由键盘输入)。每一个进程可动态、随机提出申请各个资源的数量,如果系统能满足并且分配后系统仍处于安全状态,那么写出一个安全序列,表明系统是安全的;若系统不安全,那么不分配资源。
三、设计思想
开始1.程序流程图
开始
对系统进行初始化
对系统进行初始化init()
输出
输出“选择1--用银行家算法;选择0--退出”
输入一个值i
输入一个值i
i=
i==1
是
是
调用银行家算法
调用银行家算法allo()来咯()
结束
结束
图1-1主程序的流程图
图1-1主程序的流程图
开始
开始
输入系统的资源种类的个数
输入系统的资源种类的个数n
输入
输入各个资源类拥有的最大数量
输入
输入进程个数m
输入
输入各个进程对各类资源的最大数量
结束
结束
图1-
图1-2初始化算法init()的流程图
开始
开始
输入准备申请资源的进程序号
输入准备申请资源的进程序号
输入准备申请资源的进程序号i
输入准备申请资源的进程序号i
输入进程i提出的对各个资源的需求
输入进程i提出的对各个资源的需求
调用银行家—
调用银行家—模拟资源分配算法require()
结束
结束
图1-
图1-3银行家算法allo()的流程图
开始
开始
结束Available=Available+Request[i]Allocation[i]=Allocation[i]-Request[i]Need[i]=Need[i]+Request[i]
结束
Available=Available+Request[i]
Allocation[i]=Allocation[i]-Request[i]
Need[i]=Need[i]+Request[i]
pi等待
请求超量,
错误返回
Request[i]?Need[i]?
Request[i]?Available?
不满足,等待
Available=Available-Request[i]
Allocation[i]=Allocation[i]+Request[i]
Need[i]=Need[i]-Request[i]
调用安全算法safe( )?
确认,pi继续
F
T
F
T
T
F
图1-4
图1-4模拟资源分配算法require()的流程图
开始
开始
Work=Available;
Work=Available;
Finish=false;
F
F
有满足条件的j:
Finish[j]==0
Need[j]?Work
Finish[j]=1;
Work=Work+Allocation[j]
T
所有的finish[j]==1?
T
F
安全
不安全
结束
图1-5安全算法()的流程图
2.逻辑设计
用结构体数组表示m个进程,其中包括使用数组形式的线性表表示进程对各个资源需要的总资源数、对各个资源已占用的资源数,还需要的资源数。
3、物理设计
全局变量
int n,m;
struct info//进程信息
{
int claim[50];//最大占用资源数
int allocation[50];//已经占有的资源数
int need[50]; //还需要的资源数
}pro[50];
int available[50];//剩余资源数
int request[50];//需求资源数量
原创力文档

文档评论(0)