Cuando los recursos son compartidos entre varios usuarios, donde cada uno mantiene un control exclusivo sobre determinados recursos asignados a ese usuario, pueden producirse interbloqueos, en los cuales los procesos de algunos usuarios no podrán llegar a su término. En cualquier sistema que mantenga procesos en espera mientras realiza la asignación de recursos y procesa la planeación de decisiones, es posible que un proceso sea aplazado indefinidamente mientras otros reciben la atención del sistema. Esta situación llamada postergación indefinida puede ser en ocasiones de consecuencias equivalentes a un interbloqueo. ⊕ Obras consultadas: [5.10] [5.33] [5.34] 25 Imagen reproducida de [5.10]
Cuando los recursos son planeados en función de prioridades, es posible que un proceso dado espere indefinidamente en tanto continúen llegando procesos de prioridades más importantes. Hay cuatro condiciones necesarias que deben darse para que se produzca un interbloqueo [5.34]:
1. Los procesos reclaman control exclusivo de los recursos que piden (condición de exclusión mutua).
2. Los procesos mantienen los recursos que ya les han sido asignados, mientras esperan recursos adicionales (condición de espera por).
3. Los recursos no pueden ser extraídos de los procesos que los tienen hasta su completa utilización (condición de no apropiatividad).
4. Existe una cadena circular de procesos en la cual cada uno de ellos mantiene a uno o más recursos que son requeridos por el siguiente proceso de la cadena (condición de espera circular).
Existen algunas estrategias para evitar varias de las condiciones de interbloqueo [5.34]: 1. Cada proceso deberá pedir todos sus recursos requeridos de una sola vez y no podrá
proceder hasta que le hayan sido asignados.
2. Si a un proceso que mantiene ciertos recursos se le niega una nueva petición, éste deberá liberar sus recursos originales y en caso necesario pedirlos de nuevo junto con los recursos adicionales.
3. Se impondrá la ordenación lineal de los tipos de recursos en todos los procesos, es decir, si a un proceso le han sido asignados recursos de un tipo dado, en lo sucesivo sólo podrá pedir aquellos recursos de los tipos que siguen en el ordenamiento.
En general existen dos tipos de soluciones al interbloqueo: 1. Prevención (evitar que ocurra)
2. Tratamiento (permitir que ocurra, detectarlo y corregirlo)
Prevención y tratamiento
Existen dos tipos de prevenciones: una estática, cuya solución se basa en un conjunto de reglas y otra dinámica, en la cual se evita que ocurra, no asignando recursos cuando ello puede conducir a interbloqueos.
La prevención estática se basa en el hecho que para que ocurra un interbloqueo se deben dar las siguientes cuatro condiciones en forma simultánea:
(c1) Los recursos se utilizan en exclusión mutua
(c2) Los recursos, una vez asignados, no pueden ser retirados a los procesos
(c3) Los procesos esperan por la asignación de recursos mientras tienen asignados otros (c4) Existe una cadena circular de procesos en la cual cada uno tiene asignado uno o más recursos que son solicitados por otros procesos.
Si se desea evitar los interbloqueos, se debe impedir que se cumpla al menos una de las cuatro condiciones. La condición (c1) no se puede evitar, ya que como se mencionó previamente, los recursos se deben utilizar en exclusión mutua. Para evitar la condición (c2) se puede actuar de la siguiente forma: Si un proceso tiene asignado un recurso R1 y le es negado otro recurso R2, entonces se le retira el recurso R1. Sin embargo, esta solución puede llevar a que la ejecución de un proceso se prolongue indefinidamente, debido a que nadie puede garantizar que termine en un tiempo determinado.
Para evitar la condición (c3), se pueden asignar todos los recursos necesitados por el proceso en el momento de su creación, sin embargo, esto conlleva a un manejo poco eficiente de los mismos.
Para eludir la condición (c4) se puede hacer una asignación recursos por niveles. En este caso se le asigna a cada tipo de recurso un nivel y se establece que los recursos deben ser asignados en orden ascendente de nivel.
La prevención dinámica consiste en analizar cada vez que se va a asignar un recurso, si tal asignación puede conducir a un interbloqueo (situación no-segura), en cuyo caso no se asigna. En caso contrario (situación segura) el recurso se asigna.
Por ejemplo suponga que en el sistema existen múltiples recursos de un solo tipo y que existen cuatro procesos que quieren usarlos.
PROCESO RECURSOS ASIGNADOS MÁXIMO RECURSOS NECESARIOS
P1 4 8
P2 3 7
P3 3 5
P4 0 5
Suponga además que la cantidad de recursos disponibles es 2. Si el proceso P3 solicita estos recursos se le pueden asignar, ya que tal asignación conduce a una situación segura, puesto que P3 puede terminar y liberar los 5 recursos asignados y con ellos se garantiza que todos los demás procesos pueden terminar. Sin embargo, si estos 2 recursos son solicitados por P2, la situación no es segura si se le asignan, ya que no se puede garantizar que los procesos terminen satisfactoriamente.
El hecho de que la situación no se segura no implica necesariamente que se vaya a presentar interbloqueo, sino que puede ocurrir.
El tratamiento se basa en el hecho de detectar el interbloqueo y corregirlo. La corrección se limita en la mayoría de los casos a seleccionar uno o más procesos de baja prioridad y destruirlos. En el peor de los casos, se debe reiniciar el sistema. Como se puede suponer, este tipo de solución puede conducir a inconsistencias en el sistema, además de ser una solución demasiado costosa.
5.4.2 Comunicación entre procesos
Los procesos frecuentemente necesitan comunicarse con otros procesos. Por ejemplo, la entrada de un proceso puede depender de la salida de otro o los procesos pueden necesitar acceder al mismo tiempo el mismo recurso y necesitar hacerlo de una manera ordenada.