Está en la página 1de 58

Sistemas Concurrentes

y Distribuidos
Exclusión Mutua y Sincronización

Primeras soluciones

sábado 10 de marzo de 12
Problemas en Concurrencia
Cooperación entre procesos
Incertidumbre en la ejecución
Diferentes tiempos de asignación de la
CPU
Competencia entre Recursos
Compartibles
No Compartibles

sábado 10 de marzo de 12
Exclusión Mutua
P1 P2
cálculos cálculos
a1: leer registro b1: leer registro Puede darse la siguiente secuencia:
a2: saldo <- saldo + nómina b2: saldo <- saldo - factura
a3: escribir registro b3: escribir registro a1b1b2b3a2a3
cálculos cálculos

Necesitamos de Primitivas que


garanticen la exclusión mutua
Estas primitivas encapsularán el código
de cada proceso que tiene acceso a la
variable/s compartidas

sábado 10 de marzo de 12
Resolución de la Exclusión
Mutua

Exclusión Mutua: No pueden dos procesos acceder a la vez a la


sección crítica.
Limitación en la Espera: Ningún proceso espera de forma indefinida
para entrar en la sección crítica.
Progreso en la Ejecución: Cuando un proceso quiera ejecutar la
sección crítica puede si está libre.

sábado 10 de marzo de 12
Condición de Sincronización

Propiedad requerida a un proceso para


que no realice un evento hasta que otro
proceso haya una acción determinada.

sábado 10 de marzo de 12
Soluciones para los dos tipos
de sincronización
Inhibición de Interrupciones
Espera ocupada
Semáforos
Regiones críticas
Regiones críticas condicionales
Monitores
Paso de mensajes
Llamadas a procedimiento remoto
Invocaciones remotas

sábado 10 de marzo de 12
Inhibición de Interrupciones

sábado 10 de marzo de 12
Inhibición de Interrupciones

Soluciona el
Problema de la
Exclusión mutua

sábado 10 de marzo de 12
Inhibición de Interrupciones

Soluciona el Problema:
Problema de la Acceso al sistema del
Exclusión mutua Programador

sábado 10 de marzo de 12
Espera Ocupada
Solución Software
Suponemos como operación atómica los accesos a
memoria para leer o escribir
Solución Hardware
Instrucciones especializadas para el acceso a la
información:
Intercambio (exchange)
Incremento/decremento
Instrucción testset

sábado 10 de marzo de 12
Solución Software:
Algoritmos
Algoritmos no eficientes
Algoritmo de Dekker
Algoritmo de Peterson
Algoritmo incorrecto de Hyman
Algoritmo de Eisenberg-McGuire
Algoritmo de Lampor

sábado 10 de marzo de 12
Solución Software:
Algoritmos
Algoritmos no eficientes
Algoritmo de Dekker
Algoritmo de Peterson
Algoritmo incorrecto de Hyman
Algoritmo de Eisenberg-McGuire
Algoritmo de Lampor

sábado 10 de marzo de 12
Solución Software:
Algoritmos
Algoritmos no eficientes
Algoritmo de Dekker
Algoritmo de Peterson
Algoritmo incorrecto de Hyman Comprobar cerrojo
Entrar en sección crítica Si es 0
Protocolo de entrada poner cerroja a 1 y
entrar en SC
Algoritmo de Eisenberg-McGuire Si es 1
Salir de sección crítica
esperar hasta que
Protocolo de salida
Algoritmo de Lampor cerrojo = 0

sábado 10 de marzo de 12
Algoritmos no Eficientes:
Primer Intento

sábado 10 de marzo de 12
Algoritmos no Eficientes:
Primer Intento

sábado 10 de marzo de 12
Algoritmos no Eficientes:
Primer Intento

Falla la exclusión mutua

sábado 10 de marzo de 12
Algoritmos no Eficientes:
Segundo Intento

sábado 10 de marzo de 12
Algoritmos no Eficientes:
Segundo Intento

Alternancia
Falla el progreso en la ejecución

sábado 10 de marzo de 12
Algoritmos no Eficientes:
Tercer Intento

sábado 10 de marzo de 12
Algoritmos no Eficientes:
Tercer Intento

sábado 10 de marzo de 12
Algoritmos no Eficientes:
Tercer Intento

Falla la exclusión mutua

sábado 10 de marzo de 12
Algoritmos no Eficientes:
Cuarto Intento

sábado 10 de marzo de 12
Algoritmos no Eficientes:
Cuarto Intento

Falla progresión en la ejecución:


livelock

sábado 10 de marzo de 12
Algoritmos no Eficientes:
Quinto Intento

