EXCLUSIÓN MUTUA Definición: Exclusión Mutua es la comunicación requerida entre dos o más procesos que se están ejecutando en paralelo y que necesitan a la vez el uso de un recurso no compartible. Consiste en asignar el recurso no compartible a sólo uno de los procesos, mientras que los otros deben permanecer a la espera hasta que finalice la utilización de dicho recurso por el proceso al que se le asigno. Cuando este proceso termine, el recurso será asignado a uno de los procesos en espera. Se asegura el correcto uso del recurso. Requisitos para la Exclusión Mutua Los recursos no compartibles, ya sean periféricos, ficheros, o datos en memoria, pueden protegerse del acceso simultáneo por parte de varios procesos evitando que éstos ejecuten de forma concurrente sus fragmentos de código a través de los cuales llevan a cabo este acceso. Estos trozos de código reciben el nombre de secciones o regiones críticas, pudiéndose asimilar el concepto de exclusión mutua en el uso de estos recursos a la idea de exclusión mutua en la ejecución de las secciones críticas. Así, por ejemplo, puede implementarse la exclusión mutua de varios procesos en el acceso a una tabla de datos mediante el recurso de que todas las rutinas que lean o actualicen la tabla se escriban como secciones críticas, de forma que sólo pueda ejecutarse una de ellas a la vez. En el ejemplo previo de la cuenta bancaria los fragmentos de código a1a2a3 y b1b2b3 constituyen dos secciones críticas mutuamente excluyentes, esto significa que una vez que se ha comenzado la ejecución de una sección crítica, no se puede entrar en otra sección crítica mutuamente excluyente. Idear soluciones que garanticen la exclusión mutua es uno de los problemas fundamentales de la programación concurrente. Muchas son las alternativas y tipos de mecanismos que se pueden adoptar. A lo largo de este tema veremos diferentes soluciones software y alguna hardware ; unas serán sencillas y otras complejas, algunas requieren la cooperación voluntaria de los procesos y otras que exigen un estricto ajuste a rígidos protocolos. La selección de las operaciones primitivas adecuadas para garantizar la exclusión mutua de las secciones críticas es una decisión primordial en el diseño de un sistema operativo. Al menos, una solución apropiada debería cumplir las cuatro condiciones siguientes: 1. Que no haya en ningún momento dos procesos dentro de sus respectivas secciones críticas. 2. Que no hagan suposiciones a priori sobre las velocidades relativas de los procesos o el número de procesadores disponibles. 3. Que ningún proceso que esté fuera de su sección crítica pueda bloquear a otros. 4. Que ningún proceso tenga que esperar un intervalo de tiempo arbitrariamente grande para entrar en su sección crítica. SINCRONIZACIÓN. Definición: Sincronización es la comunicación requerida entre dos o más procesos con el fin de sincronizar sus actividades. Gráficamente: Un proceso, P1, llegado a un punto T, no puede proseguir su ejecución hasta que otro proceso, P2, haya llegado a otro punto, Q, de su ejecución. Sobre los procesos cooperantes: � Pueden compartir espacios de direcciones o datos a través de un archivo. � Problema a considerar: � Como evitar la inconsistencia de los datos compartidos � Como acceder a espacios critico de código compartido. Alternativas de sincronización � Semáforos � Monitores � Paso de mensajes Interbloqueos (Deadlocks) Concepto de interbloqueo. Inanición de procesos. Definición: Un proceso esta interbloqueado si está esperando por un evento determinado que nunca va a ocurrir. Interbloqueo entre dos procesos por el uso de recursos no compartibles (abrazo mortal) Postergación indefinida (inanición o Lockout): cuando un proceso espera por un evento que puede ocurrir pero no se sabe cuando. Condiciones necesarias para que se produzca Coffman, Elphick y Shoshani establecieron las cuatro condición necesarias para que se produzca interbloqueo: 1. Condición de exclusión mutua: los procesos reclaman control exclusivo de los recursos que piden. 2. Condición de esperar por: los procesos mantienen los recursos que ya les han sido asignados mientras esperan por recursos adicionales. 3. Condición de no apropiatividad: los recursos no pueden ser extraídos de los procesos que los tienen hasta su completa utilización. 4. Condición de espera circular: 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. Condiciones necesarias para que se produzca Puntos de estudio del interbloqueo: A. Prevención del interbloqueo: condiciona al sistema para que elimine toda posibilidad de que se produzca interbloqueo. Estrategias: � Negar la condición de esperar por: cada proceso debe pedir todos los recursos que va a necesitar de golpe. Si el conjunto de todos ellos está disponible, se le asigna todos. Si no esta disponible todo el conjunto completo, no se le asigna ninguno al proceso y tendrá que esperar hasta que estén todos disponibles. � Negar la condición de no apropiatividad: cuando un proceso que tiene recursos le es negada una petición de recursos adicionales, deberá liberar sus recursos y, si es necesario, pedirlos de nuevo junto con los recursos adicionales. � Negar la condición de espera circular: cuando se instala un recurso se le asigna un número exclusivo, de forma que los procesos deben de solicitar los recursos en orden ascendente de acuerdo a los números asignados a dichos recursos. livelock 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. A diferencia de otros problemas de concurrencia de procesos, no existe una solución general para los interbloqueos. 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 cuatro autos que se encuentran en una intersección en el mismo momento. Cada uno necesita que otro se mueva para poder continuar su camino, y ninguno puede continuar. Los recursos compartidos en este caso son los cuatro cuadrantes. El auto que se dirige de oeste a este, por ejemplo, necesita de los cuadrantes suroeste y sureste. 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 sólo 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 deadlock, pues si más de uno toma cartas en el asunto, la detección del deadlock puede ser disparada continuamente; pudiendo ser arreglado asegurándose que sólo un proceso (escogido al azar o por prioridad) tome acción. También conocidas como condiciones de Coffman por su primera descripción en 1971 en un artículo escrito por E.G.Coffman. Estas condiciones deben cumplirse simultáneamente y no son totalmente independientes una de otra. Sean los procesos Po, P1,.. Pn y los recursos Ro, R1,..., Rm: Condición de exclusión mutua: Existencia al menos de un recurso compartido por los procesos, al cual sólo puede acceder uno simultáneamente. Condición de Posesión y espera: Al menos un proceso Pi ha adquirido un recurso Ri, y lo mantiene 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 apropiados por los procesos, es decir, los recursos sólo podrán ser liberados voluntariamente por sus propietarios. Condición de espera circular: Dado el conjunto de procesos P0...Pn, P0 está esperando un recurso adquirido por P1, que está esperando un recurso adquirido por P2, que...,que está esperando un recurso adquirido por Pn, que está esperando un recurso adquirido por P0. Esta condición implica la condición de retención y espera.