Desarrollo de Aplicaciones Distribuidas en Tiempo Real
- Profesor (Coordinador):
- Santiago Tapia
- stapia@fi.upm.es
- Profesor:
- Juan Pedro Brito
- jp.brito@fi.upm.es
Semestre
Primer semestre
Créditos
4 ECTS
Resumen
Una aplicación distribuida es un sistema formado por uno o varios programas que se ejecutan en varios dispositivos conectados a una red de comunicaciones. Si, a su vez, se requiere que sea de tiempo real (no estricto, es decir, sin deadlines criticas) es necesario que los tiempos de comunicación y ejecución en cada programa estén acotados y sean previsibles. Se excluyen de esta asignatura los sistemas hard real time, es decir, aquellos sistemas donde no cumplir una restricción de tiempo implica un fallo critico.
Cumplir la restricción de tiempo real es más sencillo si se utiliza un lenguaje de programación cercano a la máquina, más específicamente, el uso de C/C++ resulta una elección casi obligada dado que son lenguajes compilados y se ejecutan en nativo (directamente sobre el microprocesador físico). Entre estos dos lenguajes se va a escoger C++ como prioritario dado que es un lenguaje orientado a objetos y resulta más adecuado para desarrollar sistemas potencialmente muy complejos.
El desarrollo de software en C++ y, especialmente, cuando el software tiene que cumplir criterios de eficiencia y previsibilidad en tiempos de ejecución, exige dominar el propio lenguaje y las últimas herramientas que se utilizan en el desarrollo. Como parte de la asignatura se estudiará: la sintaxis del lenguaje, el diseño orientado a objetos, la gestión de compilación de un proyecto software, la automatización de pruebas, el control de versiones, la arquitectura de software (programas, librerías dinámicas, plugins…), etc. Todo ello con el objetivo de producir un software eficaz, previsible y fiable.
La restricción de tiempo real también genera restricciones respecto de las comunicaciones; de nuevo, no es recomendable el uso de middlewares no desarrollados específicamente para su uso en tiempo real y que impliquen elevar los tiempos (o hacerlos imprevisibles). En este sentido se estudiarán varias alternativas de middlewares según sus características y funcionalidades.
Objetivos
- Conocer la metodología, técnicas y herramientas del desarrollo de software en C++, especialmente, aquellas que proporcionan eficacia, previsibilidad y fiabilidad
- Aplicar el conocimiento anterior a casos simples de desarrollo
- Conocer los conceptos claves respecto del desarrollado de aplicaciones distribuidas en tiempo real: sincronización, temporización, eventos y su gestión, patrones de diseño de comunicaciones, etc.
- Aplicar dichos conocimientos al desarrollo de aplicaciones
- Conocer los desafíos de investigación en el área de las aplicaciones distribuidas en tiempo real
- Aplicar dichos conocimientos al planteamiento de una línea de investigación en esta área
Programa
- Introducción a las Aplicaciones Distribuidas en Tiempo Real
- Desarrollo de Software para Tiempo Real
- Programación en C++
- Herramientas para el desarrollo de software
- Diseño Orientado a Objetos
- Aplicabilidad de la restricción de Tiempo Real
- Pruebas automáticas y Análisis de la Eficiencia
- Módulos software: librerías y plugins
- Eventos: métodos síncronos y asíncronos y callbacks
- Middleware para Aplicaciones Distribuidas
- Arquitectura y patrones de diseño para comunicaciones
- Data marshalling
- Tecnologías de Middleware para Tiempo Real
- Programación de aplicaciones distribuidas en C++
- Monitorización y depuración: sistemas de logging
- Calidad de servicio: latencia, fiabilidad y escalabilidad en sistemas distribuidos
Bibliografía
- Scott Meyers: "Effective C++", Addison-Wesley
- Scott Meyers: "Effective Modern C++", Addison-Wessley, O’Reilly
- George Coulouris: "Distributed System. Concepts and Design", Addison-Wesley
- Pieter Hintjens: "0MQ – The Guide", O’Reilly
Aula
A-6101
Idioma en que se imparte
Español
Competencias Específicas
Código | Competencia | Nivel |
---|---|---|
CEM2 | Analizar y sintetizar soluciones a problemas que requieran aproximaciones novedosas para la definición de la infraestructura computacional que permita el procesamiento y el análisis de datos de diversa naturaleza | A |
CEM4 | Analizar y evaluar los diferentes paradigmas y enfoques de ingeniería de construcción y gestión de sistemas basados en software | A |
CEM6 | Realizar trabajos de investigación en las principales líneas de investigación activas en el área de los paradigmas de la computación distribuida, sus aplicaciones prácticas y la gestión de la infraestructura necesaria | C |
Resultados de Aprendizaje
Código | Resultado de Aprendizaje | Competencias asociadas | Nivel de Adquisición |
---|---|---|---|
RA-SRSD-41 | Aplicar efectivamente las técnicas de verificación y validación de software | CEM4 | A |
RA-SRSD-60 | Ser capaz de entender artículos de investigación en el área de sistemas distribuidos | CGI23 | C |
RA-SRSD-88 | Evaluar si un programa se ha desarrollado adecuadamente siguiendo un paradigma de programación atendiendo al enunciado del problema | CEM4 | A |
RA-SRSD-52 | Ser capaz de relacionar una línea de investigación emergente en sistemas distribuidos con los fundamentos de los sistemas distribuidos | CEM6, CGI23 | C |
RA-SRSD-49 | Conocer principales líneas activas en sistemas distribuidos | CGI23 | C |
RA-SRSD-36 | Familiaridad con la idea de requisito de diseño y de implementación | CEM6, CG7 | A |
RA-SRSD-50 | Ser capaz de encontrar e identificar artículos seminales de un área de investigación en sistemas distribuidos | CG13 | C |
RA-SRSD-51 | Ser capaz de estudiar y analizar un nuevo área de investigación en sistemas distribuidos | CG12, CG13 | C |
RA-SRSD-53 | Ser capaz de identificar los principales retos que aborda una línea de investigación emergente en sistemas distribuidos | CG12 | C |
RA-SRSD-15 | Conocimiento de técnicas para demostrar la corrección del código | CEM4 | A |
RA-SRSD-87 | Modelar un programa con la estructura de un paradigma de programación a partir del enunciado de un problema | CG4, CG7 | A |
RA-SRSD-14 | Familiaridad con la idea de requisito de diseño y aplicación | CG7, CG8 | A |
Guía de Aprendizaje
Guía de aprendizaje: Desarrollo de Aplicaciones Distribuidas en Tiempo Real