I. Introduction
Embedded systems are often resource-constrained, with the hardware being able to support only a limited amount of functionality. They also usually host a given number of tasks, that should be periodically completed in order for the system to work correctly. An instance of task execution is commonly called job. The real-time design of these systems ensures that all jobs meet their deadlines, i.e., they complete their computation within the time specified by the system designer. However, this often leads to the system design being conservative, in terms of the execution frequency of the tasks. The conservatism can lead to low processor utilisation (i.e., the hardware is often idle) and low tasks’ sampling rates (i.e., tasks – among which the controller – execute infrequently).