Download Objetivos
Document related concepts
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