0% encontró este documento útil (0 votos)
74 vistas

Programacion Concurrente 2020

Este documento presenta la materia Programación Concurrente de tercer año en la carrera de Licenciatura en Informática de la UNLP. La materia introduce conceptos fundamentales de concurrencia en software como procesos concurrentes, sincronización, y comunicación. Los objetivos son analizar la especificación y semántica de la concurrencia, estudiar sistemas concurrentes compuestos por hardware, sistemas operativos y algoritmos, y desarrollar habilidades prácticas usando diferentes lenguajes y herramientas. La materia cubre temas como especific

Cargado por

Jimena Pardo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
74 vistas

Programacion Concurrente 2020

Este documento presenta la materia Programación Concurrente de tercer año en la carrera de Licenciatura en Informática de la UNLP. La materia introduce conceptos fundamentales de concurrencia en software como procesos concurrentes, sincronización, y comunicación. Los objetivos son analizar la especificación y semántica de la concurrencia, estudiar sistemas concurrentes compuestos por hardware, sistemas operativos y algoritmos, y desarrollar habilidades prácticas usando diferentes lenguajes y herramientas. La materia cubre temas como especific

Cargado por

Jimena Pardo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 16

Carrera/ Plan:

Programación Concurrente Licenciatura en Informática Plan 2015/Plan 2012/Plan 2003-07


Licenciatura en Sistemas Plan 2015/Plan 2012/Plan 2003-07
Analista Programador Universitario Plan 2015/Plan 2007
Año: 3ro
Régimen de Cursada: Semestral (2do semestre)
Carácter (Obligatoria/Optativa): Obligatoria
Correlativas: Introducción a los Sistemas Operativos-
Año 2020 Seminario de Lenguajes- Taller de Lecto-comprensión y
Traducción en Inglés
Profesor/es: Marcelo Naiouf, Franco Chichizola, Laura De
Giusti, Enzo Rucci
Hs. semanales:6

FUNDAMENTACIÓN

La temática de la Concurrencia es central en el desarrollo de la Ciencia Informática, en particular por el


creciente desarrollo de arquitecturas multiprocesador que permiten implementar físicamente los conceptos
teóricos de concurrencia “real”.
El impacto de la concurrencia se refleja en diferentes ámbitos de la disciplina tales como las arquitecturas,
los sistemas operativos, los lenguajes y el diseño y desarrollo de aplicaciones. En este sentido, se impone
que los futuros profesionales sean capaces de desarrollar soluciones que utilicen adecuadamente la
tecnología disponible con fundamentos teóricos firmes.

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,

Calle 50 y 120 | C.P.1900 | La Plata | Buenos Aires | República Argentina


Tel.: (54) 221-427-7270/71| www.info.unlp.edu.ar
diseño, implementación, prueba, verificación, validación, mantenimiento y control de eficiencia de los
sistemas de administración de recursos que se implanten como software de base de datos sobre
sistemas de procesamiento de datos, incluyendo la virtualización de recursos físicos y lógicos.
- LS-CE1. Planificar, dirigir, realizar y/o evaluar proyectos de relevamiento de problemas del mundo
real. Especificación formal, diseño, implementación, prueba, verificación, validación, mantenimiento
y control de calidad de sistemas de software que se ejecuten sobre sistemas 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.
- LS-CE10. Analizar y evaluar proyectos de especificación, diseño, implementación, verificación,
puesta a punto y mantenimiento de redes de comunicaciones que vinculen sistemas de
procesamiento de datos.
- LS-CE8. Planificar, dirigir, realizar y/o evaluar proyectos de sistemas de administración de recursos.
Especificación formal de los mismos, diseño, implementación, prueba, verificación, validación,
mantenimiento y control de eficiencia/calidad de los sistemas de administración de recursos que se
implanten como software sobre sistemas de procesamiento de datos.

CONTENIDOS MINIMOS (de acuerdo al Plan de Estudios)

 Especificación de la ejecución concurrente.


 Comunicación y sincronización.
 Concurrencia con variables compartidas.
 Concurrencia con pasajes de mensajes.
 Lenguajes de programación concurrente.
 Introducción a los conceptos de procesamiento paralelo.

