没有合适的资源?快使用搜索试试~ 我知道了~
操作系统实验三-银行家算法.docx
资源推荐
资源详情
资源评论
操作系统实验三-银行家算法
广 东 海 洋 大 学 学 生 实 验 报 告 书 ( 学 生 用 表 )
实验名称
实验三 死锁的避免(银行家算法)
课程名称
计算机操作系统
课程号
学院(系)
专业
班级
学生姓名
学号
实验地点
实验日期
实验三 死锁的避免――银行家算法
一、 实验目的
1.掌握死锁产生的原因。
2.掌握银行家算法。
3.能使用高级语言模拟实现银行家算法。
二、 相关知识介绍
参与死锁的进程最少是两个。
参与死锁的进程至少有两个已经占有资源。
参与死锁的所有进程都在等待资源。
参与死锁的进程是当前系统中所有进程的子集。
三、 相关数据结构
1.可利用资源向量 Available ,它是一个含有 m 个元素的数组,其中的每一个元素代表一类可利用的
资源的数目,其初始值是系统中所配置的该类全部可用资源数目。其数值随该类资源的分配和回收
而动态地改变。如果 Available[j]=k,标是系统中现有 j 类资源 k 个。
2.最大需求矩阵 Max,这是一个 n×m 的矩阵,它定义了系统中 n 个进程中的每一个进程对 m 类资源
的最大需求。如果 Max[i][j]=k,表示进程 i 需要 j 类资源的最大数目为 k。
3.分配矩阵 Allocation,这是一个 n×m 的矩阵,它定义了系统中的每类资源当前分配到每一个进程的
资源数。如果 Allocation[i][j]=k,表示进程 i 当前已经分到 j 类资源的数目为 k 个。Allocation[i]表示
进程 i 的分配向量。
4.需求矩阵 Need,这是一个 n×m 的矩阵,用以表示每个进程还需要的各类资源的数目。如果
Need[i][j]=k,表示进程 i 还需要 j 类资源 k 个,才能完成其任务。Need[i]表示进程 i 的需求向量。
上述三个矩阵间存在关系:Need[i][j]=Max[i][j]-Allocation[i][j];
操作系统实验三-银行家算法
四、 银行家算法
Request 是进程 i 的请求向量。Request[j]=k 表示进程 i 请求分配 j 类资源 k 个。当进程 i 发出资源请求后,
系统按下述步骤进行检查:
1.如果 Request ≤Need[i],则转向步骤 2;否则,认为出错,因为它所请求的资源数已超过它当前的最
大需求量。
2.如果 Request ≤Available,则转向步骤 3;否则,表示系统中尚无足够的资源满足进程 i 的申请,进
程 i 必须等待。
3.系统试探性地把资源分配给进程 i,并修改下面数据结构中的数值:
Available = Available - Request
Allocation[i]= Allocation[i]+ Request
Need[i]= Need[i]
- Request
4.系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。如果安全才正式将资源分配
给进程 i,以完成本次分配;否则,将试探分配作废,恢复原来的资源分配状态,让进程 i 等待。
五、 安全性算法
1.设置两个向量。
Work:它表示系统可提供给进程继续运行的各类资源数目,它包含 m 个元素,开始执行安全性算法
时,Work = Available。
Finish:它表示系统是否有足够的资源分配给进程,使之运行完成,开始 Finish[i]=false;当有足够资
源分配给进程 i 时,令 Finish[i]=true;
2.从进程集合中找到一个能满足下述条件的进程。
Finish[i]= = false;
Need[i]≤work;
如找到则执行步骤 3;否则,执行步骤 4;
3.当进程 i 获得资源后,可顺利执行直到完成,并释放出分配给它的资源,故应执行
Work = work + Allocation[i]
Finish[i]=true;转向步骤 2;
4.若所有进程的 Finish[i]都为 true,则表示系统处于安全状态;否则,系统处于不安全状态。
六、 实验内容
设计有 n 个进程共享 m 个系统资源的系统,进程可动态的申请和释放资源,系统按各进程的申请动
态的分配资源。
系统能显示各个进程申请和释放资源,以及系统动态分配资源的过程,便于用户观察和分析。
程序框架已经给出,要求将安全性算法补充完整。
//***********************************************************************//
//* 实验三 死锁的避免――银行家算法 *//
//* *//
//*本程序需要预先设置三个文件:Available_list.txt,Max_list.txt,Allocation_list.txt *//
//* 各文件格式如下: *//
//* Available_list.txt *//
操作系统实验三-银行家算法
//* 3 //表示共有 3 类资源 *//
//* 10 5 7 //表示各类资源的初始可用个数,即 Available[0]=10, Available[1]=5 *//
//* *//
//* *//
//* Max_list.txt *//
//* 5 //表示共有 5 个进程 *//
//* 7 5 3 //表示各个进程需要各类资源的最大数目,即 Max[0][0]=7, Max[0][1]=5*//
//* 3 2 2 *//
//* 9 0 2 *//
//* 2 2 2 *//
//* 4 3 3 *//
//* *//
//* *//
//* Allocation_list.txt *//
//* 0 1 0 //表示各个进程已分配各类资源的数目 *//
//* 2 0 0 *//
//* 3 0 2 *//
//* 2 1 1 *//
//* 0 0 2 *//
//* *//
//* *//
//*************************************************************************//
#include <iostream.h>
#include <stdio.h>
#include <windows.h>
#define MAX_PROCESS 32 //最大进程数
#define MAX_RESOURCE 64 //最大资源类别
int PROCESS_NUM; //实际总进程数
int RESOURCE_NUM; //实际资源类别数
int Available[MAX_RESOURCE]; //可利用资源向量
int Max[MAX_PROCESS][MAX_RESOURCE]; //最大需求矩阵
int Allocation[MAX_PROCESS][MAX_RESOURCE]; //分配矩阵
int Need[MAX_PROCESS][MAX_RESOURCE]; //需求矩阵
int Request_PROCESS; //发出请求的进程
int Request_RESOURCE_NEMBER[MAX_RESOURCE]; //请求资源数
void Read_Available_list(); //读入可用资源 Available
void Read_Max_list(); //读入最大需求矩阵 Max
void Read_Allocation_list(); //读入已分配矩阵 Allocation
void PrintInfo(); //打印各数据结构信息
void Read_Request(); //输入请求向量
操作系统实验三-银行家算法
void Allocate_Source(); //开始正式分配资源(修改 Allocation_list.txt)
void Recover_TryAllocate(); //恢复试分配前状态
int Test_Safty(); //安全性检测
void RunBanker(); //执行银行家算法
//读入可用资源 Available
void Read_Available_list()
{
FILE *fp;
if((fp=fopen("Available_list.txt","r"))==NULL)
{
cout<<"错误,文件打不开,请检查文件名"<<endl;
exit(0);
}
fscanf(fp,"%d",&RESOURCE_NUM);
int i=0;
while(!feof(fp))
{
fscanf(fp,"%d",&Available[i]);
i++;
}
fclose(fp);
}
//读入最大需求矩阵 Max
void Read_Max_list()
{
FILE *fp;
if((fp=fopen("Max_list.txt","r"))==NULL)
{
cout<<"错误,文件打不开,请检查文件名"<<endl;
exit(0);
}
fscanf(fp,"%d",&PROCESS_NUM);
for(int i=0;i<PROCESS_NUM;i++)
for(int j=0;j<RESOURCE_NUM;j++)
fscanf(fp,"%d",&Max[i][j]);
fclose(fp);
}
//读入已分配矩阵 Allocation
void Read_Allocation_list()
{
FILE *fp;
剩余16页未读,继续阅读
资源评论
是空空呀
- 粉丝: 168
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功