fbpx
Wikipedia

Bloqueo mutuo

En sistemas operativos, el bloqueo mutuo (también conocido como interbloqueo, traba mortal, deadlock, abrazo mortal) es el bloqueo permanente de un conjunto de procesos o hilos de ejecución en un sistema concurrente que compiten por recursos del sistema o bien se comunican entre ellos.[1]​ A diferencia de otros problemas de concurrencia de procesos, no existe una solución general para los interbloqueos.

Cuatro procesos (líneas azules) compiten por un recurso (círculo gris), siguiendo una política de derecha-antes que-izquierda. Un bloqueo mutuo aparece cuando todos los procesos bloquean el recurso simultáneamente (líneas negras). El bloqueo puede resolverse rompiendo la simetría.

Todos los interbloqueos surgen de necesidades que no pueden ser satisfechas, por parte de dos o más procesos. En la vida real, un ejemplo puede ser el de dos niños que intentan jugar al arco y flecha, uno toma el arco, el otro la flecha. Ninguno puede jugar hasta que alguno libere lo que tomó.

En el siguiente ejemplo, dos procesos compiten por dos recursos que necesitan para funcionar, que solo pueden ser utilizados por un proceso a la vez. El primer proceso obtiene el permiso de utilizar uno de los recursos (adquiere el lock sobre ese recurso). El segundo proceso toma el lock del otro recurso, y luego intenta utilizar el recurso ya utilizado por el primer proceso, por lo tanto queda en espera. Cuando el primer proceso a su vez intenta utilizar el otro recurso, se produce un interbloqueo, donde los dos procesos esperan la liberación del recurso que utiliza el otro proceso.

Representación de Bloqueos Mutuos usando grafos

 

El Bloqueo mutuo también puede ser representado usando grafos dirigidos, donde el proceso es representado por un cuadrado y el recurso, por un círculo. Cuando un proceso solicita un recurso, una flecha es dirigida desde el proceso al recurso. En cambio, cuando un recurso está asignado a un proceso, una flecha es dirigida del recurso al proceso.[2]

En la figura del ejemplo, se pueden ver dos procesos diferentes (A y B), cada uno con un recurso diferente asignado (R1 y R2). En este ejemplo clásico de bloqueo mutuo, es fácilmente visible la condición de espera circular en la que los procesos se encuentran, donde cada uno solicita un recurso que está asignado a otro proceso.

Condiciones necesarias

También conocidas como condiciones de Coffman por su primera descripción en 1971 en un artículo escrito por E. G. Coffman.[3]

Estas condiciones deben cumplirse simultáneamente y no son totalmente independientes entre ellas.

Sean los procesos P0, P1, ..., Pn y los recursos R0, R1, ..., Rm:

  • Condición de exclusión mutua: existencia de al menos un recurso compartido por los procesos, al cual solo puede acceder uno simultáneamente.
  • Condición de retención y espera: al menos un proceso Pi ha adquirido un recurso Ri, y lo retiene mientras espera al menos un recurso Rj que ya ha sido asignado a otro proceso.
  • Condición de no expropiación: los recursos no pueden ser expropiados por los procesos, es decir, los recursos solo podrán ser liberados voluntariamente por sus propietarios (el sistema operativo no puede quitarle un recurso al proceso).
  • Condición de espera circular: dado el conjunto de procesos P0...Pm(subconjunto del total de procesos original),P0 está esperando un recurso adquirido por P1, que está esperando un recurso adquirido por P2,... ,que está esperando un recurso adquirido por Pm, que está esperando un recurso adquirido por P0. Esta condición implica la condición de retención y espera.

Evitando bloqueos mutuos

Los bloqueos mutuos pueden ser evitados si se sabe cierta información sobre los procesos antes de la asignación de recursos. Para cada petición de recursos, el sistema controla si satisfaciendo el pedido entra en un estado inseguro, donde puede producirse un bloqueo mutuo. De esta forma, el sistema satisface los pedidos de recursos solamente si se asegura que quedará en un estado seguro. Para que el sistema sea capaz de decidir si el siguiente estado será seguro o inseguro, debe saber por adelantado y en cualquier momento el número y tipo de todos los recursos en existencia, disponibles y requeridos. Existen varios algoritmos para evitar bloqueos mutuos:

Prevención