Calle 50 y 120 | C.P.1900 | La Plata | Buenos Aires | República Argentina


Tel.: (54) 221-427-7270/71| www.info.unlp.edu.ar
PROGRAMA ANALÍTICO

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.

3. Concurrencia con variables compartidas


Sincronización por variables compartidas
Sincronización de grano fino.
Secciones críticas (SC). Definición del problema. Propiedades necesarias de las soluciones.
Soluciones de tipo spin-locks al problema de la SC.
Algoritmos clásicos de soluciones fair al problema de la SC (tie-breaker, ticket, bakery).
Implementación de sentencias Await arbitrarias.
Sincronización barrier. Definición. Planteo de soluciones (contador compartido, flags y coordinadores,
árboles, barreras simétricas, butterfly).
Algoritmos data parallel. Ejemplo: Computación de prefijos.

Sincronización por semáforos


Semáforos. Sintaxis y semántica. Usos básicos y técnicas de programación.
Soluciones a SC y barreras.
Semáforos binarios divididos (split).
Exclusión mutua selectiva.
La técnica “passing the baton”. Definición y aplicaciones.
Sincronización por condición general.
Alocación de recursos. Políticas de alocación. SJN.
Ejemplos clásicos: filósofos, lectores/escritores, productores/consumidores con buffer limitado, etc.
Semáforos en lenguajes reales: Pthreads. Ejedmplos.

Calle 50 y 120 | C.P.1900 | La Plata | Buenos Aires | República Argentina


Tel.: (54) 221-427-7270/71| www.info.unlp.edu.ar
Sincronización por monitores
Evolución histórica a partir de semáforos. Conceptos de regiones críticas condicionales.
Monitores. Sintaxis y semántica.
Sincronización en monitores.
Disciplinas de señalización: “Signal and wait“ y “Signal and continue”: diferencias y efecto sobre la
programación.
La técnica “passing the condition”.
Ejemplos clásicos: buffer limitado, lectores y escritores, alocación, etc.
Diseño de un reloj lógico. Alternativas.
El problema del peluquero: rendezvous.
Scheduling de discos. Ejemplo. Enfoques alternativos para la sincronización.
Monitores en lenguajes reales: Java, Pthreads. Ejemplos.

Implementaciones
Conceptos de implementación de procesos en arquitecturas mono y multiprocesador.
Kernel monoprocesador y multiprocesador.

4. Programación distribuida. Concurrencia con pasaje de mensajes

Programas distribuidos. Definición.


Relación entre mecanismos de comunicación.
Clases básicas de procesos: productores y consumidores, clientes y servidores, peers.
Control de concurrencia en Sistemas Distribuidos.

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

Remote Procedure Calls y Rendezvous.


Sintaxis y semántica. Similitudes y diferencias.
RPC: Sincronización en módulos.
Discusión revisada de aplicaciones.
RPC en lenguajes reales: Java. RMI. Ejemplos.
Rendezvous en lenguajes reales: Ada. Tasks y sincronización. Ejemplos

Primitivas múltiples y otros enfoques


Sintaxis y semántica.
MPD. Componentes de programa. Comunicación y sincronización. Ejemplos
Conceptos básicos sobre otros lenguajes/plataformas

Calle 50 y 120 | C.P.1900 | La Plata | Buenos Aires | República Argentina


Tel.: (54) 221-427-7270/71| www.info.unlp.edu.ar
Implementaciones
Conceptos de implementación de mecanismos de comunicación y sincronización en ambientes
distribuidos.

5. Paradigmas de interacción entre procesos distribuidos


Resolución de problemas mediante diferentes paradigmas de interacción entre procesos: Servidores
replicados, heartbeat, pipeline, prueba-eco, broadcast, token passing, manager/workers.
Ejemplos. Comparación de alternativas.

6. Introducción a la Programación Paralela


Objetivos del cómputo paralelo. Necesidad del paralelismo. Areas de aplicación.
Computación científica.
Diseño de algoritmos paralelos.
Métricas. Conceptos de speedup y eficiencia.
La ley de Amdahl y la ley de Gustafson.
Concepto de escalabilidad.

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.

Calle 50 y 120 | C.P.1900 | La Plata | Buenos Aires | República Argentina


