【OS】死锁检测算法

数据结构.

  • n:整型,进程数量;
  • m:整型,资源类型的种类数;
  • Available[m]:一维数组,保存[1…m]每种资源的可用实例数量;
  • Allocation[n][m]:n×m矩阵,Allocation[i][j]表示i号进程已经持有的j号资源数量;
  • Request[n][m]:n×m矩阵,Request[i][j]表示i号进程此时申请的j号资源数量。

死锁检测算法.

TestDeadLock()
{
    
    
	//1.
	Work[1..m]=Available[1..m];
	//向量Work初始化为当前可用资源实例数向量.

	Finish[1..n]=false;
	//向量Finish每个分量都为false,表示初态都是未完成.

	//2.
	change=true;	//循环控制变量.
	while(change)
	{
    
    
		//Request[i]表示矩阵的第i行,也就是进程Pi所申请的资
		//源数向量,若进程Pi未完成,并且需求能够得到满足,就执
		//行Pi,后续释放其中的资源,等价于Work获得Pi已经持有
		//的资源数向量Allocation[i].
		change=false;
		for(int i=1;i<=n;++i)
		{
    
    
			if(Finish[i]==false && Request[i]<Work) 
			{
    
    
				Work=Work+Allocation[i];
				Finish[i]=true;
				change=true;
			}
		}
	}
	//不动点算法:只有当Finish和Allocation不再发生改变时,
	//也就意味着所有的进程都已经完成或者剩余进程都无法运行
	//这两种情况之一发生时,才会跳出while循环.

	//3.
	for(int i=1;i<=n;++i)
	{
    
    
		if(Finish[i]==false)
		{
    
    
			return true;
			//只要存在一个进程是false,就代表出现了死锁
			//返回真值表示检测到了死锁
		}
	}
	return false;
}

与银行家算法の区别.

银行家算法.

change=true;
while(change)
{
    
    
	change=false;
	for(int i=1;i<=n;++i)
	{
    
    
		if(Finish[i]==false && Need[i]<Work) 
		{
    
    
			Work=Work+Allocation[i];
			Finish[i]=true;
			change=true;
		}
	}
}

死锁检测算法.

change=true;
while(change)
{
    
    
	change=false;
	for(int i=1;i<=n;++i)
	{
    
    
		if(Finish[i]==false && Request[i]<Work) 
		{
    
    
			Work=Work+Allocation[i];
			Finish[i]=true;
			change=true;
		}
	}
}

解释.

  • 关注两组代码中的第7行,相较之下死锁检测算法的条件更弱,只判定了 R e q u e s t [ i ] < W o r k Request[i]<Work Request[i]<Work就收回了进程 P i P_i Pi的资源。而银行家算法中判定了 N e e d [ i ] < W o r k Need[i]<Work Need[i]<Work才收回资源。
  • 银行家算法目的是避免死锁,也就是说,这组进程的整个运行、调度过程中,不能有死锁的出现,所以需要判断进程是否能够完整运行,也就是获得到它所需要的全部资源。
  • 死锁检测算法仅仅是检测此刻有无死锁存在,如果 R e q u e s t [ i ] < W o r k Request[i]<Work Request[i]<Work为真,就说明进程 P i P_i Pi此刻并没有参与死锁,所以我们乐观地假定进程 P i P_i Pi后续也不会再申请更多的资源(很多应用场景下,都有这样的乐观假定),所以在测试时直接收回它所持有的资源。当然,如果这个乐观假定错了,后续的执行中出现了死锁,那么就会在后续的死锁检测算法执行时检测到。

猜你喜欢

转载自blog.csdn.net/weixin_44246009/article/details/108548948
今日推荐