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…
¿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;
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.
Página anterior | Volver al principio del trabajo | Página siguiente |