银行家算法避免死锁
2016-05-20 15:54
204 查看
要求:
完成程序数据结构的设计,数据的录入。
完成进程需求矩阵的输出,包括最大需求矩阵,尚需资源矩阵,可获得资源显示。
完成某进程请求资源试分配。
完成安全性检查。
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#define Status int
#define true 1
#define false 0
int M=100;//进程的最大数为100
int N=100;//资源的最大数为100
int Claim[100][100]={0};//各进程所需各类资源的最大需求
int Available[100]={0};//系统可用资源
char name[100]={0};//资源的名称
int Allocation[100][100]={0};//系统已分配资源
int Need[100][100]={0};//还需要资源
int Request[100][100]={0};//请求资源向量
int finish[100]={0};//存放安全序列
int Work[100]={0};//存放系统可提供资源
1. 试探分配
当进程pi提出资源申请时,系统执行下列步骤:
(1)若Request[i][j]≤Need[i][j],转(2);
否则错误返回
(2)若Request[i][j]≤Available[j],
转(3);否则进程等待
(3)试探着把资源分配给进程Pi,则有:
Available[j]=Available[j]-Request[i][j];
Allocation[i],[j]=Allocation[i],[j]+Request[i][j];
Need[i],[j]=Need[i],[j]-Request[i][j];
2. 安全性检测算法:
n 借助于死锁的安全性测试算法来实现。
n 定义布尔型向量finish[k],k=1,..,n。检测死锁算法如下:
(1)Work= Available
(2)在剩余的进程集合中查每一个进程Pk,如果Claim[k,*]- Allocation [k,*]=0,则finish[k]:=true;否则finish[k]:=false;这里k=1,..,n
(3)在剩余的进程集合中找一个进程Pk,需满足条件:
finish[k]=false&(request[*]≤Work)
找到这样的Pk便转(4);否则转(5)
(4)Work:= Work + Allocation;finish[k]:=true;然后转(3)
(5) 如果对k=1,..,n若finish[k]=true不成立,那么,系统出现了死锁,并且finish[k]=false的Pk为死锁进程。
完成程序数据结构的设计,数据的录入。
完成进程需求矩阵的输出,包括最大需求矩阵,尚需资源矩阵,可获得资源显示。
完成某进程请求资源试分配。
完成安全性检查。
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#define Status int
#define true 1
#define false 0
int M=100;//进程的最大数为100
int N=100;//资源的最大数为100
int Claim[100][100]={0};//各进程所需各类资源的最大需求
int Available[100]={0};//系统可用资源
char name[100]={0};//资源的名称
int Allocation[100][100]={0};//系统已分配资源
int Need[100][100]={0};//还需要资源
int Request[100][100]={0};//请求资源向量
int finish[100]={0};//存放安全序列
int Work[100]={0};//存放系统可提供资源
1. 试探分配
当进程pi提出资源申请时,系统执行下列步骤:
(1)若Request[i][j]≤Need[i][j],转(2);
否则错误返回
(2)若Request[i][j]≤Available[j],
转(3);否则进程等待
(3)试探着把资源分配给进程Pi,则有:
Available[j]=Available[j]-Request[i][j];
Allocation[i],[j]=Allocation[i],[j]+Request[i][j];
Need[i],[j]=Need[i],[j]-Request[i][j];
2. 安全性检测算法:
n 借助于死锁的安全性测试算法来实现。
n 定义布尔型向量finish[k],k=1,..,n。检测死锁算法如下:
(1)Work= Available
(2)在剩余的进程集合中查每一个进程Pk,如果Claim[k,*]- Allocation [k,*]=0,则finish[k]:=true;否则finish[k]:=false;这里k=1,..,n
(3)在剩余的进程集合中找一个进程Pk,需满足条件:
finish[k]=false&(request[*]≤Work)
找到这样的Pk便转(4);否则转(5)
(4)Work:= Work + Allocation;finish[k]:=true;然后转(3)
(5) 如果对k=1,..,n若finish[k]=true不成立,那么,系统出现了死锁,并且finish[k]=false的Pk为死锁进程。
#include<iostream.h> #include<string.h> #include<stdlib.h> #include<stdio.h> #define Status int #define true 1 #define false 0 int M=100;//进程的最大数为100 int N=100;//资源的最大数为100 int Claim[100][100]={0};//各进程所需各类资源的最大需求 int Available[100]={0};//系统可用资源 char name[100]={0};//资源的名称 int Allocation[100][100]={0};//系统已分配资源 int Need[100][100]={0};//还需要资源 int Request[100][100]={0};//请求资源向量 int finish[100]={0};//存放安全序列 int Work[100]={0};//存放系统可提供资源 void write(); main() { write(); } void write() { char s; int i,j; FILE* fp=fopen("C:\\io.txt","w"); printf("请输入进程数:\n"); scanf("%d",&M); fprintf(fp,"\n%d",M); printf("请输入资源数:\n"); scanf("%d",&N); fprintf(fp,"\n%d",N); for(i=0;i<M;i++) { for(j=0;j<N;j++) { printf("请输入%d进程所需%d资源的最大需求:\n",i+1,j+1); scanf("%d",&Claim[j][i]); fprintf(fp,"\n%d",Claim[j][i]); } } for(i=0;i<N;i++) { printf("请输入%d资源的最大需求:\n",i+1); scanf("%d",&Available[i]); fprintf(fp,"\n%d",Available[i]); } fclose(fp); }
相关文章推荐
- JAXB - Annotations, Type Mapping: XmlSchemaType
- Erlang安装笔记
- Spring笔记[一]---基础起步
- DirectX技术----D2D基础篇(一)
- Android Studio NDK开发基础
- linux下安装配置svn独立服务器
- Git 基本用法大全
- UITableView不掉用tableView: cellForRowAtIndexPath方法
- Unity5中新的Shader
- jquery 常用方法及事件操作 $工具方法
- Eclipse引用外部project android library
- 【NoSql】Redis
- 阿里云安装wdcp,支持两种安装方式
- 什么是url地址
- php 友盟 推送 android代码
- bboss标签库使用大全-逻辑标签使用介绍
- Ubuntu12.04上交叉编译python-3.2.2详细过程
- photoView 点击事件 和预览功能
- poj1001这题坑太多,套路很深,宝宝心里苦
- Java网络编程基础(二)-- 基于TCP/IP的Socket编程