Tel.: (54) 221-427-7270/71| www.info.unlp.edu.ar
METODOLOGÍA DE ENSEÑANZA

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)

La actividad curricular se organiza en:


- clases teóricas, a cargo de un profesor (en dos horarios, de mañana y de tarde), en las cuales se
imparten los temas de la asignatura. Los alumnos podrán asistir a cualquiera de los dos horarios.
- explicaciones de práctica, a cargo de un profesor y/o JTP, y que actúan a modo de articulación entre
teoría y práctica y donde se plantean y resuelven problemas “tipo”.
- clases prácticas, a cargo de auxiliares docentes (ayudantes coordinados por JTP, en horario de mañana,
tarde y sábados a la mañana), donde los alumnos trabajan sobre los ejercicios propuestos en la guía de
trabajos prácticos. Los alumnos pueden asistir indistintamente a cualquiera de los horarios (o a los tres).
- clases de consulta (de teoría y práctica).
- periódicamente se publican cuestionarios de teoría a modo de guía a fin de que los alumnos reflexionen
sobre los puntos más importantes.
El reglamento y cronograma tentativo son conocidos por los alumnos desde el inicio de la actividad
curricular.
Se utiliza un entorno virtual de enseñanza-aprendizaje (IDEAS), donde se encuentran disponibles clases,
guías de TP, avisos, resultados de exámenes, 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.

Calle 50 y 120 | C.P.1900 | La Plata | Buenos Aires | República Argentina


Tel.: (54) 221-427-7270/71| www.info.unlp.edu.ar
Para obtener la cursada se debe aprobar un parcial que tendrá 2 recuperatorios, con las siguientes pautas:
- La primera fecha del parcial se tomará divida en dos instancias, una correspondiente a memoria
compartida y otra a memoria distribuida.
- Si el alumno aprueba ambas instancias obtiene la cursada
- Si el alumno aprueba una de las instancias podrá obtener la cursada aprobando el otro tema en las
fechas de recuperatorio.
- Si el alumno no aprueba ninguna de las instancias en la primera fecha, deberá rendir y aprobar ambos
temas utilizando las fechas de recuperatorio.
- Se considerarán en condición de “Desaprobado” los alumnos que no obtengan la cursada y que rindan
y obtengan “D” al menos en 2 de las 3 fechas de evaluación parcial (considerando como una a las dos
instancias de la primera fecha).

El final puede aprobarse de dos maneras:


a) Final tradicional (teórico-práctico) en mesa de finales.
b) Alternativamente y de tipo opcional, cumpliendo las siguientes condiciones (cada una tiene como
precondición cumplir con la anterior):
i) Rendir los 2 parcialitos teóricos que se tomarán junto con las instancias de la primera fecha de
parcial.
ii) Luego de aprobar la cursada, rendir y aprobar un parcial teórico.
iii) Cumplido ii):
- si la nota del parcial teórico es >= 7 el alumno queda habilitado para rendir un coloquio en
mesa de final dentro del semestre siguiente.
- si la nota del parcial teórico es >=4 y <7, se asigna un trabajo individual. El mismo debe ser
desarrollado y defendido en un coloquio en fecha de final dentro del semestre siguiente.
En caso de presentarse a rendir final tradicional, la promoción de teoría caduca.

Calle 50 y 120 | C.P.1900 | La Plata | Buenos Aires | República Argentina


Tel.: (54) 221-427-7270/71| www.info.unlp.edu.ar
CRONOGRAMA DE CLASES Y EVALUACIONES

El comienzo de clases está previsto para la semana del 10 de agosto.


El cronograma detallado se pone en conocimiento de los alumnos al inicio del curso.
El esquema preliminar por bloque de las clases y evaluaciones es el siguiente:

Clase Fecha Contenidos/Actividades


Semanas 10/8 y Conceptos básicos. Comunicación y sincronización. Interferencia.
1y2
17/8
Semanas 24/8 Concurrencia con memoria compartida.
3a6
al 14/9
Semanas 21/9 Concurrencia con memoria distribuida
7a9
al 12/10
10 Semana 19/10 Introducción a la Programación Paralela.

Evaluaciones previstas Fecha

1ra instancia de la 1ra fecha Semana del 5/10

