programación de sistemas concurrentes y distribuidos
TRANSCRIPT
![Page 1: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/1.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 1 Univ. de Zaragoza
Lección 5: Sincronización de procesos mediante semáforos
• Introducción
• Estados de un proceso
• Semáforos: sintaxis y semántica
• Técnicas de programación con semáforos:
– el problema de la sección crítica
– el problema de la barrera
– el caso de productores/consumidores
• Algunos ejercicios sencillos
![Page 2: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/2.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 2 Univ. de Zaragoza
Introducción
• La sincronización por espera activa tiene inconvenientes:
– los algoritmos son difíciles de diseñar y verificar
– se mezclan variables del problema a resolver y del método de resolución
– en los casos de multi-programación, se ocupa innecesariamente el procesador “haciendo nada”
• Los semáforos son una de las primeras soluciones
– son una solución conceptual, que puede implementarse de diferentes formas
– propuestos por Dijkstra en 1968
![Page 3: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/3.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 3 Univ. de Zaragoza
Estados de un proceso
• Para multitarea, y un proceso P, P.state es su estado
![Page 4: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/4.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 4 Univ. de Zaragoza
Estados de un proceso
• Para multitarea, y un proceso P, P.state es su estado
![Page 5: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/5.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 5 Univ. de Zaragoza
Semáforos: sintaxis y semántica
• Semáforo: instancia de un tipo abstracto de dato
– S=(k,L)
• tal que ...
– k es un natural
– L es un conjunto de procesos
• con dos instrucciones atómicas...
– wait
– signal
![Page 6: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/6.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 6 Univ. de Zaragoza
Semáforos: sintaxis y semántica
• Declaración
• Semántica de las operaciones (atómicas) cuando la invoca P:
semaphore S := (S0,{})
if S.V > 0
S.V := S.V - 1
else
S.L := S.L + {P}
P.state := blocked
wait(S)
![Page 7: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/7.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 7 Univ. de Zaragoza
Semáforos: sintaxis y semántica
• Semántica de las operaciones (atómicas) cuando la invoca P:
• Propiedad: un semáforo S cumple el siguiente invariante
if S.L = {}
S.V := S.V + 1
else
S.L := S.L - {Q}
Q.state := ready
signal(S)
S.V = S0 + #signal(S) - #wait(S)
![Page 8: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/8.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 8 Univ. de Zaragoza
El problema de la sección crítica
• Ejemplo: la sección crítica
signal(mutex) signal(mutex)
SC SC
wait(mutex) wait(mutex)
SNC SNC
Process Q Process P
semaphore mutex := (1,{})
loop forever loop forever
p1
p2
q1
q2
![Page 9: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/9.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 9 Univ. de Zaragoza
Semáforos: sintaxis y semántica
• Semántica alternativa para semáforos: versión “busy-wait”
await S.V > 0
S.V := S.V - 1
wait(S)
S.V := S.V + 1 signal(S)
semaphore S := (S0,{})
![Page 10: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/10.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 10 Univ. de Zaragoza
Semáforos: sintaxis y semántica
• En realidad, S.L no hace falta, y podemos identificar S con S.V
await S > 0
S := S - 1
wait(S)
S := S + 1 signal(S)
semaphore S := S0
![Page 11: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/11.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 11 Univ. de Zaragoza
Semáforos: sintaxis y semántica
• ¿Cuál es el matiz entre ambas versiones?
S := S + 1 signal(S)
if S.L = {}
S.V := S.V + 1
else
S.L := S.L - {Q}
Q.state := ready
signal(S)
![Page 12: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/12.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 12 Univ. de Zaragoza
Semáforos: sintaxis y semántica
• Existe un caso especial: los semáforos binarios
• Declaración
– con S0: 0..1
• Semántica de las operaciones (atómicas) cuando la invoca P:
binary semaphore S := S0
await S = 1
S := 0
wait(S)
await S = 0
S := 1
signal(S)
![Page 13: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/13.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 13 Univ. de Zaragoza
El problema de la sección crítica semaphore S := S0
S0 tokens
signal(S)
wait(S)
M(S) = S0 + #signal(S) - #wait(S)
S
![Page 14: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/14.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 14 Univ. de Zaragoza
El problema de la sección crítica semaphore S := S0
signal(S)
wait(S)
M(S) = S0 + #signal(S) - #wait(S)
S
![Page 15: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/15.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 15 Univ. de Zaragoza
El problema de la sección crítica
• Ejemplo: la sección crítica para dos procesos
• ¿Y para n procesos?
![Page 16: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/16.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 16 Univ. de Zaragoza
El problema de la barrera
• Ejemplo: algoritmo para dos procesos iterativos que sincronizan cada iteración mediante una barrera
espera a P espera a Q
cálculos locales cálculos locales
loop forever loop forever
Process Q Process P
????
![Page 17: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/17.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 17 Univ. de Zaragoza
Productores/consumidores
• Ejemplo:
– tenemos un sistema con un proceso productor y un consumidor
– y un buffer intermedio de capacidad infinita
usa(d) append(d,buffer)
consume(d,buffer) produce(d)
loop forever loop forever
el_tipo d el_tipo d
Process consumidor Process productor
. . .
queue el_tipo buffer
![Page 18: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/18.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 18 Univ. de Zaragoza
Productores/consumidores
• Ejercicio 1: mismo enunciado, pero con un buffer de capacidad 1
• Ejercicio 2: mismo enunciado, pero con un buffer de capacidad N
• Ejercicio 3: dar un esquema de solución al problema de la barrera para n procesos
![Page 19: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/19.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 19 Univ. de Zaragoza
Algunos ejercicios sencillos
Process P1 Process P2
a c
b d
• Ejercicio 4: completar los procesos siguientes de manera que “d” no se puede ejecutar hasta que “a” haya acabado
• Ejercicio 5: completar los procesos siguientes de manera que P2 puede ejecutar “d” si se ha ejecutado “e” ó “a”
Process P1 Process P2 Process P3
loop forever loop forever loop forever
a c e
b d f
![Page 20: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/20.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 20 Univ. de Zaragoza
Algunos ejercicios sencillos
![Page 21: Programación de Sistemas Concurrentes y Distribuidos](https://reader031.vdocuments.pub/reader031/viewer/2022030323/58a2d0321a28ab02228b6529/html5/thumbnails/21.jpg)
Programación de Sistemas Concurrentes y Distribuidos J. Ezpeleta-P. Álvarez 21 Univ. de Zaragoza
Algunos ejercicios sencillos