操作系统实验:银行家算法

银行家算法
摘要由CSDN通过智能技术生成

实现描述:

#define  n  5  //进程个数
#define  m  3  //资源种类
int   Available[m],Alloc[n][m],Need[n][m];
main()
{
   
   int request[m];
   input( );
   while (1)
   {
   
      read_req( ); 
      if  (请求结束)   break;
	(1) if (!(requesti<=Needi))   表示非法请求;
	(2) if (!(requesti<=Available)) 则Pi阻塞; 
	(3)	试探性分配
		Available=Available - Requesti;
        Alloci=Alloci+Requesti;
        Needi=Needi-Requesti;
 	(4)若新状态安全,则实际分配资源给Pi,否则取消试探性分配。
  }
}
安全状态判别算法:
(1)设置Finish=(false,...,false)  work=Available
(2)循环查找满足下列条件的进程pi //最多循环n次
    Finish[i]=false且Needi<=work
(3)若找到则Finish[i]=true;work=work+Alloci; 转(2)
(4)若Finish=(true,...,true) 则安全,否则不安全。


测试数据:m=3:种类型的资源(A,B,C,) 进程个数n=5
Available=(2,3,3);     
	      已分配资源数量           资源需求量
	 A        B         C	  A        B         C
P1	 2        1         2	  3        4         7
P2	 4        0         2	  1        3         4
P3	 3        0         5	  0        0         3
P4	 2        0         4	  2        2         1
P5	 3        1         4	  1        1         0
 
请求序列如下:
a.进程P2请求资源(0,3,4)
b.进程P4请求资源(1,0,1)
c.进程P1请求资源(2,0,1)
d.进程P3请求资源(0,0,2) 

C语言代码如下:

#include <stdio.h>
#define n 5 //进程个数
#define m 3 //资源种类

int Available[m] = {
   2, 3, 3}; //当前剩余资源
int Alloc[n]
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值