sábado, 18 de diciembre de 2010

Algoritmo de Dekker #1 Alternancia Estricta


En el curso de sistemas operativos 1, se estudian las soluciones al problema de la exclusión mutua por software, uno de los temas es el algoritmo de Dekker y sus diferentes versiones, que buscan coordinar el acceso a un recurso compartido (o región critica) por un grupo de procesos, garantizando la exclusión mutua entre dichos procesos al usar el recurso.

el primer intento del algoritmo de dekker es conocido como de "alternancia estricta" o "sincronizacion forzada" básicamente porque cada uno de los procesos tiene asignado un turno, y el algoritmo para coordinarlos solo hace cambiar el turno uno por uno, y luego vuelve a iniciar. esta forma de solucionar el problema garantiza la exclusión mutua pero introduce una fuerte dependencia entre los procesos, si un proceso usa el recurso a intervalos grandes, cuando su turno llega, los demás procesos deben esperar, por lo que los procesos lentos, retrasan a los procesos rápidos.

en este ejemplo, he implementado de forma simple el algoritmo #1 de dekker para N procesos, en java usando JDeveloper, como una aplicación en consola con un numero parametrizable de threads se coordinan para obtener un identificador único que es un numero correlativo, representado por una variable compartida.



Descargar Codigo Fuente