Download Objetivos

Document related concepts

Erlang wikipedia , lookup

Oz (lenguaje de programación) wikipedia , lookup

Transcript
Sistemas Concurrentes:
Conceptos fundamentales
I.T. Informática de Sistemas
Curso 2002-2003
Contenidos
•
•
•
•
•
•
Concurrencia y paralelismo
Sistema concurrente
Programación concurrente
Lenguaje concurrente
Arquitectura paralela
Sistema distribuido
SistemasConcurrentes
¿Qué es la concurrencia?
• Definición de diccionario: coincidir en el espacio
o en el tiempo dos o más personas o cosas.
• En Informática, se habla de concurrencia
cuando hay una
existencia simultánea de varios procesos en
ejecución.
• Ojo, concurrencia existencia simultánea no
implica ejecución simultánea.
SistemasConcurrentes
Paralelismo vs concurrencia
• El paralelismo es un caso particular de la
concurrencia.
• Se habla de paralelismo cuando ocurre la
ejecución simultánea de instrucciones:




arquitecturas paralelas
procesamiento paralelo
algoritmos paralelos
programación paralela
SistemasConcurrentes
Procesos y concurrencia
• Una forma de ver la concurrencia es como un
conjunto de actividades que se desarrollan de
forma simultánea.
• En informática, cada una de esas actividades se
suele llamar proceso.
SistemasConcurrentes
¿Dónde se encuentra la
concurrencia?
• En la Naturaleza (el problema que se modela)
 ¿ejemplos?
• En el hardware (la herramienta para solucionar
el problema):




ejecución paralela de instrucciones
funcionamiento paralelo de los periféricos
procesadores múltiples
sistemas distribuidos
SistemasConcurrentes
¿Qué es un sistema concurrente?
• Es un sistema informático en el que la
concurrencia desempeña un papel importante.
• Ejemplos:




sistemas
sistemas
sistemas
sistemas
operativos
de gestión de bases de datos (DBMS)
de tiempo real
distribuidos
SistemasConcurrentes
Concurrencia inherente o potencial
• Sistemas inherentemente concurrentes:
 el entorno con el que interactúan, o el entorno que
modelan tiene forzosamente actividades simultáneas
 p.ej. red de cajeros automáticos
• Sistemas potencialmente concurrentes:
 no es estrictamente necesario que haya concurrencia,
pero se puede sacar partido de ella
 p.ej. para aumentar la velocidad de ejecución
SistemasConcurrentes
Ejercicio
• Dar un ejemplo de sistema en la naturaleza que
sea concurrente
• Dar dos ejemplos de sistemas inherentemente
concurrentes
• Dar dos casos de sistemas potencialmente
concurrentes en los que nos beneficiaríamos de
la utilización de la concurrencia
SistemasConcurrentes
Conclusiones
• La concurrencia está presente en la Naturaleza y
en los sistemas informáticos.
• El hardware multiprocesador permite realizar
más trabajo en menos tiempo.
• De ahí se derivan dos grandes objetivos:
 aprovechar la concurrencia existente en el hardware
 facilitar al programador su misión de modelar
