Está en la página 1de 3

Abrazo Mortal

Teoria

Algoritmo
Tomar en cuenta
Sea R el array de los recursos disponibles del sistema.
Ejm:
R[3] = [ 1 , 2 , 3 ]
1 impresora
2 unidades de CD
3 puertos USB
Sea la matriz RecursosAsignados(RA) de N filas, sea N el numero de
procesos y M columnas siendo M el numero de recursos del sistema.
De iguales dimensiones son la matriz RecursosPorAsignar(RPA) y
RecursosNecesarios(RN).
RPA y RN son iguales al inicio pero RPA varia durante el
algoritmo, mientras que RN no para persistir los recursos que
necesito el proceso, estos luego se utilizaran para saber que
recursos son liberados cuando se acabe el proceso finalice.
Ejm:
RA[3][3]
[ 1 0 1
[ 0 1 1
[ 0 0 0
]

= [
]
]
]

El primer proceso tiene asignado 1 impresora y 1 puerto usb.


El segundo proceso tiene asignado 1 unidad de CD y 1 puerto usb.
Y el tercer procesos no tiene asignado recursos.
RPA[3][3] = [
[ 0 0 0 ]
[ 0 0 0 ]
[ 0 0 3 ]
]
El primer y segundo procesos no tienen recursos por asignar.
En cambio el tercero proceso necesita 3 puertos USB.
Algoritmo
function algoritmoBanquero()
listos = getProcesos(READY);
while( buscarEn(READY, listos) )
i = 1

while ( i <= len(listos) )


proceso = listos[i]
recursos_por_asignar = obtenerRecursosPorAsignar( i )
if ( necesitaRecursos(recursos_por_asignar) AND
haySuficientesRecursos(recursos_por_asignar) )
ocuparRecursos( recursos_por_asignar )
end_if
end_while
actualizarRecursos(listos)
i++
end_while
end_function
function obtenerRecursosPorAsignar(index)
return RA[index]
end_function
function necesitaRecursos (recursos_por_asignar)
for (i = 1; i <= len(recursos_por_asignar); i++ )
if ( recursos_por_asignar[i] > 0 )
return true
end_if
end_for
return false
end_function
function haySuficientesRecursos (recursos_por_asignar)
for( i = 1; i <= len(recursos_por_asignar ); i++ )
if( recursos_por_asignar[i] > obtenerCantidadLibreRecurso(i) )
return false
end_if
end_for
return true
end_function
function obtenerCantidadLibreRecurso(index_recurso)
total = 0
for (int i = 0; i <= len(RA); i++ )
total = total + RA[i][index_recurso]
end_for
return R[index_recurso] - total
end_function
function ocuparRecursos(recursos_por_asignar)
for ( i = 1; i <= len(recursos_por_asignar); i++ )
R[i] = R[i] recursos_por_asignar[i]
end_for
end_function

function actualizarRecursos(procesos)
for ( i = 1; i <= len(procesos) ; i++ )
if ( esFinish(procesos[i]) )
R[i] = R[i] + RN[i]
end_if
end_for
end_function
function esFinish(proceso)
return proceso.status == FINISH
end_function

También podría gustarte