sábado 10 de marzo de 12
Algoritmos no Eficientes:
Quinto Intento

Falla la limitación en la espera

sábado 10 de marzo de 12
Algoritmo de Dekker

sábado 10 de marzo de 12
Algoritmo de Dekker

Exclusión Mútua
Limitación en la Espera
Progresión en la Ejecución

sábado 10 de marzo de 12
Algoritmo de Dekker

Exclusión Mútua X
Limitación en la Espera
Progresión en la Ejecución

sábado 10 de marzo de 12
Algoritmo de Dekker

Exclusión Mútua X
Limitación en la Espera X
Progresión en la Ejecución

sábado 10 de marzo de 12
Algoritmo de Dekker

Exclusión Mútua X
Limitación en la Espera X
Progresión en la Ejecución X

sábado 10 de marzo de 12
Algoritmo de Peterson

sábado 10 de marzo de 12
Algoritmo de Peterson

Exclusión Mútua
Limitación en la Espera
Progresión en la Ejecución

sábado 10 de marzo de 12
Algoritmo de Peterson

Exclusión Mútua X
Limitación en la Espera
Progresión en la Ejecución

sábado 10 de marzo de 12
Algoritmo de Peterson

Exclusión Mútua X
Limitación en la Espera X
Progresión en la Ejecución

sábado 10 de marzo de 12
Algoritmo de Peterson

Exclusión Mútua X
Limitación en la Espera X
Progresión en la Ejecución X

sábado 10 de marzo de 12
Algoritmo de Hyman

sábado 10 de marzo de 12
Algoritmo de Hyman

Secuencia incorrecta:
➡turno = 0
➡P1 ejecuta 1.1, 1.2, 1.3 y se para el P1
➡P2 ejecuta 0.1 y 0.2 pasando a 0.5
➡P1 ejecuta 1.4 y alcanza 1.5
Falla en la exclusión mutua

sábado 10 de marzo de 12
Algoritmo de Eisember-McGuire

sábado 10 de marzo de 12
Algoritmo de Eisember-McGuire
Posibles valores:
✓restoproceso
✓quiereentrar
✓enSC

sábado 10 de marzo de 12
Algoritmo de Eisember-McGuire

indice = proceso
que tiene el turno

sábado 10 de marzo de 12
Algoritmo de Eisember-McGuire
1.Comprueba que el que tiene permiso y el
resto están en “restoproceso”.
2.Si alguno no está vuelve a comprobar.
3.Si hay alguno en la sección crítica espera.
4.Hasta que ninguno está enSC y tiene el
turno o el que lo tiene está en “restoproceso”
5.Da turno al primero que no esté en
“restoproceso”. Al primero que quiera entrar,
en otro caso se queda con el turno

sábado 10 de marzo de 12
Algoritmo de Lamport

sábado 10 de marzo de 12
Algoritmo de Lamport

•Algoritmo para entornos distribuidos


•[(a,b)<(c,d)] si [a<c ó (a=c y b<d)]
•max(..) función máximo

sábado 10 de marzo de 12
Algoritmo de Lamport
Está cogiendo número

sábado 10 de marzo de 12
Algoritmo de Lamport

Ha terminado de
coger número

sábado 10 de marzo de 12
Algoritmo de Lamport

sábado 10 de marzo de 12
Solución Hardware:
exchange

sábado 10 de marzo de 12
Solución Hardware:
exchange
exchange(r,m)=intercambia
los valores entre r y m

sábado 10 de marzo de 12
Solución Hardware:
exchange

sábado 10 de marzo de 12
Solución Hardware:
exchange

Problema en la limitación
en la espera

sábado 10 de marzo de 12
Solución Hardware:
decremento/incremento

sábado 10 de marzo de 12
Solución Hardware:
decremento/incremento
subc(r,m) = Decrementa
en 1 m y lo almacena en r

sábado 10 de marzo de 12
Solución Hardware:
decremento/incremento

sábado 10 de marzo de 12
Solución Hardware:
decremento/incremento

Puede incrementarse hasta desbordar


Problema en la limitación en la espera

sábado 10 de marzo de 12
Solución Hardware:
testset

sábado 10 de marzo de 12
Solución Hardware:
testset

testset(m) = Comprueba el valor de m


si es 0, lo cambia por 1 y devuelve
“verdad”. En otro caso no cambia el
valor de m y devuelve “falso”

sábado 10 de marzo de 12
Solución Hardware:
testset

Problema en la limitación de la espera

sábado 10 de marzo de 12
Solución Hardware:
testset

sábado 10 de marzo de 12

También podría gustarte