310 likes | 717 Views
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. ¿Qué es la concurrencia?.
E N D
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
¿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 unaexistencia simultánea de varios procesos en ejecución. • Ojo, concurrencia existencia simultánea no implica ejecución simultánea.
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
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.
¿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
¿Qué es un sistema concurrente? • Es un sistema informático en el que la concurrencia desempeña un papel importante. • Ejemplos: • sistemas operativos • sistemas de gestión de bases de datos (DBMS) • sistemas de tiempo real • sistemas distribuidos
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
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
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
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
Contenidos • Concurrencia y paralelismo • Sistema concurrente • Programación concurrente • Lenguaje concurrente • Arquitectura paralela • Sistema distribuido
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.
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
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.
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?
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...
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; ¿Cómo expresar la concurrencia?
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.
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
Mecanismos clásicos de comunicación • Comunicación directa (memoria compartida) • Canales • Buzones • Llamada a procedimiento remoto (RPC) • etc.
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.
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
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?
Contenidos • Concurrencia y paralelismo • Sistema concurrente • Programación concurrente • Lenguaje concurrente • Arquitectura paralela • Sistema distribuido
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
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
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)
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)
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
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.