- 238
- 0
- 约 8页
- 2016-11-29 发布于重庆
- 举报
操作系统实验项目银行家算法
实验四、银行家算法
目的和要求
银行家算法是由Dijkstra设计的最具有代表性的避免死锁的算法。本实验要求用高级语言编写一个银行家的模拟算法。通过本实验可以对预防死锁和银行家算法有更深刻的认识。
实验内容
设置数据结构
包括可利用资源向量(Availiable),最大需求矩阵(Max),分配矩阵(Allocation),需求矩阵(Need)
设计安全性算法
设置工作向量Work 表示系统可提供进程继续运行可利用资源数目,Finish 表示系统是否有足够的资源分配给进程
实验环境
pc
vc++
(四)、程序源代码:
/*子函数声明*/
int Isprocessallover(); //判断系统中的进程是否全部运行完毕
void Systemstatus(); //显示当前系统中的资源及进程情况
int Banker(int ,int *); //银行家算法
void Allow(int ,int *); //若进程申请不导致死锁,用此函数分配资源
void Forbidenseason(int ); //若发生死锁,则显示原因
/*全局变量*/
int Availiable[3]={3,3,2}; //初始状态,系统可用资源量
int Max[5][3]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};
//各进程对各资源的最大需求量
int Allocation[5][3]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};
//初始状态,各进程占有资源量
int Need[5][3]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};
//初始状态时,各进程运行完毕,还需要的资源量
int over[5]={0,0,0,0,0}; //标记对应进程是否得到所有资源并运行完毕
#include iostream.h
/*主函数*/
void main()
{
int process=0; //发出请求的进程
int decide=0; //银行家算法的返回值
int Request[3]={0,0,0}; //申请的资源量数组
int sourcenum=0; //申请的各资源量
/*判断系统中进程是否全部运行完毕*/
step1: if(Isprocessallover()==1)
{
cout系统中全部进程运行完毕!;
return;
}
/*显示系统当前状态*/
Systemstatus();
/*人机交互界面*/
step2: cout\n输入发出请求的进程(输入 “0”退出系统): ;
cinprocess;
if(process==0)
{
cout放弃申请,退出系统!;
return;
}
if(process1||process5||over[process-1]==1)
{
cout系统无此进程!\n;
goto step2;
}
cout此进程申请各资源(A,B,C)数目:\n;
for(int h=0;h3;h++)
{
coutchar(65+h)资源:;
cinsourcenum;
Request[h]=sourcenum;
}
/*用银行家算法判断是否能够进行分配*/
decide=Banker(process,Request);
if (decide==0)
{
/*将此进程申请资源分配给它*/
Allow(process,Request);
goto step1;
}
else
{
/*不能分配,显示原因*/
Forbidenseason(decide);
goto step2;
}
}
/*子函数Isprocessallover( )的实现*/
int Isproc
您可能关注的文档
最近下载
- 2024-2025学年英语人教版七年级下册全册单元训练卷答案版.docx VIP
- 山西省农村信用社(农村商业银行合作银行)个人网上银行.pdf VIP
- 新译林版高中英语选择性必修一 unit 4词汇默写本.docx VIP
- 基于ASP.NET网络订餐系统的设计与实现.doc VIP
- 2022年山东省高考数学试卷(新高考I)及答案.docx VIP
- 2025年广东英语(专升本)考试试题及答案.docx VIP
- 新译林版高中英语选择性必修一 unit 3词汇默写本.docx VIP
- 2025年南邮c语言期末考试卷及答案.doc VIP
- 民用爆炸物品爆破作业安全评估指南.pptx
- 铸牢中华民族共同体意识.pptx VIP
原创力文档

文档评论(0)