银行家算法的模拟实现—实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《银行家算法的模拟实现》 --实验报告
题目: 银行家算法的模拟实现
专业:
班级:
组员:
指导老师:
一、实验目的
死锁会引起计算机工作僵死,因此操作系统中必须防止。本实验的目的在于让学生独立的使用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生,以加深对课堂上所讲授的知识的理解。
二、实验内容
模拟实现银行家算法实现死锁避免。要求:初始数据(如系统在T0时刻的资源分配情况、每一种资源的总数量)从文本文件读入,文件中给出最大需求矩阵Max、分配矩阵Allocation,在程序中求得需求矩阵Need和可利用资源向量Available。
三、实验分析过程
1、整个银行家算法的思路。
先对用户提出的请求进行合法性检查,再进行预分配,利用安全性检查算法进行安全性检查。
1)进程一开始向系统提出最大需求量.?
2)进程每次提出新的需求(分期贷款)都统计是否超出它事先提出的最大需求量.?
3)若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的?
剩余资源量,若不超出,则分配,否则等待
2、算法用到的主要数据结构和C语言说明。
(1)、可利用资源向量 INT AVAILABLE[M] M为资源的类型。
(2)、最大需求矩阵 INT MAX[N][M] N为进程的数量。
(3)、已分配矩阵 INT ALLOCATION[N][M]
(4)、还需求矩阵 INT NEED[N][N]
(5)、申请各类资源数量int Request[x]; ."< cout<<"|-------|------------|-----------|----------|-----------|"< cout<<"|-------|最大需求矩阵|已分配矩阵-|-需求矩阵-|可利用资源-|"< cout<<"| 资源 | Max | Allocation| Need | available |"< cout<<"| | A B C | A B C | A B C | A B C |"< cout<<"|进程 | | | | |"< cout<<"|-------|------------|-----------|----------|-----------|"< for(i=0;i<5;i++) { cout<<"| p"< for(j=0;j<3;j++) { cout< cout<<" | "; for(j=0;j<3;j++) { cout<<" "< cout<<" | "; for(j=0;j<3;j++) { cout<<" "< cout<<" |"; if(i==0) { for(j=0;j<3;j++) { cout<<" "< cout<<" |"; } if(i>0) {cout<<" |"; } cout< cout<<"|-------|------------|-----------|----------|-----------|"< /*--------试分配函数-------*/ void tryfenpei(int i) { for(int f=0;f { available[f]=available[f]-request[f]; allocation[i][f]=allocation[i][f]+request[f]; need[i][f]=need[i][f]-request[f]; } } /*--------恢复数据函数-------*/ void refenpei(int i) { for(int f=0;f { available[f]=available[f]+request[f]; allocation[i][f]=allocation[i][f]-request[f]; need[i][f]=need[i][f]+request[f]; } } int com(int *p,int *q) { int i; for(i=0;i if(p[i]>q[i]) return 0; return 1; } /*--------安全检测函数---------*/ void checksafe(int s) int flag,temp[t],i,j,l,k=0; bool finish[t]; for(i=0;i finish[i]=false; for(j=0;j work[j]=available[j]; cout<<"|-------|-----------------|----------|"< cout<<"| resource |-Work+Allocation-|--Finish--|"< cout<<"| | A B C | T/F |"< cout<<"|programme | | |"< cout<<"|-------|-----------------|----------|"< for(i=0;i { l=0; for(j=0;j { if(need[i][j]>work[j]) l=1; break; } if(finish[i]==false&&l==0) { cout<<"| p"< for(j=0;j { work[j]=work[j]+allocation[i][j]; if(work[j]>9) cout<<" "< else cout<<" "< } cout<<" "; cout<<"|"; cout<<" "; finish[i]=true; cout<<"true "; cout<<"|"; temp[k]=i;."< refenpei(in); cout<<"恢复数据成功!正在打印输出..."< print(); } else