0% encontró este documento útil (0 votos)
152 vistas6 páginas

Algoritmos de Concurrencia: Dekker y Peterson

Este documento describe dos algoritmos para control de concurrencia: el algoritmo de Dekker y el algoritmo de Peterson. Ambos permiten a dos o más procesos compartir un recurso sin conflictos utilizando variables y memoria compartida.

Cargado por

Adrian
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
152 vistas6 páginas

Algoritmos de Concurrencia: Dekker y Peterson

Este documento describe dos algoritmos para control de concurrencia: el algoritmo de Dekker y el algoritmo de Peterson. Ambos permiten a dos o más procesos compartir un recurso sin conflictos utilizando variables y memoria compartida.

Cargado por

Adrian
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

SISTEMAS OPERACIONALES

TEMA 2: Control de Concurrencia


 Control de Concurrencia
Conceptos y definiciones
Algoritmo de Dekker
Algoritmo de Peterson

Control de Concurrencia:
La concurrencia de procesos se refiere a las situaciones en las que dos o más procesos
puedan coincidir o existen simultáneamente en el acceso a un recurso compartido, que
requieran coordinarse en su ejecución. Para evitar dicha coincidencia, el SO ofrece
mecanismos de arbitraje que permiten coordinar la ejecución de los procesos.
Hay que tener en cuenta que la existencia simultánea no es lo mismo que una ejecución
simultánea.
En la concurrencia hay un caso particular de paralelismo, ocurre cuando se presenta la
ejecución simultánea de instrucciones, necesidad de sincronización y comunicación.
Se presentan dos técnicas de operación en la cooperación entre procesos:
Sistemas multiprogramados con un solo procesador: Cuando los procesos se intercambian
para dar una apariencia de ejecución simultánea.
Sistemas multiprocesador: Antes de intercalarse los procesos se superponen.
Algoritmo de Dekker:
Algoritmo de programación concurrente para exclusión mutua, permite a dos procesos o
hilos de ejecución compartir un recurso sin conflicto.
Cuando dos procesos quieren acceder a la sección critica simultáneamente, el algoritmo
va a elegir un proceso según el orden o turno y el otro proceso debe esperar a que la
finalización del proceso electo.
Existen cinco versiones del algoritmo Dekker, la versión 5 es la que trabaja más
eficientemente, siendo una combinación de la 1 y la 4.

 Versión 1: Alternancia estricta. Garantiza la exclusión mutua, pero su desventaja es


que acopla los procesos fuertemente, esto significa que los procesos lentos atrasan
a los procesos rápidos.
 Versión 2: Problema interbloqueo. No existe la alternancia, aunque ambos
procesos caen a un mismo estado y nunca salen de ahí.
 Versión 3: Colisión región crítica no garantiza la exclusión mutua. Este algoritmo no
evita que dos procesos puedan acceder al mismo tiempo a la región crítica.
 Versión 4: Postergación indefinida. Aunque los procesos no están en interbloqueo,
un proceso o varios se quedan esperando a que suceda un evento que tal vez
nunca suceda
 Versión 5: Algoritmo Óptimo. Combinación de las versiones 1 – 4, donde garantiza
la exclusión mutua, progreso y espera limitada.

Algoritmo:

boolean p1_puede_entrar, p2_puede_entrar;


int turno;
Proceso1() {
while (true) {
[REALIZA_TAREAS_INICIALES]
p1_puede_entrar = true;
while (p2_puede_entrar) {
if (turno == 2) {
p1_puede_entrar = false;
while (turno == 2) {}
p1_puede_entrar = true;
}
}
[REGION_CRITICA]
turno = 2;
p1_puede_entrar = false;
[REALIZA_TAREAS_FINALES]
}
}
Proceso2() {
while (true) {
[REALIZA_TAREAS_INICIALES]
p2_puede_entrar = true;
while (p1_puede_entrar) {
if (turno == 1) {
p2_puede_entrar = false;
while (turno == 1) {}
p2_puede_entrar = true;
}
}
[REGION_CRITICA]
turno = 1;
p2_puede_entrar = false;
[REALIZA_TAREAS_FINALES]
}
}
iniciar () {
p1_puede_entrar = false;
p2_puede_entrar = false;
turno = 1;
Proceso1();
Proceso2();
}

