Algoritmos de Dekker

8
Algoritmos de Dekker

description

Descripcion de los algoritmos de Dekker

Transcript of Algoritmos de Dekker

Page 1: Algoritmos de Dekker

Algoritmos de Dekker

Page 2: Algoritmos de Dekker

Algoritmo de DekkerEl algoritmo de Dekker es un algoritmo de programación

concurrente para exclusión mutua, que permite a dos procesos o hilos de ejecución compartir un recurso sin conflictos. Fue uno de los primeros algoritmos de exclusión mutua inventados, implementado por Edsger Dijkstra.

Si ambos procesos intentan acceder a la sección crítica simultáneamente, el algoritmo elige un proceso según una variable turno. Si el otro proceso está ejecutando en su sección crítica, deberá esperar su finalización.

Page 3: Algoritmos de Dekker

Primer algoritmo de Dekker

Repeat Repeat

Hace_Cosas(); Hace_Algo();

While turno = 2 Do; While turno = 1 Do;

REGION_CRITICA(); REGION_CRITICA();

turno = 2; turno = 1;

Hace_mas_cosas(); Hace_algo_mas();

Until Fin Until Fin

PROCESO UNO PROCESO DOS

PROGRAMA UNO;Variables turno: Entero;Inicialización turno = 1;

La variable turno obliga a que los procesos tengan que alternar turnos de

acceso a la RC, si existen procesos lentos y rápidos se tiene el problema que

los procesos lentos atrasen a los procesos rápidos, por

lo que se presenta el problema de

SINCRONIZACIÓN FORZADA.

Page 4: Algoritmos de Dekker

Segundo algoritmo de Dekker

Repeat Repeat

Hace_Cosas(); Hace_Cosas();

P1QE = true; P2QE = true;

While P2QE Do; While P1QE Do;

REGION_CRITICA(); REGION_CRITICA();

P1QE = False; P2QE = False;

Hace_mas_cosas(); Hace_mas_cosas();

Until Fin Until Fin

PROCESO UNO PROCESO DOS

PROGRAMA DOS;Variables P1QE, P2QE: Bool;Inicialización P1QE = false; P2QE = false;

Si el Quantum de tiempo de los procesos finaliza

precisamente después del cambio de la variable

P#QE, pero antes de la validación del While, puede

darse que las dos condiciones sean

verdaderas y los procesos se queden en un ciclo

infinito, a este problema se le conoce como

INTERBLOQUEO.

Page 5: Algoritmos de Dekker

Tercer algoritmo de Dekker

Repeat Repeat

Hace_Cosas(); Hace_Cosas();

While P2A Do; While P1A Do;

P1A = true; P2A = true;

REGION_CRITICA(); REGION_CRITICA();

P1A = False; P2A = False;

Hace_mas_cosas(); Hace_mas_cosas();

Until Fin Until Fin

PROCESO UNO PROCESO DOS

PROGRAMA TRES;Variables P1A, P2A: Bool;Inicialización P1A = false; P2A = false;

Si el Quantum de tiempo de los procesos finaliza precisamente

después de la validación del While justo cuando ambas banderas tiene como valor “false” , pero antes del cambio en la variable

P#A, puede presentarse el problema que ambos procesos ingresen a la región crítica al mismo tiempo, por lo que este algoritmo NO GARANTIZA

EXCLUSIÓN MUTUA.

Page 6: Algoritmos de Dekker

Cuarto algoritmo de Dekker

Repeat Repeat

Hace_Cosas(); Hace_Cosas();

P1QE = true; P2QE = true;

While P2QE Do Begin P1QE = false; Delay (random()); P1QE = true; end;

While P1QE Do Begin P2QE = false; Delay (random()); P2QE = true; end;

REGION_CRITICA(); REGION_CRITICA();

P1QE = False; P2QE = False;

Hace_mas_cosas(); Hace_mas_cosas();

Until Fin Until Fin

PROCESO UNO PROCESO DOS

PROGRAMA CUATRO;Variables P1QE, P2QE: Bool;Inicialización P1QE = false; P2QE = false;

El utilizar un tiempo random para forzar la salida en el ciclo While

puede ser un tiempo muy largo o corto de

sincronización que podría no darse en el peor de los casos, a este problema se

le conoce como POSTERGACIÓN

INDEFINIDA.

Page 7: Algoritmos de Dekker

Quinto algoritmo de DekkerEl quinto algoritmo de Dekker es la versión optimizada y que no presenta problemas como las cuatro versiones anteriores, para su estructuración se hace una combinación de dos algoritmos de acuerdo al orden de prioridad de desempeño y funcionamiento de las cuatro versiones conocidas.

Criterio:Algoritmo Problema Priorida

d de Uso

Algoritmo Uno Sincronización forzada 1

Algoritmo Cuatro

Postergación Indefinida 2

Algoritmo Dos Interbloqueo 3

Algoritmo Tres No garantiza exclusión mutua

4

Page 8: Algoritmos de Dekker

Quinto algoritmo de Dekker

Repeat Repeat

Hace_Cosas(); Hace_Cosas();

P1QE = true; P2QE = true;

While P2QE Do Begin if(turno = 2) Begin P1QE = false; Delay (random()); P1QE = true; end; end;

While P1QE Do Begin if(turno = 1) Begin P2QE = false; Delay (random()); P2QE = true; end; end;

REGION_CRITICA(); REGION_CRITICA();

turno = 2; P1QE = False;

turno = 1; P2QE = False;

Hace_mas_cosas(); Hace_mas_cosas();

Until Fin Until Fin

PROCESO UNO PROCESO DOS

PROGRAMA CINCO;Variables P1QE, P2QE: Bool; turno: Entero;Inicialización P1QE = false; P2QE = false; turno = 1;

Combinación entre el

algoritmo 1 y algoritmo 4