2da instancia de la 1ra fecha Semana del 9/11

1er recuperatorio Semana del 23/11

2do recuperatorio Semana del 14/12

Parcial teórico Semana del 8/2/2021

Contacto de la cátedra (mail, página, plataforma virtual de gestión de cursos):

Plataforma virtual: ideas.info.unlp.edu.ar


Web: weblidi.info.unlp.edu.ar/catedras/concurrente/WEB/
Mail: [email protected], [email protected], [email protected],
[email protected]

Firma del/los profesor/es

Calle 50 y 120 | C.P.1900 | La Plata | Buenos Aires | República Argentina


Tel.: (54) 221-427-7270/71| www.info.unlp.edu.ar
Carrera/ Plan:

Programación Concurrente (Redictado) Licenciatura en Informática Plan 2015/Plan 2012/Plan 2003-07


Licenciatura en Sistemas Plan 2015/Plan 2012/Plan 2003-07
Analista Programador Universitario Plan 2015/Plan 2007
Año: 3ro
Régimen de Cursada: Semestral (1er semestre)
Carácter (Obligatoria/Optativa): Obligatoria
Correlativas: Introducción a los Sistemas Operativos-
Año 2020 Seminario de Lenguajes- Taller de Lecto-comprensión y
Traducción en Inglés
Profesor/es: Marcelo Naiouf, Franco Chichizola, Laura De
Giusti
Hs. semanales:6

FUNDAMENTACIÓN

La temática de la Concurrencia es central en el desarrollo de la Ciencia Informática, en particular por el


creciente desarrollo de arquitecturas multiprocesador que permiten implementar físicamente los conceptos
teóricos de concurrencia “real”.
El impacto de la concurrencia se refleja en diferentes ámbitos de la disciplina tales como las arquitecturas,
los sistemas operativos, los lenguajes y el diseñdo y desarrollo de aplicaciones. En este sentido, se impone
que los futuros profesionales sean capaces de desarrollar soluciones que utilicen adecuadamente la
tecnología disponible con fundamentos teóricos firmes.

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,

Calle 50 y 120 | C.P.1900 | La Plata | Buenos Aires | República Argentina


Tel.: (54) 221-427-7270/71| www.info.unlp.edu.ar
diseño, implementación, prueba, verificación, validación, mantenimiento y control de eficiencia de los
sistemas de administración de recursos que se implanten como software de base de datos sobre
sistemas de procesamiento de datos, incluyendo la virtualización de recursos físicos y lógicos.
- LS-CE1. Planificar, dirigir, realizar y/o evaluar proyectos de relevamiento de problemas del mundo
real. Especificación formal, diseño, implementación, prueba, verificación, validación, mantenimiento
y control de calidad de sistemas de software que se ejecuten sobre sistemas 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.
- LS-CE10. Analizar y evaluar proyectos de especificación, diseño, implementación, verificación,
puesta a punto y mantenimiento de redes de comunicaciones que vinculen sistemas de
procesamiento de datos.
- LS-CE8. Planificar, dirigir, realizar y/o evaluar proyectos de sistemas de administración de recursos.
Especificación formal de los mismos, diseño, implementación, prueba, verificación, validación,
mantenimiento y control de eficiencia/calidad de los sistemas de administración de recursos que se
implanten como software sobre sistemas de procesamiento de datos.

CONTENIDOS MINIMOS (de acuerdo al Plan de Estudios)

 Especificación de la ejecución concurrente.


 Comunicación y sincronización.
 Concurrencia con variables compartidas.
 Concurrencia con pasajes de mensajes.
 Lenguajes de programación concurrente.
 Introducción a los conceptos de procesamiento paralelo.

Calle 50 y 120 | C.P.1900 | La Plata | Buenos Aires | República Argentina


Tel.: (54) 221-427-7270/71| www.info.unlp.edu.ar
PROGRAMA ANALÍTICO

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.

3. Concurrencia con variables compartidas


Sincronización por variables compartidas
Sincronización de grano fino.
Secciones críticas (SC). Definición del problema. Propiedades necesarias de las soluciones.
Soluciones de tipo spin-locks al problema de la SC.
Algoritmos clásicos de soluciones fair al problema de la SC (tie-breaker, ticket, bakery).
Implementación de sentencias Await arbitrarias.
Sincronización barrier. Definición. Planteo de soluciones (contador compartido, flags y coordinadores,
árboles, barreras simétricas, butterfly).
Algoritmos data parallel. Ejemplo: Computación de prefijos.

