银行家算法避免死锁

要求:

  1. 完成程序数据结构的设计,数据的录入。
  2. 完成进程需求矩阵的输出,包括最大需求矩阵,尚需资源矩阵,可获得资源显示。
  3. 完成某进程请求资源试分配。
  4. 完成安全性检查。

 

#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. 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];

 

  1. 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为死锁进程。

 

 

 1 #include<iostream.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 #include<stdio.h>
 5 #define Status int
 6 #define true 1
 7 #define false 0
 8 int M=100;//进程的最大数为100
 9 int N=100;//资源的最大数为100
10 int Claim[100][100]={0};//各进程所需各类资源的最大需求
11 int Available[100]={0};//系统可用资源
12 char name[100]={0};//资源的名称
13 int Allocation[100][100]={0};//系统已分配资源
14 int Need[100][100]={0};//还需要资源
15 int Request[100][100]={0};//请求资源向量
16 int finish[100]={0};//存放安全序列
17 int Work[100]={0};//存放系统可提供资源
18 void write();
19 
20 main()
21 {
22     write();
23 }
24 
25 void write()
26 {
27     char s;
28     int i,j;
29     FILE* fp=fopen("C:\\io.txt","w");
30     
31     printf("请输入进程数:\n");
32     scanf("%d",&M);
33     fprintf(fp,"\n%d",M);
34 
35     printf("请输入资源数:\n");
36     scanf("%d",&N);
37     fprintf(fp,"\n%d",N);
38 
39 
40     for(i=0;i<M;i++)
41     {
42         for(j=0;j<N;j++)
43         {
44 
45             printf("请输入%d进程所需%d资源的最大需求:\n",i+1,j+1);
46             scanf("%d",&Claim[j][i]);
47             fprintf(fp,"\n%d",Claim[j][i]);
48         }
49     }
50 
51     for(i=0;i<N;i++)
52     {
53         printf("请输入%d资源的最大需求:\n",i+1);
54         scanf("%d",&Available[i]);
55         fprintf(fp,"\n%d",Available[i]);
56     }
57 
58     
59     fclose(fp);
60 }

 

转载于:https://www.cnblogs.com/mxdmxdmxd78/p/5512378.html

1)、当一个用户对作业的最大需求量不超过管理员现有的资金就要接纳该用户; 2)、用户可以分期贷款,但垡的总数不能超过最大需求量; 3)、当管理员现有的作业不能满足用户的沿需数时,对用户的请求可推迟支付,但总能使用户在有限的时间里得到请求; 4)、当用户得到所需的全部作业后,一定能在有限的时间里归还所有的作业。 用银行家算法实现对进程死锁避免银行家算法避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁避免死锁的具体实施方法。死锁的产生,必须同时满足四个条件,即一个资源每次只能由一个进程申请;第二个为等待条件,即一个进程请求资源不能满足时,它必须等待,单它仍继续宝石已得到的所有其他资源;第三个为非剥夺条件,即在出现死锁系统中一定有不可剥夺使用的资源;第四个为循环等待条件,系统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持有的资源。防止死锁的机构只能确保上述四个条件之一不出现,则系统就不会发生死锁。通过这个算法可以用来解决生活中的实际问题,如银行贷款等。 把银行家算法算法应用到操纵系统中对对临界资源的访问产生的死锁进行避免。假设共有3类资源A B C和五个进程编号为0—4。初始资源和初始矩阵要由用户自行控制。对某个资源的某次申请资源动作进行判断看是否能够将资源分配给它,并做出相应的提示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值