sistemas concurrentes
SistemasConcurrentes
Técnicas para producir actividades
concurrentes en el 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
SistemasConcurrentes
Contenidos
•
•
•
•
•
•
Concurrencia y paralelismo
Sistema concurrente
Programación concurrente
Lenguaje concurrente
Arquitectura paralela
Sistema distribuido
SistemasConcurrentes
Programació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.
SistemasConcurrentes
Motivación de la programación
concurrente
• Aprovechar el hardware multiprocesador
• Aumentar la productividad de la CPU
• Facilitar la escritura de aplicaciones donde la
concurrencia sea un elemento importante
SistemasConcurrentes
Lenguajes 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.
SistemasConcurrentes
Lenguajes 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?
SistemasConcurrentes
Lenguajes concurrentes
• Aquellos que incorporan características que
permiten expresar la concurrencia directamente,
sin recurrir a servicios del s.o., bibliotecas, etc.
• Normalmente incluyen mecanismos de
sincronización y comunicación entre procesos
• Ejemplos: Ada, Java, SR, Occam, PARLOG...
SistemasConcurrentes
¿Cómo expresar la concurrencia?
• Sentencia concurrente:
cobegin
P; Q; R
coend;
• Sentencia concurrente
múltiple:
forall i:=1 to 1000 do
P(i);
• Tuberías (unix):
grep palabra | sort | lpr
• Instrucciones vectoriales:
type vector is
array(1..10) of int;
var a,b,c : vector;
a := b*c + 2*a;
• Objetos que representan
procesos:
task A is begin P; end;
task B is begin Q; end;
task C is begin R; end;
SistemasConcurrentes
Sincronización y comunicación
• Los procesos concurrentes tendrán necesidad de
comunicarse información.
• Además, será necesario en ocasiones detener a
un proceso hasta que se produzca un
determinado evento o se den ciertas
condiciones  sincronización
• Los lenguajes concurrentes deben proporcionar
mecanismos de sincronización y comunicación.
SistemasConcurrentes
Mecanismos 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
SistemasConcurrentes
Mecanismos clásicos de
comunicación
•
•
•
•
•
Comunicación directa (memoria compartida)
Canales
Buzones
Llamada a procedimiento remoto (RPC)
etc.
SistemasConcurrentes
Programació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.
SistemasConcurrentes
Ejercicio
• 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
SistemasConcurrentes
La 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?
SistemasConcurrentes
Contenidos
•
•
•
•
•
•
Concurrencia y paralelismo
Sistema concurrente
Programación concurrente
Lenguaje concurrente
Arquitectura paralela
Sistema distribuido
SistemasConcurrentes
Arquitecturas paralelas
• Son sistemas informáticos con más de un
procesador. Dos tipos:
• Estrechamente acoplados
 los procesadores comparten memoria y reloj
 normalmente llamados multiprocesadores
• Débilmente acoplados
 no comparten memoria ni reloj
 sistemas distribuidos
SistemasConcurrentes
Multiprocesadores
• Sistemas con más de un procesador. Pueden ejecutar
varias instrucciones simultáneamente (en paralelo).
• Sistemas estrechamente acoplados: los
procesadores comparten la memoria (aunque puede ser
más o menos difícil acceder a la memoria de otro
procesador).
• Ventaja:
 aumento de velocidad de procesamiento con bajo coste
• Inconveniente:
 Escalable sólo hasta decenas o centenares de procesadores
SistemasConcurrentes
Sistemas distribuidos
• Múltiples procesadores conectados mediante
una red.
• Sistemas débilmente acoplados: los
procesadores no comparten memoria ni reloj.
• Los sistemas conectados pueden ser de
cualquier tipo.
• Escalable hasta millones de procesadores (ej.
Internet)
SistemasConcurrentes
Sistemas distribuidos: ventajas
• compartición de recursos dispersos
• ayuda al trabajo cooperativo de equipos
humanos
• aumento de velocidad de ejecución
• escalabilidad ilimitada
• aumento de fiabilidad:
 tolerancia a fallos (fault tolerance)
 alta disponibilidad (availability)
SistemasConcurrentes
Sistemas distribuidos:
complicaciones
• los sistemas no comparten memoria ni reloj:
 la comunicación es más compleja
 no se puede tener un estado global instantáneo.
 dificultades en la sincronización
• red de comunicaciones no fiable:
 pérdida de mensajes
 mensajes desordenados
• heterogeneidad de los nodos
 múltiples plataformas hw y sw
 diferencias en rendimiento
SistemasConcurrentes
Sistemas de tiempo real
• Para poder ejecutar satisfactoriamente tareas que han
de completarse en un plazo prefijado (ej. sistemas de
control industrial, sistemas multimedia)
• Dos tipos:
 s.t.r. crítico: para tareas que siempre deben cumplir los plazos
de terminación. Adecuados para la industria. Muy simples,
incompatibles con tiempo compartido, memoria virtual, etc.
 s.t.r. no crítico: intentan cumplir los plazos, pero no los
garantizan al 100%. Adecuados para multimedia, etc.
SistemasConcurrentes