Sincronización por semáforos


Semáforos. Sintaxis y semántica. Usos básicos y técnicas de programación.
Soluciones a SC y barreras.
Semáforos binarios divididos (split).
Exclusión mutua selectiva.
La técnica “passing the baton”. Definición y aplicaciones.
Sincronización por condición general.
Alocación de recursos. Políticas de alocación. SJN.
Ejemplos clásicos: filósofos, lectores/escritores, productores/consumidores con buffer limitado, etc.
Semáforos en lenguajes reales: Pthreads. Ejedmplos.

Calle 50 y 120 | C.P.1900 | La Plata | Buenos Aires | República Argentina


Tel.: (54) 221-427-7270/71| www.info.unlp.edu.ar
Sincronización por monitores
Evolución histórica a partir de semáforos. Conceptos de regiones críticas condicionales.
Monitores. Sintaxis y semántica.
Sincronización en monitores.
Disciplinas de señalización: “Signal and wait“ y “Signal and continue”: diferencias y efecto sobre la
programación.
La técnica “passing the condition”.
Ejemplos clásicos: buffer limitado, lectores y escritores, alocación, etc.
Diseño de un reloj lógico. Alternativas.
El problema del peluquero: rendezvous.
Scheduling de discos. Ejemplo. Enfoques alternativos para la sincronización.
Monitores en lenguajes reales: Java, Pthreads. Ejemplos.

Implementaciones
Conceptos de implementación de procesos en arquitecturas mono y multiprocesador.
Kernel monoprocesador y multiprocesador.

4. Programación distribuida. Concurrencia con pasaje de mensajes

Programas distribuidos. Definición.


Relación entre mecanismos de comunicación.
Clases básicas de procesos: productores y consumidores, clientes y servidores, peers.
Control de concurrencia en Sistemas Distribuidos.

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

Remote Procedure Calls y Rendezvous.


Sintaxis y semántica. Similitudes y diferencias.
RPC: Sincronización en módulos.
Discusión revisada de aplicaciones.
RPC en lenguajes reales: Java. RMI. Ejemplos.
Rendezvous en lenguajes reales: Ada. Tasks y sincronización. Ejemplos

Primitivas múltiples y otros enfoques


Sintaxis y semántica.
MPD. Componentes de programa. Comunicación y sincronización. Ejemplos
Conceptos básicos sobre otros lenguajes/plataformas

Calle 50 y 120 | C.P.1900 | La Plata | Buenos Aires | República Argentina


Tel.: (54) 221-427-7270/71| www.info.unlp.edu.ar
Implementaciones
Conceptos de implementación de mecanismos de comunicación y sincronización en ambientes
distribuidos.

5. Paradigmas de interacción entre procesos distribuidos


Resolución de problemas mediante diferentes paradigmas de interacción entre procesos: Servidores
replicados, heartbeat, pipeline, prueba-eco, broadcast, token passing, manager/workers.
Ejemplos. Comparación de alternativas.

6. Introducción a la Programación Paralela


Objetivos del cómputo paralelo. Necesidad del paralelismo. Areas de aplicación.
Computación científica.
Diseño de algoritmos paralelos.
Métricas. Conceptos de speedup y eficiencia.
La ley de Amdahl y la ley de Gustafson.
Concepto de escalabilidad.

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.

Calle 50 y 120 | C.P.1900 | La Plata | Buenos Aires | República Argentina


Tel.: (54) 221-427-7270/71| www.info.unlp.edu.ar
METODOLOGÍA DE ENSEÑANZA

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.

La actividad curricular se organiza en:


