Title: Sistemas Concurrentes: la programacin concurrente
1Sistemas Concurrentesla programación concurrente
- I.T. Informática de Sistemas
2Contenidos
- Cómo generar concurrencia en el sistema
- Programación concurrente
- Lenguaje concurrente
- La sentencia concurrente
- Beneficios de la programación concurrente
- Grafos de precedencia
- Sincronización y comunicación
3BibliografÃa
- Programación Concurrente
- J. Palma et al. Thomson, 2003
- CapÃtulo 1
- Principles of Concurrent and Distributed
Programming - M. Ben-Ari. Prentice Hall, 1990
- CapÃtulo 1
4Cómo se puede generar concurrencia dentro del
computador?
- De forma manual
- Trabajar directamente sobre el hardware
- Usar llamadas al sistema o bibliotecas de
software (ejs. PVM, pthreads) - Expresarla en un lenguaje de alto nivel
- De forma automática
- El sistema operativo se encarga automáticamente
(ej. multiprogramación) - El compilador detecta la concurrencia implÃcita
en nuestros programas secuenciales
5Se puede detectar automáticamente la
concurrencia?
- SÃ, en algunos casos.
- Ej. condiciones de Bernstein (1966).
- Formalismo para deducir si dos instrucciones se
pueden ejecutar concurrentemente.
6Condiciones de Bernstein (1)
- Sean
- IS. Un conjunto de instrucciones i1,i2 ,... in
- R(IS) a1,a2,...an Conjunto de lectura de IS.
Son todas las variables que se leen al ejecutarse
IS. - W(IS) b1,b2,...bn Conjunto de escritura de
IS. Son todas las variables que se modifican al
ejecutarse IS.
7Condiciones de Bernstein (2)
- Para que dos juegos de instrucciones A y B se
puedan ejecutar concurrentemente, se tiene que
cumplir necesariamente - R(A) n W(B) Ø
- W(A) n R(B) Ø
- W(A) n W(B) Ø
- Intuición Si A utiliza una variable, B no puede
escribir en esa variable (si queremos que A y B
sean concurrentes).
8Condiciones de Bernstein (y 3)
- Realizando un análisis sobre el código
secuencial, se pueden descubrir automáticamente
porciones de código que se pueden ejecutar en
paralelo. - El compilador podrÃa traducir esas porciones a
llamadas a hilos o procesos. - En código máquina, un procesador segmentado (ej.
Pentium gt2) detectan instrucciones independientes
y las ejecutan en paralelo.
9pero sigue haciendo falta un programador
- El análisis automático del código para detectar
concurrencia tiene un ámbito muy limitado (sobre
todo, en el nivel de código máquina). - Sigue siendo imprescindible que el programador
detecte y especifique qué módulos de código desea
ejecutar concurrentemente. ? programación
concurrente
10Programación concurrente definición
- Conjunto de técnicas y notaciones para expresar
el paralelismo potencial de una
aplicación,tratando los problemas de
sincronización y comunicación entre procesos. - La programación concurrente, en sentido amplio,
NO trata de la implementación del paralelismo en
el hardware.
11Lenguajes de alto nivel
- Los LAN permiten programar en un nivel más
cercano al ámbito del problema (problem domain)
por medio de la abstracción. - Además, los lenguajes y el S.O. proporcionan
herramientas para usar con más comodidad los
recursos del hardware.
12Lenguajes de alto nivel
- A lo largo de la historia, se han inventado
abstracciones en los LAN que han resultado muy
útiles para la comunidad informática - abstracción de expresiones (FORTRAN...)
- abstracción del flujo de control programación
estructurada secuencial (Algol...) - abstracción de la lógica y el álgebra (Lisp,
Prolog...) - abstracción de datos (Algol, Pascal...)
- modelado de objetos (Smalltalk, C...)
- abstracción de la concurrencia?
13Lenguajes concurrentes
- Aquellos que incorporan caracterÃsticas que
permiten expresar la concurrencia directamente,
sin recurrir a servicios del s.o., bibliotecas,
etc. - Incluyen mecanismos de sincronización y
comunicación entre procesos. - Ejemplos Ada, Java, SR, Occam, PARLOG...
14Cómo expresar la concurrencia en un lenguaje de
programación?
- Sentencia concurrente
- cobegin
- P Q R
- coend
- Sentencia concurrente múltiple
- forall i1 to 1000 do
- P(i)
- TuberÃas (unix)
- unzip fichero.c.zip grep include a2ps lpr
- Instrucciones vectoriales
- type vector is
- array(1..10) of int
- var a,b,c vector
- a bc 2a
- Objetos que representan procesos
- task A is begin P end
- task B is begin Q end
- task C is begin R end
15Programación paralela
- Cuando estamos especialmente interesados en
escribir código para ser utilizado en un sistema
multiprocesador, hablamos de programación
paralela o algoritmos paralelos. - Es un caso particular de la programación
concurrente en el que prima la ejecución paralela.
16La sentencia concurrente
- cobegin
- A
- B
- C
- coend
- begin
- X
- cobegin
- A
- B
- C
- coend
- Y
- end
- A, B y C se pueden ejecutar concurrentemente.
- La sentencia concurrente finaliza cuando todas
sus sentencias interiores finalizan - El ejemplo de arriba finaliza cuando A, B y C han
terminado. - En el ejemplo de abajo
- A, B y C no pueden empezar hasta que X ha
terminado por completo. - Y sólo se empieza a ejecutar cuando A, B y C han
terminado.
17Sentencia concurrente múltiple
- Para poder lanzar un número elevado o
indeterminado de acciones de forma concurrente. - Sintaxis similar al bucle for pero no es un
bucle, no es iterativa!! -
- forall i in 1..100
- S (i)
- end
- Lanza concurrentemente S(1), S(2) S(100)
-
18Ejercicio
- Usando la sentencia concurrente, diseñar
algoritmos concurrentes para - multiplicar dos matrices
- sumar una lista de N números (2 métodos)
- ordenar un vector
- obtener los números primos entre 2 y N
- tratando de obtener la máxima concurrencia
19La gran pregunta es necesaria la programación
concurrente?
- No basta con la programación secuencial de toda
la vida? - Puede la prog. sec. modelar bien un sistema
concurrente? - Puede la prog. sec. aprovechar la concurrencia
existente en el hardware?
20Un ejemplo ejecutivo cÃclico
- Implementar un sistema que debe monitorizar
periódicamente varios sensores (ej. presión
arterial, respiración, pulso) - Los periodos de monitorización son distintos
- Algoritmo para cada sensor
- loop
- delay Periodo_Del_Sensor(i)
- Monitoriza_Sensor(i)
- end loop
- Comparar una implementación secuencial con una
implementación con sentencia concurrentecuál
resulta más sencilla?
21Beneficios de la programación concurrente
- Aprovechar el hardware multiprocesador
- Aumentar la productividad de la CPU
- Facilitar la implementación de sistemas donde la
concurrencia sea un elemento importante - Sistemas de control en tiempo real
- Interfaces gráficas de usuario
- Sistemas operativos
- Gestores de bases de datos
22Grafos de precedencia
- Muestra gráficamente la relación de precedencia
entre un grupo de sentencias. - A precede a B significa que ninguna instrucción
de B puede ejecutarse hasta que A haya terminado
por completo.
A
A precede a B A precede a C B y C preceden a D E
no depende de nadie
B
C
E
D
23Grafos de precedencia propiedades
- Propiedades del grafo
- Grafo dirigido
- Nunca hay ciclos
- Propiedades de la relación de precedencia
- Transitiva si A precede a B y B precede a C ? A
precede a C - Antisimétrica si A precede a B ? B no precede a
A - Ojo un grafo de precedencia NO define una
relación de orden total - puede haber parejas de sentencias que no tengan
ninguna relación de precedencia ? sentencias que
se pueden ejecutar concurrentemente entre sÃ.
24Una sentencia concurrente define un grafo de
precedencia
- begin
- A
- cobegin
- B
- begin
- C
- D
- end
- E
- coend
- F
- end
A
C
B
E
D
F
25Limitaciones de la sentencia concurrente
- Hay grafos de precedencia que no se pueden
expresar usando sólo la sentencia concurrente.
A
B
D
C
F
E
26Sincronización y comunicación
- En ocasiones es necesario detener a un proceso
hasta que se produzca un determinado evento o se
den ciertas condiciones ? sincronización - La sentencia concurrente ofrece ciertas
capacidades de sincronización, pero muy limitadas
(ej. grafo de precedencia anterior) - Los procesos concurrentes tendrán necesidad de
comunicarse información. - Los lenguajes concurrentes deben proporcionar
mecanismos de sincronización y comunicación.
27Mecanismos clásicos de sincronización
- Mecanismos de señalización
- Semáforos
- Cerrojos y variables condición
- Señales, eventos
- Retardos temporales
- Recursos compartidos
- Regiones crÃticas
- Monitores
- Objetos protegidos
28Mecanismos clásicos de comunicación
- Comunicación directa (memoria compartida)
- Canales
- Buzones
- Llamada a procedimiento remoto (RPC)
- etc.