Red de conocimiento informático - Consumibles informáticos - ¿Podrías ayudarme a escribir un programa? Soy un novato y no lo entiendo en absoluto.

¿Podrías ayudarme a escribir un programa? Soy un novato y no lo entiendo en absoluto.

1. Algoritmo bancario:

Supongamos que el proceso i realiza una solicitud Solicitud [j], entonces el algoritmo bancario juzgará de acuerdo con las siguientes reglas.

(1) Si Solicitud[j]≤Necesidad[i, j], vaya a (2), de lo contrario se considera un error.

(2) Si Solicitud[j]≤Available[j], pase a (3); de lo contrario, significa que no hay suficientes recursos y Pi necesita esperar.

(3) Se supone que la aplicación del proceso i ha sido aprobada, por lo que se modifica el estado del sistema:

Disponible[j]=Disponible[j]-Solicitud[i]

Asignación[i,j]=Asignación[i,j] Solicitud[j]

Necesidad[i,j]=Necesidad[i,j]-Solicitud[j]

(4) El sistema realiza una verificación de seguridad. Si es seguro, se establece la asignación; de lo contrario, la asignación de prueba se invalida, el sistema vuelve a su estado original y el proceso espera.

2. Comprobación de seguridad

(1) Establecer dos vectores de trabajo Work=Available; Finish[i]=False

(2) Establecer desde el proceso Buscar. un proceso que satisface las siguientes condiciones,

Finalizar [i]=False

Necesita[i, j]≤Work[j]

Si se encuentra; , ejecute (3); de lo contrario, ejecute (4)

(3) Suponga que el proceso obtiene recursos y puede ejecutarse sin problemas hasta su finalización, liberando así los recursos.

Trabajo[j]=Trabajo[i] Asignación[i, j];

Finalizar[i]=Verdadero

vaya al paso 2;

(4) Si todos los procesos finalizan [i] = verdadero, significa seguro; de lo contrario, el sistema no es seguro.

1#includelt;iostreamgt;

2#includelt;cstdlibgt;

3#define maxn 100

4usando el espacio de nombres std;

5

6typedef struct Process_control_blank

7{

8 int finsh[maxn]

9 int Max; [maxn][maxn];

10 int Asignación[maxn][maxn];

11 int necesidad[maxn][maxn];

12 int solicitud[maxn][maxn];

13 int Disponible[maxn];

14 int proceso[maxn];

15}Pcb;

16Pcb PCB;

17int trabajo [maxn]

18int l

19char Bandera

20int m; n;

21int safe(); //Determinar si está en un estado seguro

22

23void input()

