文档介绍:计算机操作系统实验报告
一、 实验名称: 银行家算法
二、 实验目的: 银行家算法是避免死锁的一种重要方法,通过编写 一个简单的银行家算法程序,加深了解有关资源申请、避免死 锁等概念,并体会和了解死锁和避免死锁的具体实施方法。
三、 问题分析与设计:
1、算法思路 :先对用户提出的请求进行合法性检查,即检查 请求是否大于需要的,是否大于可利用的。若请求合法,则进 行预分配,对分配后的状态调用安全性算法进行检查。若安 全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒 绝申请。
2、银行家算法步骤:(1)如果Requestk or二Need则转向步
骤(2);否则,认为出错,因为它所需要的资源数已超过它所
宣布的最大值。
如果Request or二Available,则转向步骤(3);否则,表
示系统中尚无足够的资源,进程必须等待。
系统试探把要求的资源分配给进程 Pi,并修改下面数据结
构中的数值:
Available=Available-Request[i];
Allocation=Allocation+Request;
Need=Need-Request;
(4)系统执行安全性算法,检查此次资源分配后,系统是否处于 安全状态。
3、安全性算法步骤:
(1)设置两个向量
①工作向量 Work 。它表示系统可提供进程继续运行所需要的各类资 源数目,执行安全算法开始时, Work=Allocation;
②布尔向量Finish。它表示系统是否有足够的资源分配给进程,使 之运行完成,开始时先做 Finish[i]=false ,当有足够资源分配给进程 时,令 Finish[i]=true 。
(2) 从进程集合中找到一个能满足下述条件的进程:
Finish[i]=false
Need<or=Work
如找到,执行步骤( 3);否则,执行步骤( 4)。
(3) 当进程 P 获得资源后,可顺利执行,直至完成,并释放出分配
给它的资源,故应执行:
Work=Work+Allocation;
Finish[i]=true;
转向步骤( 2)。
( 4)如果所有进程的 Finish[i]=true, 则表示系统处于安全状态;否 则,系统处于不安全状态。
4、流程图:
系统主要过程流程图
银行家算法流程图
安全性算法流程图
四、实验代码:
〃#defi ne M 5
〃#defi ne N 3
本实验中使用到的库函数
开始定义银行家算法中需要用到的数据
#i nclude <> II
#i nclude <>
#in elude <stri >
int max [ 5][1]; //
int allocation[5][1];
int need [ 5][1];
int available[1];
int request[5][1];
char *fini sh[5];
int safe[5];
int n,i,m;
int k=0;
int j=0;
int work[1];
int works[5][1];
void line() // 美化程序,使程序运行时更加明朗美观
{
\n");
printf("
void start()
//
表示银行家算法开始
line();
printf("
银行家算法开始 \n");
printf("
死锁避免方法
\n");
line();
void end()
//
表示银行家算法结束
line();
printf("
银行家算法结束,谢谢使用 \n");
line();
void input()
//
输入银行家算法起始各项数据
for (n=0;n<5;n++)
printf(” 请输入进程P%d的相关信息:\n",n);
printf("Max:");
for (m=0;m<1;m++)
scanf("%d",&max[n][m]);
printf("Allocation:");
for (m=0;m<1;m++)
scanf("%d",&allocation[n][m])