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.

  • Temas

    1. Introducción -- El Panorama de la Computación Concurrente

    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


    Artículos para Lectura

  • 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