jueves, 16 de diciembre de 2010

Algoritmo del Banquero



Es un algoritmo de planificación que puede evitar los bloqueos resolviendo el problema planteado por Edsger Dijkstra.

En la analogía:
  • Podemos decir que los clientes son los procesos, las unidades de crédito son los recursos del sistema y el banquero es el Sistema Operativo.
  • El banquero sabe que no todos los clientes necesitaran su crédito máximo otorgado en forma inmediata, por ello reserva menos recursos de las totales necesarias para dar servicio a los clientes.
El algoritmo mantiene al sistema en un ESTADO SEGURO. Podemos decir que un sistema se encuentra en estado seguro si existe un orden en que pueden concederse las peticiones de recursos a todos los procesos, previniendo el interbloqueo.

El algoritmo consiste en:

  • Estudiar cada solicitud al ocurrir ésta.
  • Ver si al otorgar el recurso conduce a un estado seguro:
 
* En caso de conducir a un estado seguro, se otorga la solicitud.
 
* En caso de conducir a un estado seguro, se le pospone.
  • Para ver si un estado es seguro:
 
* Verifica si tiene los recursos suficientes para satisfacer a otro cliente:
      
> En caso afirmativo, se supone que los préstamos se harán efectivos.
      
> Se verifica al siguiente cliente cercano al límite y así sucesivamente.
 
* Si en cierto momento se vuelven a pagar todos los créditos, el estado es seguro y la solicitud original debe ser aprobada.

Se utilizan cuatro vectores: Recursos, Asignación, Requeridos [Demanda] y Disponible.
  • Recursos: este vector mantiene la cantidad total de recursos que pueden ser utilizados por los procesos.
  • Asignación: en esta matriz constan la actual asignación de recursos a cada uno de los procesos.
  • Requeridos [Demanda]: esta matriz guarda las cantidades máximas de recursos de cada tipo que serán utilizados por cada proceso.
  • Disponible: en cualquier momento, el vector Disponible guardará la cantidad disponible de cada recurso.

Por ejemplo:

Nota: Se basa en que los recursos Requeridos sean <= que los Disponibles
Lista de procesos: [P2,P4,P5,P0 ó P3]


A la derecha se tienen 5 procesos, cada uno tiene recursos de tipo A, B y C. En la primer columna de asignados está la cantidad de recursos que el proceso ha obtenido a lo largo de un tiempo; en la segunda columna de Máximo Necesario, están los recursos que tiene que obtener de cada tipo para comenzar a ser ejecutado. Por ejemplo, el P1 no ha obtenido ningún recurso del tipo A, sólo 1 del tipo B y ninguno del tipo C, y necesita para ejecutarse haber conseguido 7 del A, 4 del B y 3 del C.

En la última columna se tienen los recursos disponibles que da el sistema, los que se pueden utilizar con todos los procesos. Hay 3 del A, 3 del B y 2 del C.

El algoritmo del banquero trata de asegurar qué proceso tiene un “estado seguro” es decir, se requiere alcanzar el máximo requerido entre los que estén en Asignados y los que se encuentren en Disponibles.

Si se suman Asignados + Disponibles para cada uno de los recursos A, B y C, realmente no se alcanzan los Máximos Requeridos.

Entonces se va al proceso 2 y se trata de hacer lo mismo, sumar Asignados + Disponibles. Allí sí se tiene un ESTADO SEGURO, A con 5, B con 3 y C con 2, y como se alcanza a llenar los Máximos, ese proceso se ejecuta.

Una vez que el proceso se ejecutó, entonces se procede a SUMAR los recursos asignados del proceso anterior a los disponibles. Hay que recordar que el proceso al terminar de ejecutarse libera todos sus recursos, por lo tanto pasan tanto los de tipo A, B y C a sumarse con los disponibles 3-3-2 y se tendrán nuevos DISPONIBLES que repartir, siendo ahora éstos 5-3-2.

Con estos se pasa al proceso P2 y así sucesivamente.

No hay comentarios:

Publicar un comentario