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.

  • Temas

    1. Introducción

    2. Programación Secuencial

    3. Programación Concurrente

    4. Semáforos

    5. Monitores

    6. Paso de Mensajes

    7. Procesamiento Paralelo y Distribuido


  • Contenidos

    1. 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.
    2. 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.
    3. 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.
    4. 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.
    5. 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.
    6. 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.
    7. 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.


    Archivos de "Concurrent Programming: The Java Programming Language", de S.J. Hartley (1998)

    ¤ Páginas Web

  • 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