My main research focus is on real-time systems. Those are systems that interact with the real-world environment and so must be syncronized with it. Roughly speaking, a real-time system can be divided into two classes, soft and hard. The latter has stricter timing constraints compared to the former. Indeed, if a hard real-time system fails to provide a given service in a timely manner catastrophes may occur (this definition is the usual, although it brings some extremeness in it). In contrast, timing failures in a soft real-time system is tolerated, although not desired. There are a number of fundamental problems to be solved when trying to guarantee the real-time system correctness. Some of them are part of my research interests.

Real-Time Scheduling. The computation of a typical real-time system is structured as a set of computational tasks. Tasks have attributes such as deadlines, computational costs, period etc. Determining the best possible way of scheduling a set of real-time tasks is a fundamental problem in real-time systems. This involves policies to choose the task to be executed over time (scheduling policies) and mechanisms to prove that the system does not violate its timeliness (scheduling analysis). Research in this area is mainly focused on providing suitable scheduling policies and analyses that take into account a broad spectrum of application needs such as integrability, flexibility, graceful degradation, energy savings etc. I am currently interested in developing new scheduling algorithms taking into consideration those aspects. A current hot topic I am working on includes the development of new efficient scheduling algorithms for multiprocessor and multicore real-time systems.

Fault Tolerance. Faults in any computational system are unavoidable. So, there is a need to design a system that is correct even in the presence of faults. Designing such a fault-tolerant system is a challenge since faults and error occurrences are unexpected by definition. Making a system fault tolerant is providing enough redundancy so that its robustness is increased. For real-time systems increasing robustness means raising computational costs, which in turn have to be taken into account by the scheduling mechanisms. Also, a redundant system usually makes use of a distributed/parallel architecture and so the problem of coordinating the distributed computation has to be considered.

Distributed Systems. Nowadays distributed real-time systems are reality. Modern cars have dozens of processors interconnected by a communication network. A number of other examples can also be given in industrial control plants, avionic systems etc. Dealing with a distributed configuration, however, makes the designing of real-time systems more difficult. Distributed tasks, which cooperate through the network, have to be synchronized to avoid temporal interference of one on another, for example. The challenge here is to design distributed protocols (consensus, messaging ordering, membership control etc) in order to provide powerful abstraction that make the implementation of correct real-time application easier. Designing distributed protocols that preserve timeliness without compromising flexibility is an interesting research field.

Real-Time Networks. This is the main shared resource in a distributed real-time system. There are several types of communication network used in the real-time systems domain. Some of them are proprietary and/or have high costs. Fieldbuses are the tipical solution used in the industry. There is a trend to use open-standard, general purpose networks for supporting real-time systems, which include general purpose solutions such as Ethernet and Wireless protocols. Doing so is advantageous, since one can benefit form the low cost, high bandwidth, flexibility and integrability. However, as these general purpose communication networks have probabilistic behavior, their use in the real-time domain must be done with care.