[SO] Algoritmo de detección de interbloqueo

estructura de datos.

  • n: número entero, el número de procesos;
  • m: entero, el número de tipos de recursos;
  • Disponible [m]: una matriz unidimensional que almacena el número de instancias disponibles de cada recurso en [1 ... m];
  • Asignación [n] [m]: matriz n × m, Asignación [i] [j] representa el número de recursos j que ya tiene el proceso i;
  • Solicitud [n] [m]: matriz n × m, Solicitud [i] [j] representa el número de recurso j solicitado por el proceso i en este momento.

Algoritmo de detección de interbloqueo.

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;
}

La diferencia con el algoritmo bancario.

Algoritmo bancario.

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;
		}
	}
}

Algoritmo de detección de interbloqueo.

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;
		}
	}
}

Explicación.

  • Preste atención a la séptima línea en los dos conjuntos de códigos. En comparación con el algoritmo de detección de interbloqueo, las condiciones son más débiles y solo Solicitud [i] <Solicitud de trabajo [i] <TrabajoR e q u e s t [ i ]<W o r k recupera el procesoP i P_iPAGSyoRecursos. El algoritmo del banquero determina que N eed [i] <W ork Need [i] <WorkN e e d [ i ]<W o r k sólo se recuperó recursos.
  • El propósito del algoritmo banquero es evitar los puntos muertos, es decir, durante todo el proceso de operación y programación de este grupo de procesos, no puede haber puntos muertos, por lo que es necesario juzgar si el proceso puede ejecutarse de forma completa, es decir, para obtener todos los recursos que necesita. .
  • El algoritmo de detección de interbloqueo solo detecta si hay un interbloqueo en ese momento, si Solicitud [i] <Solicitud de trabajo [i] <TrabajoR e q u e s t [ i ]<Si W o r k es verdadero, significa que el procesoP i P_iPAGSyoEn este momento, no está involucrado en el punto muerto, por lo que asumimos con optimismo que el proceso P i P_iPAGSyoNo solicitará más recursos en el futuro (en muchos escenarios de aplicación, existen supuestos tan optimistas), por lo que los recursos que contiene se recuperan directamente durante la prueba. Por supuesto, si esta suposición optimista es incorrecta y se produce un interbloqueo en la ejecución posterior, se detectará durante la ejecución del algoritmo de detección de interbloqueo posterior.

Supongo que te gusta

Origin blog.csdn.net/weixin_44246009/article/details/108548948
Recomendado
Clasificación