Implementing the Voluntary Retirement Programme in the Public Sector of Morocco
2. The Innovation: Version One – The Voluntary Retirement Programme
Introducción
De forma general, un recurso hardware o software se puede clasificar en:
• Recurso reutilizable, como archivos, semáforos, y elementos hardware. Una instancia de un recurso reutilizable sólo puede asignarse a un proceso como máximo. Sólo cuando un proceso finaliza el uso de de una instancia de un recurso reutilizable puede ser usada por otro. Los recursos hardware son reutilizables.
• Recurso consumible, como buffers de entrada/salida y mensajes. Estos recursos pueden crearse y posteriormente consumirse (destruirse).
Definición y condiciones del interbloqueo
De forma general puede definirse como aquella situación en la que un conjunto de procesos está bloqueado en espera de la liberación de uno o varios recursos que se encuentran asignados a otros procesos del mismo conjunto.
Para que se produzca el interbloqueo es necesario que se produzcan cuatro condiciones:
1. Exclusión mutua, por la que cada instancia de un recurso solo puede ser asignada a un proceso como máximo.
2. Retención y espera. Cada proceso retiene los recursos asignados mientras espera adquirir otros que necesita.
3. No existencia de expropiación. Si un proceso posee un recurso, no se le puede expropiar. 4. Espera circular, en la que una cadena de procesos se encuentra uno esperando la liberación
de un recurso que posee el siguiente en la cadena y el último espera por el primero. Tres son las principales estrategias para el tratamiento de los interbloqueos:
1. Prevención de interbloqueos, impidiendo que alguna de las cuatro condiciones anteriores llegue a producirse.
2. Evitación de interbloqueos, examinando las consecuencias de asignar los recuros antes de hacerlo.
3. Detección y recuperación de interbloqueos, comprobando cada cierto tiempo la existencia de interbloqueos y actuando para eliminarlos de haberse producido.
Grafos de asignación de recursos
Un grafo de asignación de recursos puede utilizarse para detectar la presencia de interbloqueos, suponiendo que las condiciones de exclusión mutua y no expropiación ya se cumplen. Con los grafos se comprueba si existe condiciones de retención y espera y espera circular.
Si el grafo no contiene ningún camino que sea un ciclo puede garantizarse la no existencia de interbloqueos. Si aun habiendo un ciclo alguno de los recursos dispone de más de una instancia y esa instancia no forma parte de otro ciclo no existe interbloqueo.
Cada proceso se representa con un cículo y cada recurso con un cuadrado. Cada instancia de un recurso se representa con un punto dentro del cuadrado. Si un proceso ha solicitado un recurso y se encuentra bloqueado se representa una flecha que sale del proceso hacia el recurso. Si un proceso tiene asignada una instancia de un recurso se representa una flecha desde la instancia del recurso hasta el proceso.
Prevención de interbloqueos
Esta estrategia persigue eliminar alguna de las cuatro condiciones necesarias para la existencia de interbloqueos.
Eliminación de la condición de exclusión mutua
Esta condición no puede eliminarse en recursos compartidos si se quiere garantizar la integridad y no corrupción.
Eliminación de la condición de retención y espera
Puede eliminarse haciendo que un proceso solicite al mismo tiempo todos los recursos que precisa, no concediéndoselos si alguno no se encuentra disponible. Requiere el previo conocimiento de las necesidades. Puede degradar el rendimiento del sistema o provocar inanición si un proceso retiene un recurso y otros esperan a obtenerlo. Los recursos pueden verse infrautilizados.
Eliminación de la no existencia de expropiación
La expropiación solo es posible si el sistema puede salvar el estado en que se encuentra antes de la expropiación para poder restaurarlo al mismo estado una vez devuelto. Aumenta la sobrecarga del sistema.
Eliminación de la espera circular
Puede eliminarse asignando un número a cada recurso y obligando a que los procesos sólo puedan solicitar los recursos en orden ascendente. La principal desventaja es que los recursos deben ser solicitados en ese orden y no cuando realmente se necesiten.
Evitación de interbloqeos
Consiste en conceder sólo aquellas peticiones de recursos que tengan garantizado que no conducirán a un estado de interbloqueo.
Un proceso debe especificar por adelantado todos los recursos que va a necesitar. Después, los va solicitando conforme los va necesitando. Si la concesión es segura, no conduce a interbloqueo, se realiza.
El sistema operativo debe llevar la cuenta de los recursos disponibles, el número de recursos asignados a cada proceso y el número de recursos que restan por asignar. Además comprueba que la asignación es segura.
Figura 5.1: Grafo de asignación de recursos. Con un ciclo, pero sin interbloqueos.
Estado de la asignación de recursos: estados seguros y estados inseguros.
Se dispone de:
Vector de recursos existentes, RE; cada elemento del vector REn indica la cantidad de instancias n
existentes del recurso R.
Vector de recursos disponibles, RD; donde se indica el número de instancias disponibles del recurso
R.
Matriz N de recursos máximos necesitados por cada proceso. Cada fila corresponde a un proceso y cada columna a un recurso existente en el sistema.
Matriz A de recursos asignados a cada proceso, correspondiendo cada fila a un proceso y cada columna al número de recursos asignados
El estado del sistema con respecto a la asignación de sus recursos en un instante determinado queda definido por los vectores RE, RD y las matrices N y A.
Un estado se dice que es seguro si posibilita al menos una secuencia de asignación de recursos a los procesos que garantiza que estos puedan finalizar sin producirse interbloqueos. Un estado inseguro no ofrece esa garantía, aunque no necesariamente tiene que conducir a un estado de interbloqueo. En la práctica, habría que comprobar que (Ni−Ai)≤RD, esto es, que los recursos necesitados
menos los asignados no superan los recursos disponibles. Ver ejemplos 5.3 y 5.4 en el libro de teoría, páginas 176-179.
Denegación de asignación de recursos: el algoritmo del banquero.
Consiste en no conceder una petición de recurso si esta concesión puede conducir a un estado inseguro.
Este algoritmo asegura que el número de recursos asignados a todos los procesos nunca puede exceder del número de recursos del sistema y que nunca se puede hacer una asignación peligrosa, que conduzca a un estado inseguro. Para ello:
1. Se parte de un estado inicial seguro Sk, con k = 0: Sk = {N, A, RE, RD}
2. Cuando un proceso solicita un recurso se simula su concesión y se crea un estado ficticio S' = {N', A', RE, R'D}
3. Se comprueba si S' es seguro. Si lo es, Sk+1 = S', en caso contrario se deniega la petición y se
bloquea el proceso hasta que se le puedan conceder los recursos. 4. Volver al paso 2.
Denegación de la iniciación de un proceso
Esta técnica consiste en no iniciar un proceso si el número máximo de recursos que va a necesitar durante su ejecución puede conducir a un estado de interbloqueo. Esta técnica no es óptima, ya que supone que todos los procesos van a solicitar simultaneamente todas las instancias de recursos que van a necesitar.
En la práctica se trata de determinar que el proceso p+1 puede iniciar su ejecución si el número máximo de instancias j que necesita sumadas al número máximo de instancias de esos recursos necesitadas por los procesos existentes no superan el número de instancias existentes.
Detección y recuperación de interbloqueos
Esta estrategia consiste en no limitar las asignaciones de recursos a los procesos y comprobar periodicamente si se ha producido algún interbloqueo. En caso afirmativo, se emplea alguna técnica para recuperar el sistema del interbloqueo.
Algoritmos de detección de interbloqueos
El algoritmo de Coffman emplea RE, vector de recursos existentes; RD, vector de recursos
disponibles; A, matriz de recursos asignados a cada proceso; y M, matriz de recursos adicionales necesitados por cada proceso.
Inicialmente todos los procesos están sin marcar y se van marcando aquellos que pueden ser completados. Los procesos marcados no pueden provocar interbloqueo. Si al finalizar el algoritmo queda más de un proceso sin marcar existe interbloqueo.
1. Se marca cada proceso que tenga su fila en A a cero, dado que ese proceso no tiene ningún recurso asignado y, por tanto, no puede producir interbloqueo.
2. Se realiza la asignación X = RD, donde X es un vector auxiliar.
3. Para cada proceso i no marcado se comprueba Mi≤X
4. Si no existe ningún i que cumpla la condición, el algoritmo finaliza. Si existe un proceso i que cumpla la condición se marca el proceso y se ejecuta hasta que finalice y libere los recursos, se realiza X = X + Ai (que incrementa los recursos disponibles con los liberados
por el proceso i) y se vuelve al paso 3.
Frecuencia de invocación del algoritmo de detección de interbloqueos
Invocarlo cada vez que se solicite un recurso aumenta la sobrecarga del sistema. Una solución óptima puede ser invocarlo cada T unidades de tiempo o cuando el nivel de utilización del procesador caiga por debajo de un límite, lo que podría denotar inactividad por existencia de interbloqueo.
Técnicas de recuperación del interbloqueo
• Recuperación mediante expropiación de recursos. Mediante algún criterio de selección se van expropiando recursos a algunos procesos y concediéndoselos a otros para conseguir salir del interbloqueo.
• Recuperación mediante el retroceso de los procesos interbloqueados a algún punto de control previo. En cada punto de control se guarda el contexto de cada proceso. En caso de interbloqueo se restaura el contexto anterior.
• Recuperación mediante aborto selectivo de procesos, estableciendo un criterio para ir abortando procesos (bloqueados o no).
• Recuperación mediante el aborto de todos los procesos bloqueados. La solución más drástica pero la más utilizada.
Ventajas e inconvenientes
La detección y recuperación de interbloqueos permite una mayor concurrencia de procesos ya que no limita el número de asignaciones. Sin embargo, la detección introduce sobrecarga aunque puede limitarse con algoritmos eficaces. La recuperación sí produce elevada sobrecarga y desaprovechamiento de recursos. Es eficaz en sistemas con baja probabilidad de interbloqueos.
Otras estrategias de tratamiento de interbloqueos
• Estrategias mixtas, agrupando los recursos en diferentes clases, ordenando las clases para evitar la espera circular y utilizando para cada clase la estrategia más oportuna.
• Ignorar los interbloqueos. Sistemas como UNIX o Windows no utilizan ninguna estrategia de tratamiento de interbloqueos.