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

  1. Introducción a las Aplicaciones Distribuidas en Tiempo Real
  2. Desarrollo de Software para Tiempo Real
    1. Programación en C++
    2. Herramientas para el desarrollo de software
    3. Diseño Orientado a Objetos
    4. Aplicabilidad de la restricción de Tiempo Real
    5. Pruebas automáticas y Análisis de la Eficiencia
    6. Módulos software: librerías y plugins
    7. Eventos: métodos síncronos y asíncronos y callbacks
  3. Middleware para Aplicaciones Distribuidas
    1. Arquitectura y patrones de diseño para comunicaciones
    2. Data marshalling
    3. Tecnologías de Middleware para Tiempo Real
    4. Programación de aplicaciones distribuidas en C++
    5. Monitorización y depuración: sistemas de logging
    6. 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, descripción y nivel de cada una de las competencias específicas de la asignatura
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, descripción, competencias asociadas y nivel de adquisición de cada uno de los resultados de aprendizaje de la asignatura
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