Computación Concurrente
Objetivo
Resolver problemas complejos de cómputo concurrente de manera crítica y creativa. Entender los aspectos de concurrencia y tolerancia a fallas de: sistemas operativos y bases de datos.
-
Presentación
-
Temas
- Introducción -- El Panorama de la Computación Concurrente
- 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. - Programación Secuencial
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. - Programación Concurrente
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. - Semáforos
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. - Monitores
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. - Paso de Mensajes
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. - Procesamiento Paralelo y Distribuido
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.
-
¤ Lectura: Co-operating Sequential Processes (Dijkstra,1968)
¤ Lectura: Structured Multiprogramming (Brinch-Hansen,1972)
¤ 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-
¤ 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-
¤ Lectura: Communicating Sequential Processes (Hoare, 1978)
¤ Lectura: Distributed Processes: A Concurrent Programming Concept (Brinch-Hansen, 1978)
¤ Ejercicio: A Multimachine Dining Philosophers
Archivos de "Concurrent Programming: The Java Programming Language", de S.J. Hartley (1998)
Artículos para Lectura- 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.
- Introducción
-
Bibliografía
- Andrews, G.R.
Foundations of Multithreaded, Parallel, and Distributed Programming
Addison-Wesley, 2000 - Andrews, G.R.
Concurrent Programming. Principles and Practice
The Benjamin/Cummings Publishing Company, Inc., 1991 - Hartley, S.
Concurrent Programming. The Java Programming Language
Oxford University Press, 1998
- Andrews, G.R.