Real time Distributed Applications Development
- Lecturer (Coordinator):
- Santiago Tapia
- stapia@fi.upm.es
- Lecturer:
- Juan Pedro Brito
- jp.brito@fi.upm.es
Semester
First semester
Credits
4 ECTS
Outline
A distributed application is a system consisting of one or more programs running on multiple devices connected to a communication network. If it also requires real-time capability (not strict, i.e., without critical deadlines), the communication and execution times of each program must be bounded and predictable. Hard real-time systems, where failing to meet a time constraint implies a critical failure, are excluded from this course.
Meeting real-time constraints is simpler with a low-level programming language; specifically, using C/C++ is almost mandatory since these are compiled languages that run natively (directly on the physical microprocessor). Between these two languages, C++ will be prioritized as it is an object-oriented language and more suitable for developing potentially very complex systems.
Developing software in C++, especially when the software must meet efficiency and execution time predictability criteria, requires mastering the language and the latest development tools. The course will cover language syntax, object-oriented design, software project compilation management, test automation, version control, software architecture (programs, dynamic libraries, plugins, etc.), all aiming to produce efficient, predictable, and reliable software.
The real-time restriction also generates restrictions with respect to communications. Again, it is not advisable to use middleware that has not been specifically developed for use in real time and that implies increasing the times (or making them unpredictable). In this sense, several middleware alternatives will be studied according to their characteristics and functionalities.
Learning goals
- Understand the methodology, techniques, and tools for C++ software development, particularly those providing efficiency, predictability, and reliability
- Apply the above knowledge to simple development cases
- Understand key concepts regarding real-time distributed applications: synchronization, timing, events and their management, communication design patterns, etc.
- Apply this knowledge to application development
- Understand research challenges in the field of real-time distributed applications
- Apply this knowledge to propose a research line in this area
Syllabus
- Introduction to Real-Time Distributed Applications
- Real-Time Software Development
- C++ Programming
- Software development tools
- Object-Oriented Design
- Applicability of Real-Time Constraints
- Automated Testing and Efficiency Analysis
- Software Modules: Libraries and Plugins
- Events: Synchronous and Asynchronous Methods, and Callbacks
- Middleware for Distributed Applications
- Architecture and Design Patterns for Communications
- Data Marshalling
- Real-Time Middleware Technologies
- Distributed Application Programming in C++
- Monitoring and Debugging: Logging Systems
- Quality of Service: Latency, Reliability, and Scalability in Distributed Systems
Recommended reading
- 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
Lecture Theatre
A-6101
Tuition language
Spanish
Subject-Specific Competences
Code | Competence | Proficiency Level |
---|---|---|
CEM2 | Analysis and synthesis of solutions to problems requiring innovative approaches to the definition of the computational infrastructure, processing and analysis of heterogeneous data types | A |
CEM4 | Analysis and evaluation of several software-based systems construction and management engineering paradigms and approaches | A |
CEM6 | Investigation of the main active research lines in the field of distributed computing paradigms, their practical applications and necessary infrastructure management | C |
Learning Outcomes
Code | Learning Outcome | Associated competences | Proficiency level |
---|---|---|---|
RA-SRSD-41 | Effectively apply software verification and validation techniques | CEM4 | A |
RA-SRSD-60 | Be able to understand research articles in distributed systems | CGI23 | C |
RA-SRSD-88 | Evaluate if a program has been adequately developed following a programming paradigm based on the problem statement | CEM4 | A |
RA-SRSD-52 | Be able to relate an emerging research line in distributed systems to the fundamentals of distributed systems | CEM6, CGI23 | C |
RA-SRSD-49 | Know the main active lines in distributed systems | CGI23 | P |
RA-SRSD-36 | Familiarity with the idea of design and implementation requirement | CEM6, CG7 | A |
RA-SRSD-50 | Be able to find and identify seminal articles in a research area in distributed systems | CG13 | C |
RA-SRSD-51 | Be able to study and analyse a new research area in distributed systems | CG12, CG13 | C |
RA-SRSD-53 | Be able to identify the main challenges addressed by an emerging research line in distributed systems | CG12 | C |
RA-SRSD-15 | Knowledge of techniques for proving code correctness | CEM4 | A |
RA-SRSD-87 | Model a program with the structure of a programming paradigm based on the problem statement | CG4, CG7 | A |
RA-SRSD-14 | Familiarity with the idea of design and implementation requirement | CG7, CG8 | A |
Learning Guide
Learning Guide: Real time Distributed Applications Development