Red de conocimiento informático - Consumibles informáticos - Algoritmo del banquero

Algoritmo del banquero

#include "string.h"

#include

#include

# define M 5

#define N 3

#define FALSE 0

#define TRUE 1

/*M procesos para N Máximo demanda de recursos para recursos de clase*/

int MAX[M][N]={{7,5,3},{3,2,2},{9,0,2},{ 2 ,2,2},{4,3,3}};

/*Número de recursos disponibles del sistema*/

int AVAILABLE[N]={10,5,7 };

/*Demanda máxima de recursos para N tipos de recursos por M procesos*/

int ALLOCATION[M][N]={{0,0,0},{ 0,0,0},{0,0,0},{0,0,0},{0,0,0}};

/*M procesos han obtenido N tipos de recursos Recurso cantidad*/

int NECESIDAD[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2, 2 },{4,3,3}};

/*M procesos también requieren la cantidad de N tipos de recursos*/

int Request[N]={0, 0 ,0};

void main()

{

int i=0,j=0;

char flag= ' Y';

void showdata();

void changdata(int);

void rstordata(int);

int chkerr (int);

mostrar datos();

mientras(flag=='Y'||flag=='y')

{

i=-1;

while(i<0||i>=M)

{

printf("Ingrese el valor requerido Número de proceso para solicitar recursos (de 0 a ");

printf("%d",M-1);

printf(", en caso contrario ¡reingrese!): ") ;

scanf("%d",&i);

if(i<0||i>=M)printf("El número de proceso ingresado no existe, ¡Vuelva a ingresar! \n");

}

printf("Por favor, ingrese el proceso");

printf("%d",i );

printf("Número de recursos solicitados\n");

for (j=0;j

{

printf ("recurso");

printf("%d",j);

printf(":");

scanf("%d" ,&Request[j]);

if(Request[j]>NECESITA[i][j])

{

printf("proceso") ;

printf("%d",i);

printf("El número de recursos solicitados es mayor que el proceso");

printf("%d" ,i);

printf("Aún es necesario");

printf("%d",j);

printf("¡Recurso de recurso de clase Cantidad! ¡La aplicación no es razonable, ocurrió un error! ¡Seleccione nuevamente!\n");

/*printf("La aplicación no es razonable, ocurrió un error ! ¡Seleccione nuevamente!\n");*/

flag='N';

brea

k;

}

else

{

if(Solicitud[j]>DISPONIBLE[j])

{

printf("Proceso");

printf("%d",i);

printf("El número de recursos solicitados es mayor que el sistema Disponible");

printf("%d",j);

printf("¡La cantidad de recursos del recurso de clase! La aplicación no es razonable, un error ocurrió! ¡Seleccione nuevamente!\n" );

/*printf("¡La solicitud no es razonable, ocurrió un error! ¡Elija nuevamente!\n");*/

bandera='N';

romper;

}

}

}

if(bandera= ='Y'||flag=='y' )

{

changdata(i);

if(chkerr(i))

{

rstordata(i);

showdata();

}

else

mostrar datos();

}

else

mostrar datos();

printf("\n");

printf("Ya sea para continuar con la demostración del algoritmo bancario, presione la tecla 'Y' o 'y' para continuar, presione la tecla 'N' o 'n' para salir de la demostración: ");

scanf("%c",&flag);

}

}

void showdata()

{

int i,j;

printf ("El número de recursos disponibles para el sistema es:\n");

printf(" ");

for (j=0;j

printf("recurso");

printf("%d",j);

printf(":");

printf ("%d",AVAILABLE[j]);

/*printf("\n");*/

/* cout<

// cout<<"La demanda máxima de recursos de cada proceso:"<

// for (i=0;i

// {

// cout<<"Proceso"<

// for (j=0;j

// cout<

*/ }

printf("\n");

printf("La cantidad de recursos que cada proceso aún necesita :\n");

for (i=0;i

{

printf(" proceso");

printf("%d",i);

printf(":");

for (j=0;j

printf("recurso");

printf ("%d",j);

printf(:");

printf("%d",NEED[i][j]);

/*printf("\n");*/

}

printf("\n");

}<

/p>

printf("La cantidad de recursos que ha obtenido cada proceso: \n");

for (i=0;i

{

printf("proceso");

printf("%d",i);

/*printf(:\n");* /

for (j=0;j

printf("Recurso");

printf("%d",j ) ;

printf(":");

printf("%d",ALLOCATION[i][j]);

/*printf( " \n");*/

}

printf("\n");

}

}

void changdata(int k)

{

int j;

for (j=0;j

{

DISPONIBLE[j]=DISPONIBLE[j]-Solicitud[j];

ASIGNACIÓN[k][j]=ASIGNACIÓN[k][j]+ Solicitud [j];

NEED[k][j]=NEED[k][j]-Solicitud[j];

}

};

void rstordata(int k)

{

int j;

for (j=0;j

{

DISPONIBLE[j]=DISPONIBLE[j]+Solicitud[j];

ASIGNACIÓN[k][j]=ASIGNACIÓN[k][ j ]-Solicitud[j];

NECESIDAD[k][j]=NECESIDAD[k][j]+Solicitud[j];

}

};

int chkerr(int s)

{

int TRABAJO,FINALIZAR[M],temp[M];

int i,j,k=0;

for(i=0;i

for(j=0;j < N;j++)

{

TRABAJO=DISPONIBLE[j];

i=s;

mientras(i

{

if (FINALIZAR[i]==FALSO&&NECESITA[i][j]<=TRABAJO)

{

TRABAJO =TRABAJO+ASIGNACIÓN[i][j];

FINALIZAR[i]=VERDADERO;

temp[k]=i;

k++;

k++;

temp[k]=i;

k++;

p>

i=0;

}

else

{

i++;

}

}

for(i=0;i

if(FINALIZAR[i]==FALSE)

{

printf(" \n");

printf("¡¡¡El sistema no es seguro!!! ¡¡¡Esta aplicación de recursos no tuvo éxito!!!\n");

printf("\n") ;

devuelve 1;

}

}

printf("\n ");

printf ("Después del control de seguridad, el sistema es seguro y la asignación se realizó correctamente.

\n");

printf("\n");

printf("Esta secuencia de seguridad: ");

for(i=0 ; i

printf("proceso");

printf("%d",temp[i]);

printf ( "->");

}

printf("\n");

devuelve 0;

}