En esta práctica implementamos el algoritmo de
Dekker, en el que se da una solucion al problema en el que dos sucesos
llegan a la vez a la memoria (sección crítica), o desean
entrar en ella.
Es un algoritmo de espera activa que regula la entrada de dos procesos,
en este caso el proceso padre y el proceso hijo, mediante tres variables
:
-"turno"
-"c_padre"
-"c_hijo" (la
c de c_padre y c_hijo, para que concuerde con el Algoritmo
de Dekker).
No es muy eficaz porque consume recursos y CPU. Hay otros métodos,
como por ejemplo los semaforos, que duemen a los procesos y estos sólo
consumen memoria.
Nosotros hemos implementado el Algoritmo de Dekker en
un programa
en C en el que 2 procesos (el padre y el hijo) compiten por un recurso.
El proceso padre decrementa el recurso en 5 unidades cada vez que accede
al mismo, y el hijo lo incrementa en 5 unidades. Ambos acceden al recurso
1000 veces, y éste inicialmente vale 0. Por tanto, es de esperar
que si el algoritmo funciona bien, que al cabo de las 1000 iteraciones
el recurso deberá valer 0. Así ocurre en nuestro programa.
Hemos hecho un estudio del tiempo medio de usuario que emplea nuestro programa
al variar el número de iteraciones, y obtenemos:
Vemos que, salvo en los primeros valores, los tiempos de
usuario se ajustan más o menos a una recta, es decir, que el tiempo
de usuario crece linealmente con el número de iteraciones.
Susana Villalba Merino
David Conde del Río