- clases teóricas, a cargo de un profesor, en las cuales se imparten los temas de la asignatura.
- explicaciones de práctica, a cargo de un profesor y/o JTP, y que actúan a modo de articulación entre
teoría y práctica y donde se plantean y resuelven problemas “tipo”.
- clases prácticas, a cargo de auxiliares docentes (ayudantes coordinados por JTP) en diferentes horarios,
donde los alumnos trabajan sobre los ejercicios propuestos en la guía de trabajos prácticos. Los alumnos
pueden asistir indistintamente a cualquiera de los horarios (o a todos).
- clases de consulta (de teoría y práctica).
- periódicamente se publican cuestionarios de teoría a modo de guía a fin de que los alumnos reflexionen
sobre los puntos más importantes.
El reglamento y cronograma tentativo son conocidos por los alumnos desde el inicio de la actividad
curricular.
Se utiliza un entorno virtual de enseñanza-aprendizaje (IDEAS), donde se encuentran disponibles clases,
guías de TP, avisos, resultados de exámenes, 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.

Calle 50 y 120 | C.P.1900 | La Plata | Buenos Aires | República Argentina


Tel.: (54) 221-427-7270/71| www.info.unlp.edu.ar
Para obtener la cursada se debe aprobar un parcial que tendrá 2 recuperatorios, con las siguientes pautas:
- La primera fecha del parcial se tomará divida en dos instancias, una correspondiente a memoria
compartida y otra a memoria distribuida.
- Si el alumno aprueba ambas instancias obtiene la cursada
- Si el alumno aprueba una de las instancias podrá obtener la cursada aprobando el otro tema en las
fechas de recuperatorio.
- Si el alumno no aprueba ninguna de las instancias en la primera fecha, deberá rendir y aprobar ambos
temas utilizando las fechas de recuperatorio.
- Se considerarán en condición de “Desaprobado” los alumnos que no obtengan la cursada y que rindan
y obtengan “D” al menos en 2 de las 3 fechas de evaluación parcial (considerando como una a las dos
instancias de la primera fecha).

El final puede aprobarse de dos maneras:


a) Final tradicional (teórico-práctico) en mesa de finales.
b) Alternativamente y de tipo opcional, cumpliendo las siguientes condiciones (cada una tiene como
precondición cumplir con la anterior):
i) Rendir los 2 parcialitos teóricos que se tomarán junto con las instancias de la primera fecha de
parcial.
ii) Luego de aprobar la cursada, rendir y aprobar un parcial teórico.
iii) Cumplido ii):
- si la nota del parcial teórico es >= 7 el alumno queda habilitado para rendir un coloquio en
mesa de final dentro del semestre siguiente.
- si la nota del parcial teórico es >=4 y <7, se asigna un trabajo individual. El mismo debe ser
desarrollado y defendido en un coloquio en fecha de final dentro del semestre siguiente.
En caso de presentarse a rendir final tradicional, la promoción de teoría caduca.

Calle 50 y 120 | C.P.1900 | La Plata | Buenos Aires | República Argentina


Tel.: (54) 221-427-7270/71| www.info.unlp.edu.ar
CRONOGRAMA DE CLASES Y EVALUACIONES

El comienzo de clases está previsto para la semana del 9 de marzo.


El cronograma detallado se pone en conocimiento de los alumnos al inicio del curso.
El esquema preliminar por bloque de las clases y evaluaciones es el siguiente:

Clase Fecha Contenidos/Actividades


Semanas 9/3 y Conceptos básicos. Comunicación y sincronización. Interferencia.
1y2
16/3
Semanas 23/3 Concurrencia con memoria compartida.
3a6
al 13/4
Semanas 20/4 Concurrencia con memoria distribuida
7a9
al 11/5
10 Semana 18/5 Introducción a la Programación Paralela.

Evaluaciones previstas Fecha

1ra instancia de la 1ra fecha Semana del 4/5

2da instancia de la 1ra fecha Semana del 8/6

1er recuperatorio Semana del 22/6

2do recuperatorio Semana del 6/7

Parcial teórico Semana del 3/8

Contacto de la cátedra (mail, página, plataforma virtual de gestión de cursos):

Plataforma virtual: ideas.info.unlp.edu.ar


Web: weblidi.info.unlp.edu.ar/catedras/concurrente/WEB/
Mail: [email protected], [email protected], [email protected],

Firma del/los profesor/es

Calle 50 y 120 | C.P.1900 | La Plata | Buenos Aires | República Argentina


Tel.: (54) 221-427-7270/71| www.info.unlp.edu.ar

También podría gustarte