Experimento del algoritmo bancario
Se puede asignar la solicitud realizada por el proceso P1.
El proceso P2 no se puede asignar porque el recurso Clase B solicitado excede su máximo.
Si quieres un programa, aquí tienes este:
#includelt; stdio.hgt
#stdlib.hgt; p >#includelt;string.hgt;
#define MAXSIZE 50
void main()
{
unsigned int Disponible[ MAXSIZE ]; //Vector de recursos disponibles
unsigned int Max[MAXSIZE][MAXSIZE]; //Matriz de demanda máxima
unsigned int Asignación[MAXSIZE][MAXSIZE] //Ya; Matriz de asignación
unsigned int Need[MAXSIZE][MAXSIZE]; //Matriz de requisitos
unsigned int Request[MAXSIZE] //Vector de solicitud
unsigned int; Work[MAXSIZE]; //Vector de trabajo
bool Finish[MAXSIZE]; //Si hay suficientes recursos asignados al proceso para completar la operación
unsigned int SafeSequence[MAXSIZE] ; //Secuencia de seguridad
int i, j;
int p; //El subíndice del proceso que solicita el recurso
int temp = 0; /Subíndice de secuencia de seguridad
int total = 0;
int N;
int M
printf("Ingrese el número; de procesos N =");
scanf("d",amp; N);
printf("Ingrese el número de tipos de recursos M=");
scanf ("d",&M);
//Datos de entrada del usuario, inicializa la matriz disponible
printf("Inicializa la matriz de recursos disponibles:\n ");
for(i=0; ilt; M; i)
{
printf("\tc recurso de clase: ", 65 i) ;
scanf("d", amp; Disponible[i]);
}
//El usuario ingresa datos e inicializa la matriz máxima
printf("Matriz de demanda máxima de inicialización:\n");
for(i=0; ilt; N; i)
{
printf("\tPd proceso máximo Requiere\n", i);
for(j=0; jlt; M; j)
{
printf ("\t\tc recursos de clase: ", 65 j
scanf("d", amp; Max[i][j]); >
}
p>
//El usuario ingresa datos e inicializa la matriz de asignación
printf("Inicializar la matriz de recursos asignados:\n");
for(i=0; ilt; N; i )
{
printf("\tPd proceso ha sido asignado\n", i);
for(j=0; jlt; M; j)
{
printf("\t\tc recurso de clase: ", 65 j);
scanf("d", amp;Allocation[i][j]);
}
}
//Inicializar matriz necesaria
for(i=0; ilt; N; i)
for(j=0; jlt; M; j)
{
Necesidad[ i][j] = Max[i][j] - Asignación[i][j];
}
//Verificar después de que el proceso emita una solicitud de recurso
do
{
printf("Solicitud de recurso:\n");
printf("\tIngrese el índice de proceso del recurso solicitado :" );
scanf("d", amp; p);
printf("\tProcesar solicitud Pd\n", p);
//Inicializar vector de solicitud
for(i=0; ilt; M; i)
{
printf("\t\tc recurso de clase: " , 65 i);
scanf("d", y Solicitud[i]);
}
for(i=0; ilt; M). ; i) //Verificar solicitud lt;= ¿Necesita?
if(Request[i] gt; Necesidad[p][i])
{
printf ("\t¡El número de recursos de tipo c solicitados excede el máximo anunciado!\n", 65 i
break
}
if); (i == M) // A través de la verificación de la capa superior, continúe verificando Solicitar lt; = ¿Disponible?
{
for(i=0; ilt; M; i) p>
if(Solicitud[i] gt; Disponible[i])
{
printf("\tAún no hay suficientes recursos de tipo c, Pd ¡debe esperar!\ n", 65 i, p);
break;
}
}
if(i == M) // Pruebe la asignación
{
for(i=0; ilt; M; i)
{
Disponible[ i] -= Solicitud[i];
Asignación[p][i] = Solicitud[i];
Necesidad[p][i] -= Solicitud[i];
}
}
} while(ilt;M);
//Inicializar trabajo, finalizar vector
for( i=0; ilt; M; i )
{
Trabajo[i] = Disponible[i]
}
for(i=0; ilt; N; i)
{
Finalizar[i] =
false;
}
//Algoritmo de seguridad
do
{
total = temp;< / p>
for(i=0; ilt; N; i)
{
if(Finish[i] == false)
{
for(j=0; jlt; M; j)
if(Necesidad[i][j] gt; Trabajo[j])
{
break;
}
if(j == M) // Todo tipo de recursos satisfacen la necesidad lt; {
for(j=0; jlt; M; j)
{
Trabajo[j] = Asignación[i][j]; Liberar recursos
}
Finish[i] = true;
SafeSequence[temp] = i; //Agregar secuencia segura
}
}
}
} while(total != temp); //Después de verificar todos los procesos, si hay un cambio en la secuencia de seguridad , continúe con la siguiente ronda
// De lo contrario, todos los acabados son verdaderos o se sale del ciclo porque no hay una secuencia segura
if(temp == N)
{
printf("Secuencia segura: ");
for(temp=0; templt; N; temp)
{
printf("Pd ", SafeSequence[temp]);
}
}
else
{
printf("¡El sistema está en un estado inseguro! ¡No se puede asignar!\n");
}
getchar(); getchar();
p>
}
Este programa está bien, pero la entrada es un poco problemática. Lo escribí yo mismo para usar archivos para ingresar información de descripción del sistema. pero faltan instrucciones, así que me temo que no las entenderás.