Asignatura: Sistemas Operativos SOLUCIONES POR SOFTWARE Pueden implementarse soluciones de software para los procesos concurrentes que ejecuten en mquinas monoprocesador o multiprocesador con una memoria principal compartida. Normalmente, estas soluciones suponen que existe una exclusin mutua elemental en el acceso a memoria. Algoritmo Dekker Dijkstra present un algoritmo de exclusin mutua para dos procesos que dise el matemtico holands Dekker. Segn Dijkstra, la solucin se desarrolla por etapas. Este mtodo tiene la ventaja de ilustrar la mayora de los errores habituales que se producen en la construccin de programas concurrentes. Primer Intento Cualquier intento de exclusin mutua debe depender de algunos mecanismos bsicos de exclusin en el hardware. El ms habitual es la restriccin de que solo se puede realizar un acceso a una posicin memoria en cada instante. Primer Intento: Protocolo del Iglu Tanto la entrada como el mismo igl son tan pequeos que solo puede entrar una persona a la vez en el igl. Dentro, hay una pizarra en la que se puede escribir un nico valor.
Descripcin del Protocolo Un proceso (P0 P1) que desee ejecutar su seccin crtica entra primero en el igl y examina la pizarra. Si su nmero est escrito en ella, el proceso puede abandonar el igl y continuar con su seccin critica. En otro caso, abandona el igl y se ve obligado a esperar. De vez en cuando, el proceso vuelve a entrar en el igl para mirar la pizarra. Esta operacin la repite hasta que se le permite entrar en su seccin crtica. Este procedimiento se denomina espera activa porque un proceso frustrado no puede hacer nada productivo hasta que obtiene permiso para entrar en su seccin crtica. Los programas quedaran as: Inconvenientes en esta solucin Los procesos deben alternarse de forma estricta en el uso de sus secciones crticas; as pues, el ritmo de ejecucin viene dictado por el ms lento. Si P0 usa su seccin crtica solo una vez por hora, pero P1 quiere usarla con una tasa de 1000 veces por hora, P1 est obligado a adoptar el ritmo de P0.
Inconvenientes en esta solucin
2. Un problema mucho ms serio es que si un proceso falla (por ejemplo, se lo come un oso polar en su camino hacia el igl), el otro proceso se bloquea permanentemente. Esto es cierto tanto si un proceso falla en su seccin critica como fuera de ella.
Segundo Intento En realidad, cada proceso debera tener su propia llave de la seccin crtica para que, si un oso polar elimina a uno de ellos, el otro pueda seguir accediendo a su seccin crtica. Segundo Intento: Protocolo del Iglu Cada proceso tiene ahora su propio igl y puede mirar la pizarra del otro, pero no modificarla. Cuando un proceso desea entrar en su seccin critica, comprueba peridicamente la pizarra del otro hasta que encuentra escrito en ella falso, lo que indica que el otro proceso no est en su seccin crtica. Entonces, se dirige rpidamente hacia su propio igl, entra y escribe cierto en la pizarra. El proceso puede ahora continuar con su seccin crtica. Cuando deja su seccin crtica, cambia su pizarra para que ponga falso. Los programas quedaran as: Anlisis del Caso Si uno de los procesos falla fuera de la seccin crtica, incluyendo el cdigo para dar valor a las seales, el otro proceso no se queda bloqueado. El otro proceso puede entrar en su seccin crtica tantas veces como quiera, porque la seal del otro proceso est siempre puesta a falso. Sin embargo, si un proceso falla en su seccin crtica, el otro proceso est bloqueado permanentemente. Anlisis de la Secuencia P0 ejecuta la sentencia while y encuentra seal [1] a falso. P1 ejecuta la sentencia while y encuentra seal [0] a falso. P0 pone seal [0] a cierto y entra en su seccin crtica. P1 pone seal [1] a cierto y entra en su seccin crtica. Tercer Intento: Realizando un cambio al cdigo Anlisis del Caso Una vez que P0 ha puesto seal a cierto, P1 no puede entrar a su seccin critica hasta que P0 haya entrado y abandonado la suya. Puede ser que P1 est todava en su seccin crtica cuando P0 activa su seal. En ese caso, P0 se bloquear en la sentencia while hasta que P1 deje su seccin critica. El mismo razonamiento es aplicable desde el punto de vista de P1. Problema que se genera Se garantiza la Exclusin Mutua, pero si ambos procesos ponen sus seales a cierto antes de que ambos hayan ejecutado la sentencia while, cada uno pensar que el otro ha entrado en su seccin critica. El resultado es un interbloqueo. Cuarto Intento En el tercer intento, un proceso fijaba su estado sin conocer el estado del otro. Se puede intentar arreglar esto haciendo que los procesos sean ms educados: Deben activar su seal para indicar que desean entrar en la seccin crtica, pero deben estar listos para desactivar la seal y ceder la preferencia al otro proceso: Cuarto Intento: Cdigo Anlisis de la Secuencia P0 pone seal [0] a cierto. P1 pone seal [1] a cierto. P0 comprueba seal [1]. P1 comprueba seal [0] P0 pone seal [0] a falso P1 pone seal [1] a falso P0 pone seal [0] a cierto P1 pone seal [1] a cierto Solucin Correcta De algn modo, se hace necesario imponer algn orden en la actividad de los dos procesos para evitar el problema de cortesa mutua que se acaba de observar. La variable turno del primer intento puede usarse en esta labor; en este caso, la variable indica qu proceso tiene prioridad para exigir la entrada a la seccin critica. Anlisis Paso a Paso Ahora hay un igl rbitro con una pizarra llamada tumo. Cuando P0 quiere entrar en su seccin critica, pone su seal a cierto. A continuacin, va y mira la seal de P1. Si est puesta a falso, P0 puede entrar inmediatamente en su seccin crtica. En otro caso, P0 va a consultar al rbitro. Si encuentra el turno = 0, sabe que es momento de insistir y comprueba peridicamente el igl de P1. Este otro se percatar en algn momento de que es momento de ceder y escribir falso en su pizarra, permitiendo continuar a P0. Despus de que P0 haya ejecutado su seccin crtica, pone su seal a falso para liberar la seccin crtica y pone turno a 1 para traspasar el derecho de insistir a P1. Algoritmo Dekker Algoritmo Peterson: Sln Simple y Elegante. Considrese el proceso P0. Una vez que ha puesto seal [0] a cierto P1 no puede entrar en su seccin critica. Si P1 est an en su seccin critica, seal [1] = cierto y P0 est bloqueado para entrar en su seccin crtica. Algoritmo Peterson MUCHAS GRACIAS