¿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] p>
(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; p>
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]; p>
131 PCB.Available[i]-=PCB.request[ps][i];
132 PCB.Allocation[ ps][i] =PCB.request[ps][i ];
133 }
134 if(safe())
135 { p>
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