Programacion Concurrente 2020
Programacion Concurrente 2020
FUNDAMENTACIÓN
OBJETIVOS GENERALES
Brindar los conceptos fundamentales de Concurrencia en software. Analizar la semántica y sintaxis para
especificar concurrencia. Analizar el concepto de sistema concurrente compuesto por la arquitectura, el
sistema operativo y los algoritmos. Estudiar la sincronización de procesos concurrentes por memoria
compartida y mensajes. Vincular la concurrencia en software con los conceptos de procesamiento distribuido
y paralelo. Desarrollar estudios de casos con diferentes lenguajes/ herramientas para concurrencia.
COMPETENCIAS
- CGS6. Capacidad para interpretar la evolución de la Informática con una visión de las tendencias
tecnológicas futuras.
- CGT1. Identificar, formular y resolver problemas de Informática.
- CGT4. Conocer e interpretar los conceptos, teorías y métodos matemáticos relativos a la informática,
para su aplicación en problemas concretos de la disciplina
- CGT5. Utilizar de manera efectiva las técnicas y herramientas de aplicación de la Informática
- LI-CE2. Planificar, dirigir, realizar y/o evaluar proyectos de especificación, diseño, verificación,
validación, puesta a punto, mantenimiento y actualización para redes de comunicaciones que
vinculen sistemas de procesamiento de datos. Esto incluye comunicaciones convergentes y
unificadas, así como redes definidas por software y redes virtuales. En particular, desarrollar las
soluciones de las capas superiores de los protocolos de red, a partir del hardware que se haya
seleccionado
- LI-CE4. Planificar, dirigir, realizar y/o evaluar proyectos de relevamiento de problemas del mundo
real, especificación formal de los mismos, diseño, implementación, prueba, verificación, validación,
mantenimiento y control de calidad de sistemas de software/sistemas de información que se ejecuten
sobre equipos de procesamiento de datos, con capacidad de incorporación de tecnologías
emergentes del cambio tecnológico. Capacidad de análisis, diseño y evaluación de interfases
humano computador y computador-computador.
- LI-CE5. Planificar, dirigir, realizar y/o evaluar proyectos de sistemas de software de base: Sistemas
Operativos, Sistemas Operativos Distribuidos, Sistemas Operativos Dedicados. Especificación,
1. Conceptos básicos
Objetivos de los sistemas concurrentes.
Procesamiento secuencial, concurrente y paralelo. Características.
Evolución histórica. El modelo de CSP (Communicating Sequential Processes)
Procesos. Programa concurrente. No determinismo.
Clases de aplicaciones. Multithreading, Cómputo paralelo y distribuido. Concurrencia y paralelismo.
Algoritmos concurrentes, distribuidos y paralelos.
Areas de estudio en sistemas concurrentes.
Relación con la arquitectura. Monoprocesadores. Multiprocesadores: Procesadores híbridos.
Clasificaciones y ejemplos. Tendencias actuales en procesadores.
Conceptos de arquitecturas Grid y Cloud. Memoria compartida distribuida.
Relación con el sistema operativo. Requerimientos para el sistema operativo.
Relación con el lenguaje. Requerimientos para el lenguaje.
Sincronización y comunicación. Sincronización por exclusión mutua y por condición. Comunicación por
memoria compartida y por mensajes.
Prioridad, granularidad, deadlock, manejo de recursos.
Paradigmas de resolución de programas concurrentes: iterativo, recursivo o divide & conquer, pipeline o
productor consumidor, cliente/servidor y sus variantes, peers o interacción por pares.
2. Concurrencia y sincronización
Aspectos de programación secuencial
Especificación y semántica de la ejecución concurrente. La sentencia co y process
Acciones atómicas y sincronización.
El problema de interferencia. Historias válidas e inválidas.
Atomicidad de grano fino y de grano grueso.
La propiedad de “A lo sumo una vez”.
La sentencia Await. Semántica.
Técnicas para evitar interferencia.
Propiedades de seguridad y vida.
Políticas de scheduling y Fairness.
Requerimientos para los lenguajes de programación.
Problemas en sistemas distribuidos.
Implementaciones
Conceptos de implementación de procesos en arquitecturas mono y multiprocesador.
Kernel monoprocesador y multiprocesador.
Mensajes asincrónicos
Sintaxis y semántica. Canales. Operaciones.
Filtros. Redes de Filtros.
Clientes/Servidores. Algoritmos clásicos. Monitores activos. Continuidad conversacional.
Peers. Intercambio de valores. Cálculo de la topología de una red.
Mensajes asincrónicos en lenguajes reales MPI. Extensión de lenguajes secuenciales con bibliotecas
específicas.
Ejemplos.
El concepto de bag of tasks. Espacio de tuplas e interacción entre procesos. Estructuras de datos
distribuidas. Ejemplos
Mensajes sincrónicos
Sintaxis y semántica.
Conceptos de CSP.
Comunicación guardada. Sintaxis y semántica.
Filtros. Clientes y servidores. Asignación de recursos.
Interacción entre procesos paralelos. Ejemplos.
Mensajes sincrónicos en lenguajes reales.
Ejemplos
En la práctica se plantean ejercicios que pueden ser realizados como trabajo experimental sobre
arquitecturas multiprocesador distribuidas (clusters), multiprocesadores con memoria compartida e híbridos.
BIBLIOGRAFÍA
- Andrews G. “Foundations of Multithreaded, Parallel and Distributed Programming”, Addison Wesley, 2000
- Barnes J., “Programming in Ada 2005 with CD”, Addison Wesley, 2006.
- Ben-Ari, M. “Principles of Concurrent and Distributed Programming, 2/E”. Addison-Wesley. 2006. ISBN 0-
321-31283-X
- Chandy, Misra, “Parallel Program Design. A Foundation”, Addison Wesley, 1988.
- Downey, Allen. “The Little Book of Semaphores, Second Edition”. Free book disponible en
http://www.freetechbooks.com/the-little-book-of-semaphores-second-edition-t519.html, 2007.
- Filminas de las clases teóricas.
- Grama A., Gupta A., Karypis G., Kumar V., "An Introduction to Parallel Computing. Design and Analysis
of Algorithms", Pearson Addison Wesley, 2nd Edition, 2003
- Herlihy M., Shavit N., “The Art of Multiprocessor Programming”. Morgan Kaufmann. Revised reprint,
2012.
- Hoare C., “Communicating Sequential Processes”, Englewood Cliffs, Prentice Hall, 1985
- Brinch Hansen, P., “Studies in Computational Science. Parallel Programming Paradigms”, Prentice Hall,
1995.
- Jordan H.F., Alaghband G., Jordan H.E., "Fundamentals of Parallel Computing", Prentice Hall, 2002
- Naiouf, De Giusti A., De Giusti L, Chichizola, “Conceptos de concurrencia y paralelismo”, UNLP, a publicar
2019.
- Pacheco, P. “An introduction to parallel programming”. Morgan Kaufmann, 2011.
- Raynal M. “Concurrent Programming: Algorithms, Principles, and Foundations”. Springer, 2012.
- Taubenfeld, Gadi. “Synchronization Algorithms and Concurrent Programming”. Prentice Hall. 2006.
En la cátedra se pone énfasis en el proceso de identificación de problemas del mundo real, la especificación
de los mismos como problemas resolubles desde la informática y en el desarrollo de soluciones verificables
para los mismos.
Se trata de poner al alumno en el contexto de aplicación en el campo de la Informática de los conceptos y
métodos que se encuentran en el programa de la asignatura. Esta contextualización es informativa y se
discuten diferentes casos de aplicación para mostrar la utilidad de las teorías y herramientas matemáticas
para resolver diferentes problemas “informáticos” conocidos por el alumno. Se pone énfasis en la capacidad
del alumno para conocer técnicas y herramientas de aplicación en Informática (en lo posible siguiendo las
tendencias marcadas por el cambio tecnológico) y en la aplicación efectiva de las mismas.
La cátedra acompaña el proceso con materiales para que el alumno estudie casos y valore la selección y
empleo eficiente de herramientas y técnicas determinadas para cada problema.
Se plantean actividades relacionadas con las tecnologías existentes para diferentes problemas y se los
“desafía” a presentar la posible evolución de la solución para ese tipo de problema y en qué aspectos podría
mejorarse la solución/soluciones actuales. Para esto el alumno debe buscar bibliografía relacionada con el
cambio tecnológico y formarse un criterio sobre las tendencias (por ejemplo, en los procesadores a utilizar,
el tipo de topología, etc)
Para las clases teóricas y las explicaciones de práctica se utiliza PC, cañón y pizarrón.
Los alumnos pueden realizar prácticas en PC usando distintos lenguajes/bibliotecas que soportan
concurrencia.
EVALUACIÓN
La cátedra acompaña el proceso de aprendizaje del alumno, para contrastar sus conclusiones y validar su
habilidad para interpretar la evolución tecnológica y su visión de las tendencias futuras
En la evaluación de las competencias en las pruebas parciales y finales se tienen en cuenta los siguientes
aspectos:
- la capacidad para identificar, formular y resolver los problemas, reflejándolo en la corrección de las pruebas
escritas
- la capacidad para conocer e interpretar los conceptos, teorías y métodos, aplicándolos a problemas
concretos. Esto se evalúa a través de preguntas del tipo “donde cree Ud. que es aplicable este conocimiento
o método”, o la interpretación de código, o interpretación de resultados
- en qué medida el alumno es capaz de utilizar de manera efectiva las técnicas y herramientas que son parte
de la asignatura
- los resultados del estudio bibliográfico y capacidad para formular las ventajas potenciales del cambio
tecnológico en los problemas planteados, plasmando esto en una planilla.
FUNDAMENTACIÓN
OBJETIVOS GENERALES
Brindar los conceptos fundamentales de Concurrencia en software. Analizar la semántica y sintaxis para
especificar concurrencia. Analizar el concepto de sistema concurrente compuesto por la arquitectura, el
sistema operativo y los algoritmos. Estudiar la sincronización de procesos concurrentes por memoria
compartida y mensajes. Vincular la concurrencia en software con los conceptos de procesamiento distribuido
y paralelo. Desarrollar estudios de casos con diferentes lenguajes/ herramientas para concurrencia.
COMPETENCIAS
- CGS6. Capacidad para interpretar la evolución de la Informática con una visión de las tendencias
tecnológicas futuras.
- CGT1. Identificar, formular y resolver problemas de Informática.
- CGT4. Conocer e interpretar los conceptos, teorías y métodos matemáticos relativos a la informática,
para su aplicación en problemas concretos de la disciplina
- CGT5. Utilizar de manera efectiva las técnicas y herramientas de aplicación de la Informática
- LI-CE2. Planificar, dirigir, realizar y/o evaluar proyectos de especificación, diseño, verificación,
validación, puesta a punto, mantenimiento y actualización para redes de comunicaciones que
vinculen sistemas de procesamiento de datos. Esto incluye comunicaciones convergentes y
unificadas, así como redes definidas por software y redes virtuales. En particular, desarrollar las
soluciones de las capas superiores de los protocolos de red, a partir del hardware que se haya
seleccionado
- LI-CE4. Planificar, dirigir, realizar y/o evaluar proyectos de relevamiento de problemas del mundo
real, especificación formal de los mismos, diseño, implementación, prueba, verificación, validación,
mantenimiento y control de calidad de sistemas de software/sistemas de información que se ejecuten
sobre equipos de procesamiento de datos, con capacidad de incorporación de tecnologías
emergentes del cambio tecnológico. Capacidad de análisis, diseño y evaluación de interfases
humano computador y computador-computador.
- LI-CE5. Planificar, dirigir, realizar y/o evaluar proyectos de sistemas de software de base: Sistemas
Operativos, Sistemas Operativos Distribuidos, Sistemas Operativos Dedicados. Especificación,
1. Conceptos básicos
Objetivos de los sistemas concurrentes.
Procesamiento secuencial, concurrente y paralelo. Características.
Evolución histórica. El modelo de CSP (Communicating Sequential Processes)
Procesos. Programa concurrente. No determinismo.
Clases de aplicaciones. Multithreading, Cómputo paralelo y distribuido. Concurrencia y paralelismo.
Algoritmos concurrentes, distribuidos y paralelos.
Areas de estudio en sistemas concurrentes.
Relación con la arquitectura. Monoprocesadores. Multiprocesadores: Procesadores híbridos.
Clasificaciones y ejemplos. Tendencias actuales en procesadores.
Conceptos de arquitecturas Grid y Cloud. Memoria compartida distribuida.
Relación con el sistema operativo. Requerimientos para el sistema operativo.
Relación con el lenguaje. Requerimientos para el lenguaje.
Sincronización y comunicación. Sincronización por exclusión mutua y por condición. Comunicación por
memoria compartida y por mensajes.
Prioridad, granularidad, deadlock, manejo de recursos.
Paradigmas de resolución de programas concurrentes: iterativo, recursivo o divide & conquer, pipeline o
productor consumidor, cliente/servidor y sus variantes, peers o interacción por pares.
2. Concurrencia y sincronización
Aspectos de programación secuencial
Especificación y semántica de la ejecución concurrente. La sentencia co y process
Acciones atómicas y sincronización.
El problema de interferencia. Historias válidas e inválidas.
Atomicidad de grano fino y de grano grueso.
La propiedad de “A lo sumo una vez”.
La sentencia Await. Semántica.
Técnicas para evitar interferencia.
Propiedades de seguridad y vida.
Políticas de scheduling y Fairness.
Requerimientos para los lenguajes de programación.
Problemas en sistemas distribuidos.
Implementaciones
Conceptos de implementación de procesos en arquitecturas mono y multiprocesador.
Kernel monoprocesador y multiprocesador.
Mensajes asincrónicos
Sintaxis y semántica. Canales. Operaciones.
Filtros. Redes de Filtros.
Clientes/Servidores. Algoritmos clásicos. Monitores activos. Continuidad conversacional.
Peers. Intercambio de valores. Cálculo de la topología de una red.
Mensajes asincrónicos en lenguajes reales MPI. Extensión de lenguajes secuenciales con bibliotecas
específicas.
Ejemplos.
El concepto de bag of tasks. Espacio de tuplas e interacción entre procesos. Estructuras de datos
distribuidas. Ejemplos
Mensajes sincrónicos
Sintaxis y semántica.
Conceptos de CSP.
Comunicación guardada. Sintaxis y semántica.
Filtros. Clientes y servidores. Asignación de recursos.
Interacción entre procesos paralelos. Ejemplos.
Mensajes sincrónicos en lenguajes reales.
Ejemplos
En la práctica se plantean ejercicios que pueden ser realizados como trabajo experimental sobre
arquitecturas multiprocesador distribuidas (clusters), multiprocesadores con memoria compartida e híbridos.
BIBLIOGRAFÏA
- Andrews G. “Foundations of Multithreaded, Parallel and Distributed Programming”, Addison Wesley, 2000
- Barnes J., “Programming in Ada 2005 with CD”, Addison Wesley, 2006.
- Ben-Ari, M. “Principles of Concurrent and Distributed Programming, 2/E”. Addison-Wesley. 2006. ISBN 0-
321-31283-X
- Chandy, Misra, “Parallel Program Design. A Foundation”, Addison Wesley, 1988.
- Downey, Allen. “The Little Book of Semaphores, Second Edition”. Free book disponible en
http://www.freetechbooks.com/the-little-book-of-semaphores-second-edition-t519.html, 2007.
- Filminas de las clases teóricas.
- Grama A., Gupta A., Karypis G., Kumar V., "An Introduction to Parallel Computing. Design and Analysis
of Algorithms", Pearson Addison Wesley, 2nd Edition, 2003
- Herlihy M., Shavit N., “The Art of Multiprocessor Programming”. Morgan Kaufmann. Revised reprint,
2012.
- Hoare C., “Communicating Sequential Processes”, Englewood Cliffs, Prentice Hall, 1985
- Brinch Hansen, P., “Studies in Computational Science. Parallel Programming Paradigms”, Prentice Hall,
1995.
- Jordan H.F., Alaghband G., Jordan H.E., "Fundamentals of Parallel Computing", Prentice Hall, 2002
- Naiouf, De Giusti A., De Giusti L, Chichizola, “Conceptos de concurrencia y paralelismo”, UNLP, a publicar
2018.
- Pacheco, P. “An introduction to parallel programming”. Morgan Kaufmann, 2011.
- Raynal M. “Concurrent Programming: Algorithms, Principles, and Foundations”. Springer, 2012.
- Taubenfeld, Gadi. “Synchronization Algorithms and Concurrent Programming”. Prentice Hall. 2006.
La cátedra acompaña el proceso de aprendizaje del alumno, para contrastar sus conclusiones y validar su
habilidad para interpretar la evolución tecnológica y su visión de las tendencias futuras
En la evaluación de las competencias en las pruebas parciales y finales se tienen en cuenta los siguientes
aspectos:
- la capacidad para identificar, formular y resolver los problemas, reflejándolo en la corrección de las
pruebas escritas
- la capacidad para conocer e interpretar los conceptos, teorías y métodos, aplicándolos a problemas
concretos. Esto se evalúa a través de preguntas del tipo “donde cree Ud. que es aplicable este
conocimiento o método”, o la interpretación de código, o interpretación de resultados
- en qué medida el alumno es capaz de utilizar de manera efectiva las técnicas y herramientas que son
parte de la asignatura
- los resultados del estudio bibliográfico y capacidad para formular las ventajas potenciales del cambio
tecnológico en los problemas planteados, plasmando esto en una planilla.
Para las clases teóricas y las explicaciones de práctica se utiliza PC, cañón y pizarrón.
Los alumnos pueden realizar prácticas en PC usando distintos lenguajes/bibliotecas que soportan
concurrencia.
EVALUACIÓN
La cátedra acompaña el proceso de aprendizaje del alumno, para contrastar sus conclusiones y validar su
habilidad para interpretar la evolución tecnológica y su visión de las tendencias futuras
En la evaluación de las competencias en las pruebas parciales y finales se tienen en cuenta los siguientes
aspectos:
- la capacidad para identificar, formular y resolver los problemas, reflejándolo en la corrección de las pruebas
escritas
- la capacidad para conocer e interpretar los conceptos, teorías y métodos, aplicándolos a problemas
concretos. Esto se evalúa a través de preguntas del tipo “donde cree Ud. que es aplicable este conocimiento
o método”, o la interpretación de código, o interpretación de resultados
- en qué medida el alumno es capaz de utilizar de manera efectiva las técnicas y herramientas que son parte
de la asignatura
- los resultados del estudio bibliográfico y capacidad para formular las ventajas potenciales del cambio
tecnológico en los problemas planteados, plasmando esto en una planilla.