Es una forma de evitar el interbloqueo, propuesta por primera vez por Edsger Dijkstra. Es un acercamiento teórico para evitar los interbloqueos en la planificaicon de recursos. requiere conocer con anticipación los recursos que serán utilizados por todos los procesos. Esto ultimo generalmente no puede ser satisfecho en la practica.
Este algoritmo usualmente es Explicado usando la analogía con el funcionamiento de un banco. los clientes representan a los procesos, que tienen un crédito limite, y el dinero representa a los recursos. el banquero es el sistema operativo.
El banco confía en que no tendrá que permitir a todos sus clientes la utilización de todo su crédito a la vez. El banco también asume que si un cliente maximiza su crédito será capaz de terminar sus negocios y devolver el dinero a la entidad, permitiendo servir a otros clientes.
El algoritmo mantiene al sistema en un estado seguro. Un sistema se encuentra en un estado seguro si existe un orden en que pueden concederse las peticiones de recursos a todos los procesos, previniendo el interbloqueo.
Los procesos piden recursos, y son complacidos siempre y cuando el sistema se mantenga en un estado seguro después de la concesión. de lo contrario, el proceso es suspendido hasta que otro proceso libere recursos suficientes.
Estructuras y complejidad.
Se deben utilizar cuatro estructuras de datos para implementar el algoritmo del banquero. estas decodifican el estado del sistema de asignación de recursos. Sea n, el numero de procesos del sistema, m el numero de tipos de recursos.
Se necesita:
- Recursos (disponible): Un vector de longitud m que mantiene la cantidad total de recursos, de cada tipo, que pueden ser utilizados por los procesos. De esta forma, recursos[i] = k significa que hay una cantidad total k de recursos tipo Ri disponibles.
- Demanda (max): Esta matriz, n x m, guarda las cantidades máximas de recurso de cada tipo que pueden ser demandadas por cada proceso. Si Max[i][j] = k, el proceso i, puede solicitar, como máximo k instancias del recurso j.
- Asignación (allocation): En esta matriz, n x m, numero de recursos de cada tipo actualmente asignados a casa proceso. Asignación[I][j] = k significa que el proceso i tiene asignado k unidades del recurso j.
- Necesidad (need): Una matriz, n x m, que indica la necesidad restante del recurso de cada proceso. Si necesidad[i][j] = k, entonces el proceso i puede necesitar k instancias del tipo de recursos j. Observe que necesidad[i][j] = max[i][j] - asignación[i][j].
No hay comentarios:
Publicar un comentario