Hierarchical Timing Language


Hierarchical Timing Language (HTL) is a hierarchical coordination language for distributed, hard real-time applications. HTL programs determine portable and predictable real-time behavior of periodic software tasks running on a possibly distributed system of host computers. An HTL program specifies task-to-host mappings, task frequencies, mode switching, and I/O times and dependencies but not task implementations, which are assumed to be done in some general purpose language such as C or Java. A task in HTL is essentially sequential code that reads input, computes, and writes output. HTL offers two fully hierarchical programming constructs: (sequential, conditional, parallel) composition of tasks as well as refinement of abstract into concrete tasks. An abstract task has a frequency, specific I/O times and dependencies, and a worst-case execution time (WCET) but no implementation. An abstract task is a temporally conservative placeholder for a concrete task with an implementation. A concrete task refines an abstract task if the concrete task has the same frequency but more time to compute, i.e., relaxed I/O times and dependencies, and less WCET than the abstract task. The result is that a concrete HTL program is time-safe (schedulable) if it refines a time-safe abstract HTL program. In general, checking refinement in HTL is exponentially faster than checking time safety (schedulability). However, abstract HTL programs are temporally conservative approximations of concrete HTL programs, i.e., there are abstract HTL programs that are not time-safe but for which time-safe refinements exist