4.1Exclusión mutua, región crítica y sincronización …hilario_sm/slide/pcp2016/unidad...

Preview:

Citation preview

4.1Exclusión mutua, región crítica y sincronización con hilos

4.1.1 Alternancia 4.1.2 Falta de exclusión 4.1.3 Interbloqueo 4.1.4 Espera infinita 4.1.5 Algoritmo de Dijkstra4.1.6 Algoritmo de Dekker4.1.7 Algoritmo de Peterson 4.2

4.2 Monitores, Paso de mensajes

Sección crítica

Se denomina sección crítica, en programación concurrente, a laporción de código de un programa de ordenador en la que se accede aun recurso compartido (estructura de datos o dispositivo) que no debeser accedido por más de un proceso o hilo en ejecución.

Metodos que NO cumplen las 4 condiciones de Exclusion Mutua• Desactivación de interrupciones

• Variables de Cerradura:

• Alternancia estricta.

Métodos que cumplen con las 4 condiciones de la Exclusión Mutua

Algoritmo de Dijkstra

SEMÁFOROS• Dijkstra dio en 1968 una solución al problema de la exclusión mutua con la introducción del

concepto de semáforo binario. Está técnica permite resolver la mayoría de los problemas desincronización entre procesos y forma parte del diseño de muchos sistemas operativos y de

lenguajes de programación concurrentes.

• La exclusión mutua se realiza fácilmente utilizando semáforos. La operación de espera se usarácomo procedimiento de bloqueo antes de acceder a una sección crítica y la operación señal comoprocedimiento de desbloqueo. Se utilizarán tantos semáforos como clases de secciones críticas seestablezcan. El proceso P1 de la sección anterior ahora toma la forma:

Semáforos

Algoritmo de Dekker• El 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 de turno. Si el otro proceso está ejecutando en su sección crítica, deberá esperar su finalización.

• Existen cinco versiones del algoritmo Dekker, teniendo ciertos fallos los primeros cuatro. La versión 5 es la que trabaja más eficientemente, siendo una combinación de la 1 y la 4.

Tercer algoritmoColisión región crítica no garantiza la exclusión mutua. Este algoritmo no evita que dos procesos puedanacceder al mismo tiempo a la región crítica.

Cuarto algoritmoPostergació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.

Quinto Algoritmo

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

Algoritmo de PetersonEl algoritmo de Peterson, también conocido como solución de Peterson,1 es un algoritmo de programación concurrente para exclusión mutua, que permite a dos o más procesos o hilos de ejecución compartir un recurso sin conflictos, utilizando sólo memoria compartida para la comunicación.

Peterson desarrolló en 1981 el algoritmo básico para dos procesos,2 como una simplificación del algoritmo de Dekker. El algoritmo básico puede generalizarse fácilmente a un número arbitrario de procesos.

Los procesos p0 y p1 no pueden estar en la sección crítica al mismo tiempo: si p0 está en la sección crítica,

entonces bandera[0] = true, y ocurre que bandera[1] = false, con lo que p1 ha terminado la sección crítica, o que la

variable compartida turno = 0, con lo que p1 está esperando para entrar a la sección crítica. En ambos casos, p1

no puede estar en la sección crítica.