实验三银行家算法实验报告及程序
银行家算法是避免死锁的一种重要方法,通过编写银行家算法,加深了解有关资源申请、避免死锁的概念,并体会和了解死锁和避免死锁的具体实施方法。
实验报告三 银行家算法
班级 学号 姓名
一、 实验目的
银行家算法是避免死锁的一种重要方法,通过编写银行家算法,加深了解有关资源申请、避免死锁的概念,并体会和了解死锁和避免死锁的具体实施方法。
二、 实验环境
普通的计算机一台,编译环境Turobc2.0
三、 算法思想 1. 数据结构
(1) 可利用资源向量Available (2) 最大需求矩阵Max (3) 分配矩阵Allocation (4) 需求矩阵Need
2. 功能介绍
实现银行家算法以避免死锁分为两个部分: 第一部分:银行家算法(扫描)
1> 如果Request<=Need,则转向2;否则,出错 2> 如果Request<=Available,则转向3,否则等待 3> 系统试探性分配请求的资源给进程 Available:=Available-Request Allocatation:=Allocation+Request Need:=Need-Request
4> 系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安全,才正式
将资源分配给进程Pi,以完成本次分配;否则,将本次的试探性分配作废,恢复原来的资源分配状态,让进程Pi等待! 第二部分:安全性算法
1> 工作向量Work,它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个
银行家算法是避免死锁的一种重要方法,通过编写银行家算法,加深了解有关资源申请、避免死锁的概念,并体会和了解死锁和避免死锁的具体实施方法。
元素,在执行安全算法开始时,Work=:Available;Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]:=fasle;当有足够资源分配给进程时,再令Finish[i]:=true。
2> 若Finish[i]=False&&Need<=Work,则执行4
3> 进程P获得i类资源,则顺利执行直至完成!并释放资源: Work=Work+Allocation; Finish[i]=true; 转2>
4> 若所有进程Finish[i]=true,则表示系统安全;否则,不安全!
四、 源程序
#include "string.h" #include <stdio.h> #include <stdlib.h> #define FALSE 0 #define TRUE 1 Int
MAX[5][3]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};
int AVAILABLE[3]={3,3,2};
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
Request[5][3]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}};
char zy_name[3]={'A','B','C'}; void showdata() { int i,j;
printf("Available:\n"); for (j=0;j<3;j++) { printf("%c: ",zy_name[j]);
printf("%d ",AVAILABLE[j]); } printf("\nNeed:\n"); for (i=0;i<5;i++) { printf(" P%d:",i); for (j=0;j<3;j++)
{ printf("%c: ",zy_name[j]);
printf("%d ",NEED[i][j]); } printf("\n"); }
printf("Allocation: \n"); for (i=0;i<5;i++) { printf(" P%d:",i); for (j=0;j<3;j++)
{ printf("%c: ",zy_name[j]); printf("%d ",ALLOCATION[i][j]); }
printf("\n");}}
void changdata(int k) /*gai bian shu ju*/
{ int j;
for (j=0;j<3;j++)
{AVAILABLE[j]=AVAILABLE[j]-Request[k][j]; ALLOCATION[k][j]=ALLOCATION[k][j]+Request[k][j];
NEED[k][j]=NEED[k][j]-Request[k][j]; }}
void rstordata(int k) /*hui fu shu ju*/ { int j;
for (j=0;j<3;j++) { AVAILABLE[j]=AVAILABLE[j]+Request[k][j]; ALLOCATION[k][j]=ALLOCATION[k][j]-Request[k][j];
NEED[k][j]=NEED[k][j]+Request[k][j]; }} int chkerr(int s)
{ int WORK[3],FINISH[5],temp[3]; int i,j,k=0;
银行家算法是避免死锁的一种重要方法,通过编写银行家算法,加深了解有关资源申请、避免死锁的概念,并体会和了解死锁和避免死锁的具体实施方法。
for(i=0;i<5;i++)
FINISH[i]=FALSE; for(j=0;j<3;j++) WORK[j]=AVAILABLE[j]; i=s; while(i<5)
{ if (FINISH[i]==FALSE && NEED[i][0]<=WORK[0] &&
NEED[i][1]<=WORK[1] &&
NEED[i][2]<=WORK[2])
{WORK[0]=WORK[0]+ALLOCATION[i][0]; WORK[1]=WORK[1]+ALLOCATION[i][1]; WORK[2]=WORK[2]+ALLOCATION[i][2]; FINISH[i]=TRUE; temp[k]=i; k++; i=0; }
Else i++; } for(i=0;i<5;i++)
if(FINISH[i]==FALSE) {printf("\nthe system is
not safe!please waitting!!\n"); return 1; }
printf("\n the system is safe,the request scuess:!\n");
printf(" the safe queue are:"); for(i=0;i<5;i++)
printf("P%d ",temp[i]); printf("\n"); return 0; }
void main() {
int i=0,j=0; char flag='Y'; showdata();
五、 运行结果
while(flag=='Y'||flag=='y') {
/* if(chkerr(i)==0) { */ i=-1;
while(i<0||i>=5) { printf("please enter process 0~4:"); scanf("%d",&i); if(i<0||i>=5)
printf("enter wrong !please enter
again!\n"); } printf("please enter P%d request:\n",i); for (j=0;j<3;j++) { printf("%c:",zy_name[j]); scanf("%d",&Request[i][j]);
if(Request[i][j]>NEED[i][j])
{ printf("P%drequest>need,ERROR!\n:",i); flag='N'; break; } if(Request[i][j]>AVAILABLE[j])
{ printf("P%d:request>available!\n",i); flag='N'; break; }} if(flag=='Y'||flag=='y') { changdata(i); if(chkerr(i))
{ rstordata(i);
showdata();} else
showdata(); } else
showdata();
printf("\n");
printf("enter'Y'or'y'continue: "); getchar();
scanf("%c",&flag); } }
银行家算法是避免死锁的一种重要方法,通过编写银行家算法,加深了解有关资源申请、避免死锁的概念,并体会和了解死锁和避免死锁的具体实施方法。
(1)
(2)
(3) (4)
六、 实验总结
通过几天的调试,终于把银行家这个算法跳出来了,首先赋予 …… 此处隐藏:2078字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [互联网资料]2022年厦门大学机电工程系824机械设计
- [互联网资料]东南大学2022年硕士研究生拟录取名单公
- [互联网资料]能源调研报告(精选多篇)
- [互联网资料]初三英语下学期 中考英语 语法填空训练
- [互联网资料]2022内蒙古选调生行测常识备考:新事物
- [互联网资料]自驾必备!在新西兰租什么样的车自驾游
- [互联网资料]佛教素食菜谱44页未完
- [互联网资料]盈利能力分析外文翻译
- [互联网资料]2022年南昌航空大学音乐学院736马克思
- [互联网资料]优选外贸跟单实习报告总结(精品版)
- [互联网资料]银行新员工培训总结
- [互联网资料]2_year_visa_new_guidance_190316
- [互联网资料]天津市五校宝坻一中静海一中杨村一中芦
- [互联网资料]2007--2008学年第一学期高三数学宁波市
- [互联网资料]Chromatic framework for vision in ba
- [互联网资料]幼儿园大班上学期美术教案《心愿树》含
- [互联网资料]2022年华中农业大学信息学院820微型计
- [互联网资料]硬盘坏道的表现 __硬盘使用久了
- [互联网资料]江苏省2016年会计从业资格考试《会计基
- [互联网资料]公共场所卫生监督试卷全解
- 高级英语第一册所有修辞方法及例子总结
- 综合交通枢纽规划与城市发展
- 沃尔玛的企业文化案例分析
- 美国Thanksgiving Day 感恩节 介绍
- PEP六年级英语上册Unit6How do you fee
- 最齐全的中国大型商场购物中心名单
- 数据结构实验报告八—哈夫曼编译码
- 杭州市余杭区人民政府(通知)
- 七年级语文成语运用专项训练
- 微观经济学第三章 消费者行为 课后习题
- 对_钱学森之问_的思考
- Excel_三级联动_下拉菜单
- 办公用品需求计划申请表
- 对外汉语教材必须要知道的发展史
- 挑战杯大学生学术科技作品竞赛作品申报
- 举办民办教育培训机构应具备下列条件
- 太阳能路灯项目设计方案
- 2013年八年级上最新人教版新教材Unit3I
- 【历史】 6-4 《近代科学之父牛顿》 课
- 高中生物《第四章 第二节 探讨加酶洗衣