24{

25

26 coutlt;lt;"Ingrese el número de procesos:\n";

27 cingt;gt;m;

28 coutlt;lt;"Por favor, introduzca el número de recursos:\n";

29 cingt;gt;n;

30 coutlt;lt;"Por favor ingrese la matriz disponible\n";

31 for(int i=0;ilt;m;i)

32 for(int j=0;jlt;n;j)

33 {

34 cingt; PCB.Allocation[i][j];

35 }

36 coutlt; lt; "Ingrese la matriz máxima\ n";

37 for(int i=0;ilt;m;i)

38 for(int j=0;jlt; n;j)

39 {

40 cingt; PCB.Max[i][j]; > 42 para(int i=0; ilt; m; i )

43 para(int j=0; jlt; n; j )

44 {

45 PCB.need[i] [j]=PCB.Max[i][j]-PCB.Allocation[i][j]

46 }

47; coutlt;lt;"Ingrese cada uno El número inicial de recursos disponibles para el proceso:\n"

48 for(int i=0; ilt; n; i)

49

cingt; gt; PCB.Available[i];

50

51 // coutlt; "La matriz de necesidad es la siguiente:\n"; >

52 // for(int i=0; ilt; m; i)

53// {for(int j=0; jlt; n; j)

54// coutlt ;lt;PCB.need[i][j]lt;lt;" ";

55// coutlt;lt;endl;

56// }

57

58}

59

60int seguro()

61{

62 int i, j, k;

63 l=0

64 para(i=0; ilt; n; i)

65 trabajo[i] =PCB.Available[i];

66 for(i=0;ilt;m;i)

67 PCB.finsh[i]=0;

68

69 para(i=0;ilt;m;i)

70 {

71 si(PCB.finsh [i]== 1)

72 continuar;

73 más

74 {

75 for(j=0;jlt ;n;j)

76 {

77 if(PCB.need[i][j]gt; trabajo[j])

78 descanso;

79 }

80 if(j==n) //Asignable

81 {

82 PCB.finsh[i] =1;

83 for(k=0;klt;n;k)

84 trabajo[k] =PCB.Allocation[i][k];

85 PCB.process[l ]=i

86 i=-1; //Reiniciar

87 }

88 más

89 continuar

90 }

91 if(l==m)

92 {

93 coutlt; lt;" La secuencia de seguridad es la siguiente:\n";

94 for(k=0;klt;l;k)

95 { coutlt;lt;"P" lt;lt;proceso de PCB[k];

96 si(k!=l-1)

97

coutlt;lt;"--gt;";

98 }

99 coutlt;lt;endl;

100 devuelve 1;

101 }

102 } //para

103 // devuelve 0;

104}

105int Solicitud()

106{

107 int i, j;

108 mientras(1)

109 {

110 coutlt;lt;"Ingrese el proceso al que desea solicitar recursos (el subíndice comienza desde 0)\n";

111 int ps;

112 cingt;gt;ps;

111 int ps;

112 cingt;gt;ps;

p>

113 coutlt;lt;"Ingrese el número de recursos solicitados por el proceso\n ";

114 for(i=0;ilt;n;i)

115 {

116 cingt;gt;PCB.request[ps][ i];

117 if(PCB.request[ps][i]gt; PCB.need[ps ][i])

118 {

119 coutlt;lt;"La cantidad de recursos solicitados es mayor que la cantidad requerida por el proceso\n";

120 return 0

121 }

122 if(PCB.request[ps][i]gt; PCB.Available[i])

123 {

124 coutlt;lt;"El número de recursos solicitados es mayor que el número de recursos disponibles\n";

125 devuelve 0;

126 }

127 }

128 para( i=0;ilt;n;i)

129 {

130 PCB.need[ps][i] -=PCB.request[ps][i];

131 PCB.Available[i]-=PCB.request[ps][i];

132 PCB.Allocation[ ps][i] =PCB.request[ps][i ];

133 }

134 if(safe())

135 {

136 coutlt;lt;"Aceptar solicitud de asignación \n";

137 }

138 else

139 {

140 coutlt;lt;"LO SIENTO~~~~~ Su solicitud fue rechazada~~~\n";

141 for(i=0;ilt;n;i)

142 {

143 PCB. necesita[ps][i] =PCB.request[ps][i];

144 PCB.Available[i] =PCB.

solicitud[ps][i];

145 PCB.Allocation[ps][i]-=PCB.request[ps][i];

146 }

147 }

148 para(i=0;ilt;n;i)

149 PCB.finsh[i]=0;

150 coutlt;lt;"¿Quiere solicitar la asignación nuevamente? En caso afirmativo, presione Y/y; en caso negativo, presione N/n";

151 while(1)

152 {

153 cingt;gt;Bandera;

154 if(Bandera=='Y' || Bandera=='y' || Bandera=='N' | | Flag=='n' )

155 descanso;

156 else

157 {

158 coutlt;lt;"Por favor vuelva a ingresar según sea necesario:\n ";

159 continuar;

160 }

161 }

162 if(Flag= ='Y' || Bandera= ='y')

163 continuar;

164 más

165 romper;

166

167 }//mientras

168}

169int main()

170{

171 entrada ();

172 seguro();

173 Solicitud();

174 sistema("pausa");

175 devolver 0;

176}

177