Red de conocimiento informático - Consumibles informáticos - Experimento del algoritmo bancario

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)

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.