Los bloqueos mutuos pueden prevenirse asegurando que no suceda alguna de las condiciones necesarias vistas anteriormente.

  • Eliminando la exclusión mutua: ningún proceso puede tener acceso exclusivo a un recurso. Esto es imposible para procesos que no pueden ser encolados (puestos en un spool), e incluso con colas también pueden ocurrir interbloqueos.
  • La condición de posesión y espera puede ser eliminada haciendo que los procesos pidan todos los recursos que van a necesitar antes de empezar. Este conocimiento por adelantado muchas veces es imposible nuevamente. Otra forma es requerir a los procesos liberar todos sus recursos antes de pedir todos los recursos que necesitan. Esto también es poco práctico en general.
  • La condición de no expropiación puede ser también imposible de eliminar dado que un proceso debe poder tener un recurso por un cierto tiempo o el procesamiento puede quedar inconsistente.
  • La condición de espera circular es la más fácil de atacar. Se le permite a un proceso poseer solo un recurso en un determinado momento, o una jerarquía puede ser impuesta de modo tal que los ciclos de espera no sean posibles.

Livelock

Un livelock es similar a un deadlock, excepto que el estado de los dos procesos envueltos en el livelock constantemente cambia con respecto al otro. Livelock es una forma de inanición y la definición general solo dice que un proceso específico no está procesando.

En un ejemplo del mundo real, un livelock ocurre por ejemplo cuando dos personas, al encontrarse en un pasillo angosto avanzando en sentidos opuestos, y cada una trata de ser amable moviéndose a un lado para dejar a la otra persona pasar, pero terminan moviéndose de lado a lado sin tener ningún progreso, pues ambos se mueven hacia el mismo lado, al mismo tiempo.

Livelock es un riesgo con algunos algoritmos que detectan y recuperan los interbloqueos, pues si más de uno toma cartas en el asunto, la detección del interbloqueo puede ser disparada continuamente; pudiendo ser arreglado asegurándose que solo un proceso (escogido al azar o por prioridad) tome acción.

Referencias

  1. Coulouris, George (2012). Distributed Systems Concepts and Design (en inglés). Pearson. p. 716. ISBN 978-0-273-76059-7. 
  2. Stallings, William. «6». Operating Systems: Internals and Design Principles. 
  3. Coffman, Edward G., Jr.; Elphick, Michael J.; Shoshani, Arie. «"System Deadlocks» (en inglés). Consultado el 28 de noviembre de 2016. 
  •   Datos: Q623276

