计算机操作系统实验五二维数组实现银行家.1参考模板

上传人:m**** 文档编号:456339928 上传时间:2023-07-11 格式:DOC 页数:14 大小:122KB
返回 下载 相关 举报
计算机操作系统实验五二维数组实现银行家.1参考模板_第1页
第1页 / 共14页
计算机操作系统实验五二维数组实现银行家.1参考模板_第2页
第2页 / 共14页
计算机操作系统实验五二维数组实现银行家.1参考模板_第3页
第3页 / 共14页
计算机操作系统实验五二维数组实现银行家.1参考模板_第4页
第4页 / 共14页
计算机操作系统实验五二维数组实现银行家.1参考模板_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《计算机操作系统实验五二维数组实现银行家.1参考模板》由会员分享,可在线阅读,更多相关《计算机操作系统实验五二维数组实现银行家.1参考模板(14页珍藏版)》请在金锄头文库上搜索。

1、操作系统实验五实验报告内容 (用二维数组实现银行家算法)组长:赖建明组员:赖建明(34号) 何文成(26号) 莫善坤(9号) 李居林(13号) 黄小龙(23号) 高大旺(29号)一、 实验题目与要求:1、用二维数组实现银行家算法(避免死锁)。二、总的设计思想及:1、设计思想:避免分配资源也称作Banker(银行家)算法。Banker算法的主要思想: 若进程Pi的申请超过了其申报的最大需求数,则报错; 若进程Pi的申请超过了可用资源数,则Pi必须等待; 系统暂时为进程Pi分配其所需要的资源,修改资源分配状态; 调用安全算法检查系统当前状态,若导致不安全状态,则推迟这种分配。三、 数据结构与模块说

2、明(功能与框图): 数据结构:安全性算法:(参考课本P102页)Available:向量(一维数组),指出当前每种类型资源可用实例的总数量。Max:每个进程对每种资源类型实例的最大需求,它是 n x m 矩阵(二维数组)。Allocation:每个进程当前已分配的各种资源类型的实例数量,它是 n x m 矩阵(二维数组)。Need:每个进程还需要的剩余的资源,它是 n x m 矩阵(二维数组)need = max allocation。向量 Work :是临时的资源使用数组,它初始化为当前可用的资源数。向量 Finish: 是布尔型数组,每个进程一个单元并初始化为 false。 / 模块说明:

3、安全性算法流程图Work=Available;Finish=falsefalse;Needi=Work&Finishi=falsetrueWork+=Availablei;Finishi=true;输入错误请检查后重新输入!false所有进程的Finish=true否则true安全序列为:return ture资源分配失败!资源分配成功!功能: 银行家算法主要有两部分:资源请求部分和安全检测部分。对于资源请求部分,首先检查进程的本次请求是否超过它的最初资源要求总量;如果本资源共享进程请求有效,下一步确定系统是否可以满足进程的这次请求;如果不能满足;挂起进程,如果可以满足,调用安全检测算法。对于

4、资源请求算法如下情况:1、 如果AllocationI,*+Rquest*=NeedI,*,则转(2),否则因进程i已起出其最大需求,系统出错。2、 如果Request*=Available*,则转(3),否则进程i因没有可用资源面等待。3、 假定系统可以分配给进程i所请求的资源,并按如下方式修改状态:Allocationi,*=Allocationi,*+Request*;Available*=Avlaiable*-Request*;4、系统安全检测算法。查看此时系统状态是否安全。如果是安全的,就实际分配资源,满足进程的此次请求;否则若新状态不安全。则进程等待,对所申请的资源暂不予分配,并且

5、把资源分配状态恢复到(3)之前的情况。资源请求的主要代码如下: bool request(int pid,int *r,int n) int i;int sl4; if(compare(Needpid,r,n)=true & compare(Available,r,n) subtract(Available,r,N); add(Allocationpid,r,N); subtract(Needpid,r,N); if(safe(sl) cout安全序列为:endl; for(i=0;iM;i+) printf(p%d,sli); coutendl; return true; else add(

6、Available,r,N); subtract(Allocationpid,r,N); add(Needpid,r,N); return false; else return false; void print(int *a,int n) int i; for(i=0;in;i+) cout ai; coutendl;对于安全算法情况如下:(1) 设长度为的工作向量:Work=(w1,w2 ,wm)和长度为n的工作向量Finish=(F1,F2,Fn),并令Work*=Available*;Finishi=false;(2) 查找这样的进程i使其满足:Finishi=false;Needi,

7、*=work*(3) 令:Work*=Work*+Allocationi,*;Finishi=true;(4) 如果对于所有i,Finishi=ture则系统处于安全状态;否则系统处于不安全状态。安全检查的主要算法如下: bool safe(int *sl) int i; int count=0; /*记录finishi = true 的个数*/ int n=0; int workN; bool finishM;assign(work,Available,N);for(i=0;iM;i+) finishi=false; n=M; while(n-) for(i=0;i=M) return tr

8、ue; if(finishi=false&compare(work,Needi,N) add(work,Allocationi,N); finishi=true; slcount=i; count+; if(count=M) return true; else return false; 四、源程序#include #include #include #include#define M 4 /*进程数*/#define N 3 /*资源数*/int AvailableN = 1,1,2; /系统可用资源向量int MaxMN = 3,2,2, 6,1,3, 3,1,4, 4,2,2, ; /最

9、大需求向量int AllocationMN = 1,0,0, 5,1,1, 2,1,1, 0,0,2, ; /资源已分配向量int NeedMN = 2,2,2, 1,0,2, 1,0,3, 4,2,0, ; /需求向量/比较两个一维数组,判断 a = b ?bool compare(int *a,int *b,int n) int i=0; for(i=0;in;i+) if(aibi) return false; return true;/一维数组加法/a = a + bvoid add(int *a,int *b,int n) int i=0; for(i=0;i n;i+) ai+=b

10、i; /一维数组减法/a = a - bvoid subtract(int *a,int *b,int n) int i=0; for(i=0;in;i+) ai-=bi; /将数组b的值赋给a,n为数组的大小void assign(int *a,int *b,int n) int i=0; for(i=0;in;i+) ai=bi; /sl 记录安全序列bool safe(int *sl) int i; int count=0; /*记录finishi = true 的个数*/ int n=0; int workN; bool finishM; /work = av; assign(work

11、,Available,N); /初始化标记 finish for(i=0;iM;i+) finishi=false; /n为进程的个数/循环最多执行n次 n=M; while(n-) for(i=0;i=M) /全部进程都可安全执行(finish = true) return true; /判断能否满足进程i的要求 /work = Needi ? if(finishi=false&compare(work,Needi,N) /分配,待进程完成后再释放 add(work,Allocationi,N); finishi=true; /记录安全路径 slcount=i; /能满足的进程数+1 count+; if(count=M) return true; else return false; /请求分配/pid进程,r请求向量,n资源个数bool request(int pid,int *r,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号