Descripción:
Se realiza las tareas iniciales, luego se verifica si hay otro procesos que puede entrar, si lo
hay se entra al ciclo y si es el turno de algún otro proceso (línea rojo) cambia su estado a
no poder entrar a la sección crítica y nuevamente verifica si es el turno de algún otro
proceso (línea verde) si lo es se queda en el ciclo hasta que se da un cambio de turno,
luego retoma su estado de poder entrar a la sección critica, regresa al ciclo y verifica si hay
otro proceso que puede entrar entonces nuevamente entra al ciclo, de lo contrario entra a
la sección critica. Al salir de la sección crítica el proceso cambia su turno, cambia su estado
y realiza sus tareas finales. (línea azul)
El algoritmo de dekker es el que da la solución de problemas informáticos donde permite
utilizar varios procesos en a un mismo recurso.
Algoritmo de Peterson:

esunalgoritmodeprogr
amaciónconcurrentepara
exclusión
mutua,quepermiteados
omásprocesosohilos
deejecucióncompartiru
nrecursosin
conflictos,utilizandosólo
memoriacompartidapara
lacomunicación.
esunalgoritmodeprogr
amaciónconcurrentepara
exclusión
mutua,quepermiteados
omásprocesosohilos
deejecucióncompartiru
nrecursosin
conflictos,utilizandosólo
memoriacompartidapara
lacomunicación.
Es un algoritmo de programación concurrente para exclusión mutua, al igual que el
algoritmo de Dekker, Peterson permite a dos o más procesos o hilos de ejecución
compartir un recurso sin conflicto, utilizando sólo memoria compartida para la
comunicación.
Peterson ha desarrollado una solución simple y elegante. Declarando la variable global
señal para indicar la posición de cada proceso con respecto a la exclusión mutua y la
variable global turno resuelve los conflictos de simultaneidad.
Algoritmo:
boolean bandera[0] = 0;
boolean bandera[1] = 0;
int turno = 0;
p0() {
bandera[0] = 1;
turno = 1;
while (bandera[1] && turno == 1) {
//nada
//sección crítica
//fin de la sección crítica
}
bandera [0] = 0;
}
p1() {
bandera[1] = 1;
turno = 0;
while (bandera[0] && turno == 0) {
//nada
//sección crítica
//fin de la sección crítica
}
bandera[1] = 0;
}

Descripción:
Se considera el proceso p0, una vez la señal en este caso bandera[0] sea igual a 1, p1 no
puede entrar en su sección crítica. Si p1 sigue en su sección crítica, bandera[1] = 1 y p0
está bloqueado en su bucle while. Esto quiere decir que bandera[1] = 1 y turno = 1, p0
puede entrar en su sección crítica cuando bandera[1] = 0 o turno = 0.

Problema de Exclusión Mutua con Algoritmo de Peterson


Instrucciones:

1. Existen dos procedimientos llamados P1 y P2.

2. Ambos procedimientos deben intercalar su ejecución, ejecutándose una vez en cada


turno, excepto cuando se encuentren en su sección crítica en cuyo caso la acción del
procedimiento en sección crítica deberá ejecutarse con exclusividad.

3. Cada ejecución de P1 tiene como objetivo incrementar en una unidad y mostrar en


pantalla el valor de la variable actualizada.

4. Cada ejecución de P2 tiene como objetivo incrementar en dos unidades y mostrar en


pantalla el valor de la variable actualizada.

5. La sección crítica de P1 dura mientras el valor de la variable está entre 4 y 7. El P1


finaliza cuando la variable alcanza el valor de 10.

6. La sección crítica del P2 dura mientras el valor de la variable está entre 6 y 12. El P2
finaliza cuando la variable alcanza el valor de 16.

7. En caso de que un procedimiento termine antes que otro, el que aún no ha terminado
debe seguirse ejecutando hasta su finalización.

Procedimient
Secuencia de
o Valor P1 Valor P2 Observaciones
ejecución
ejecutándose
1 P1 1 0 Inicia el procedimiento P1
2 P2 1 2 Inicia el procedimiento P2
3 P1 2 2
4 P2 2 4
5 P1 3 4
6 P2 3 6 Inicia sección crítica para P2
7 P2 3 8
8 P2 3 10
9 P2 3 12 Finaliza sección crítica para P2
10 P1 4 12 Inicia sección crítica para P1
11 P1 5 12
12 P1 6 12
13 P1 7 12 Finaliza sección crítica para P1
14 P2 7 14
15 P1 8 14
16 P2 8 16 Finaliza el procedimiento P2
17 P1 9 16
18 P1 10 16 Finaliza el procedimiento P1

También podría gustarte