bloqueo, mutuo, este, artículo, sección, necesita, referencias, aparezcan, publicación, acreditada, este, aviso, puesto, febrero, 2014, sistemas, operativos, bloqueo, mutuo, también, conocido, como, interbloqueo, traba, mortal, deadlock, abrazo, mortal, bloque. Este articulo o seccion necesita referencias que aparezcan en una publicacion acreditada Este aviso fue puesto el 27 de febrero de 2014 En sistemas operativos el bloqueo mutuo tambien conocido como interbloqueo traba mortal deadlock abrazo mortal es el bloqueo permanente de un conjunto de procesos o hilos de ejecucion en un sistema concurrente que compiten por recursos del sistema o bien se comunican entre ellos 1 A diferencia de otros problemas de concurrencia de procesos no existe una solucion general para los interbloqueos Cuatro procesos lineas azules compiten por un recurso circulo gris siguiendo una politica de derecha antes que izquierda Un bloqueo mutuo aparece cuando todos los procesos bloquean el recurso simultaneamente lineas negras El bloqueo puede resolverse rompiendo la simetria Todos los interbloqueos surgen de necesidades que no pueden ser satisfechas por parte de dos o mas procesos En la vida real un ejemplo puede ser el de dos ninos que intentan jugar al arco y flecha uno toma el arco el otro la flecha Ninguno puede jugar hasta que alguno libere lo que tomo En el siguiente ejemplo dos procesos compiten por dos recursos que necesitan para funcionar que solo pueden ser utilizados por un proceso a la vez El primer proceso obtiene el permiso de utilizar uno de los recursos adquiere el lock sobre ese recurso El segundo proceso toma el lock del otro recurso y luego intenta utilizar el recurso ya utilizado por el primer proceso por lo tanto queda en espera Cuando el primer proceso a su vez intenta utilizar el otro recurso se produce un interbloqueo donde los dos procesos esperan la liberacion del recurso que utiliza el otro proceso Indice 1 Representacion de Bloqueos Mutuos usando grafos 2 Condiciones necesarias 3 Evitando bloqueos mutuos 4 Prevencion 5 Livelock 6 ReferenciasRepresentacion de Bloqueos Mutuos usando grafos Editar El Bloqueo mutuo tambien puede ser representado usando grafos dirigidos donde el proceso es representado por un cuadrado y el recurso por un circulo Cuando un proceso solicita un recurso una flecha es dirigida desde el proceso al recurso En cambio cuando un recurso esta asignado a un proceso una flecha es dirigida del recurso al proceso 2 En la figura del ejemplo se pueden ver dos procesos diferentes A y B cada uno con un recurso diferente asignado R1 y R2 En este ejemplo clasico de bloqueo mutuo es facilmente visible la condicion de espera circular en la que los procesos se encuentran donde cada uno solicita un recurso que esta asignado a otro proceso Condiciones necesarias EditarTambien conocidas como condiciones de Coffman por su primera descripcion en 1971 en un articulo escrito por E G Coffman 3 Estas condiciones deben cumplirse simultaneamente y no son totalmente independientes entre ellas Sean los procesos P0 P1 Pn y los recursos R0 R1 Rm Condicion de exclusion mutua existencia de al menos un recurso compartido por los procesos al cual solo puede acceder uno simultaneamente Condicion de retencion y espera al menos un proceso Pi ha adquirido un recurso Ri y lo retiene mientras espera al menos un recurso Rj que ya ha sido asignado a otro proceso Condicion de no expropiacion los recursos no pueden ser expropiados por los procesos es decir los recursos solo podran ser liberados voluntariamente por sus propietarios el sistema operativo no puede quitarle un recurso al proceso Condicion de espera circular dado el conjunto de procesos P0 Pm subconjunto del total de procesos original P0 esta esperando un recurso adquirido por P1 que esta esperando un recurso adquirido por P2 que esta esperando un recurso adquirido por Pm que esta esperando un recurso adquirido por P0 Esta condicion implica la condicion de retencion y espera Evitando bloqueos mutuos EditarLos bloqueos mutuos pueden ser evitados si se sabe cierta informacion sobre los procesos antes de la asignacion de recursos Para cada peticion de recursos el sistema controla si satisfaciendo el pedido entra en un estado inseguro donde puede producirse un bloqueo mutuo De esta forma el sistema satisface los pedidos de recursos solamente si se asegura que quedara en un estado seguro Para que el sistema sea capaz de decidir si el siguiente estado sera seguro o inseguro debe saber por adelantado y en cualquier momento el numero y tipo de todos los recursos en existencia disponibles y requeridos Existen varios algoritmos para evitar bloqueos mutuos Algoritmo del banquero introducido por Dijkstra Algoritmo de grafo de asignacion de recursos Algoritmo de solicitud de recursos Prevencion EditarLos bloqueos mutuos pueden prevenirse asegurando que no suceda alguna de las condiciones necesarias vistas anteriormente Eliminando la exclusion mutua ningun proceso puede tener acceso exclusivo a un recurso Esto es imposible para procesos que no pueden ser encolados puestos en un spool e incluso con colas tambien pueden ocurrir interbloqueos La condicion de posesion y espera puede ser eliminada haciendo que los procesos pidan todos los recursos que van a necesitar antes de empezar Este conocimiento por adelantado muchas veces es imposible nuevamente Otra forma es requerir a los procesos liberar todos sus recursos antes de pedir todos los recursos que necesitan Esto tambien es poco practico en general La condicion de no expropiacion puede ser tambien imposible de eliminar dado que un proceso debe poder tener un recurso por un cierto tiempo o el procesamiento puede quedar inconsistente La condicion de espera circular es la mas facil de atacar Se le permite a un proceso poseer solo un recurso en un determinado momento o una jerarquia puede ser impuesta de modo tal que los ciclos de espera no sean posibles Livelock EditarUn livelock es similar a un deadlock excepto que el estado de los dos procesos envueltos en el livelock constantemente cambia con respecto al otro Livelock es una forma de inanicion y la definicion general solo dice que un proceso especifico no esta procesando En un ejemplo del mundo real un livelock ocurre por ejemplo cuando dos personas al encontrarse en un pasillo angosto avanzando en sentidos opuestos y cada una trata de ser amable moviendose a un lado para dejar a la otra persona pasar pero terminan moviendose de lado a lado sin tener ningun progreso pues ambos se mueven hacia el mismo lado al mismo tiempo Livelock es un riesgo con algunos algoritmos que detectan y recuperan los interbloqueos pues si mas de uno toma cartas en el asunto la deteccion del interbloqueo puede ser disparada continuamente pudiendo ser arreglado asegurandose que solo un proceso escogido al azar o por prioridad tome accion Referencias Editar Coulouris George 2012 Distributed Systems Concepts and Design en ingles Pearson p 716 ISBN 978 0 273 76059 7 Stallings William 6 Operating Systems Internals and Design Principles Coffman Edward G Jr Elphick Michael J Shoshani Arie System Deadlocks en ingles Consultado el 28 de noviembre de 2016 Datos Q623276 Obtenido de https es wikipedia org w index php title Bloqueo mutuo amp oldid 139798365, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos