Programación Concurrente
Objetivo
El principal propósito de este curso es introducir al estudiante a la programación de aplicaciones concurrentes o multi-hebra. El curso presenta los principales antecedentes y conceptos básicos de la programación concurrente. La exposición teórica se complementa mediante la resolución práctica de problemas clásicos presentes en los cursos de sistemas operativos (productores y consumidores, cinco filósofos, lectores y escritores), así como de otros problemas complementarios de programación y su expresión e implementación utilizando el lenguaje Java de programación.
-
Presentación
-
Temas
- Introducción
- Programación Secuencial
- Programación Concurrente
- Semáforos
- Monitores
- Paso de Mensajes
- Procesamiento Paralelo y Distribuido
-
Contenidos
- Introducción
Presentación de los conceptos fundamentales de procesamiento paralelo y distribuido en el contexto de programación concurrente. Descripción de conceptos y tópicos generales: programación secuencial y concurrente, definición de proceso, condiciones de competencia (race conditions), secciones críticas, exclusión mutua, semáforos, monitores, paso de mensajes y llamadas a procedimientos remotos como elementos del procesamiento paralelo y programación distribuida. Lenguajes para programación paralela y distribuida. Introducción a Java como un lenguaje Orientado a Objetos para procesamiento paralelo y distribuido.
- Introducción
¤ Introduction
Antecedentes, descripción y características de la programación secuencial. La estructura del procesamiento secuencial, sus ventajas y limitaciones. Desarrollo de ejemplos de programación secuencial en Java.
Antecedentes, descripción y características de la programación concurrente. El concepto de proceso concurrente y hebra de control. Procesamiento multi-hebra y condiciones de competencia entre hebras de control. Sincronización de procesos multi-hebra mediante variables y espera activa. Secciones críticas, exclusión mutua, seguridad y eventual entrada (liveness). Introducción a la programación de hebras de control en Java. Productores y consumidores como procesos concurrentes en Java. Ventajas y limitaciones de la programación concurrente.
Antecedentes y definición del concepto de semá:foro. Semáforos y exclusión mutua. Expresión implícita y explícita de semáforos en Java. Desarrollo de ejemplos clásicos de programación en Java.
-
¤ Semaphores
¤ Lectura: Co-operating Sequential Processes (Dijkstra,1968)
¤ Ejercicio: The Bounded Buffer for a Producer and Comsumer
¤ Ejercicio: The Producer and Consumer Driver
¤ Ejercicio: The Server for the Dining Philosophers
¤ Ejercicio: The Dining Philosophers Driver
Presentación de antecedentes y definición del concepto de monitor. Comparación entre monitores y semáforos como elementos de sincronización de procesos concurrentes. Variables de condición, wait y signal. Tipos de "señalización" en monitores. Monitores en Java. Desarrollo de ejemplos clásicos de programación en Java.
-
¤ Monitors
¤ Lectura: Monitors: An Operating System Structuring Concept (Hoare, 1974)
¤ Ejercicio: The Bounded Buffer Monitor
¤ Ejercicio: The Producer and Consumer Driver
¤ Ejercicio: A starvation-free Dining Philosophers Monitor
¤ Ejercicio: The Dining Philosophers Driver
Origen y definición de la técnica de paso de mensajes. El concepto de canal, envío y recepción de mensajes. Paso de mensajes síncrono, asíncrono y condicional. Expresión e implementación del paso de mensajes en Java. Desarrollo de ejemplos clásicos de programación en Java. Origen y definición de la técnica de llamadas a procedimientos remotos. El concepto de rendevous. El sistema cliente-servidor. Redevous condicional. Expresión e implementación de las llamadas a procedimientos remotos en Java (Remote Method Invocation). Desarrollo de ejemplos clásicos de programación en Java.
-
¤ Message Passing
¤ Lectura: Communicating Sequential Processes (Hoare, 1978)
¤ Lectura: Distributed Processes: A Concurrent Programming Concept (Brinch-Hansen, 1978)
¤ Ejercicio: A Multimachine Dining Philosophers
Conceptos básicos de procesamiento paralelo y distribuido (granularidad, procesamiento síncrono y asíncrono, memoria compartida y distribuida). Tipos de paralelismo: funcional, de datos y actividades. Ejemplos de programación paralela y distribuida en Java.
-
¤ Parallel Software Design
¤ Architectural Patterns for Parallel Programming
¤ Design Patterns for Communication Components of Parallel Programs
¤ Idioms for Synchronization Mechanisms
¤ Lectura: Is Parallelism for You? (Pancake, 1996)
¤ Ejercicios: Parallel Processing
Archivos de "Concurrent Programming: The Java Programming Language", de S.J. Hartley (1998)
Bibliografía
Libros
- Andrews, G.R.
Concurrent Programming. Principles and Practice
The Benjamin/Cummings Publishing Company, Inc., 1991 - Hartley, S.J.
Concurrent Programming: The Java Programming Language
Oxford University Press, 1998 - Foster, I.
Designing and Building Parallel Programs. Concepts and Tools for Parallel Software Engineering.
Addison-Wesley Publishing Company, Reading, Massachusets, 1994
Artículos
- Dijkstra, E.W. (1968)
Co-operating Sequential Processes
In Programming Languages (ed. Genuys), pp.43-112, Academic Press. - Brinch Hansen, P. (1972)
Structured Multiprogramming
Communications of the ACM, Vol.15, No. 17, July 1972. - Hoare, C.A.R. (1974)
Monitors: An Operating System Structuring Concept
Communications of the ACM, Vol.17, No. 10, October 1974. - Hoare, C.A.R. (1978)
Communicating Sequential Processes
Communications of the ACM, Vol.21, No. 8, August 1978. - Brinch Hansen, P. (1978)
Distributed Processes: A Concurrent Programming Concept
Communications of the ACM, Vol.21, No. 11, November 1978. - Pancake, C.M. (1996)
Is Parallelism for You?
IEEE Computational Science and Engineering. - Carriero, N. and Gelernter, D. (1989)
How to Write Parallel Programs: A Guide to the Perplexed
ACM Computing Surveys. - Gelernter, D. and Carriero, N. (1992)
Coordination Languages and their Significance
Communications of the ACM.