Background

With the increasing size and complexity of hard real-time systems, developers are beginning to move away from C. Despite its status as the most popular language in real-time computing, it is relatively low-level, error-prone, and difficult to scale to large systems.

A growing number of real-time developers and researchers are considering Java as an alternative. This much newer language offers direct benefits: Compilers for Java catch many errors that C compilers miss; the language definition specifically addresses safety and security issues; and the high-level nature of Java makes it more productive, maintainable, and portable than C.

In spite of these advances, an essential element is missing. Even when a real-time Java implementation provides deterministic scheduling, priority inversion avoidance, and a real-time garbage collector, no guarantee on the timeliness of the system can be made without knowledge of the worst-case execution time (WCET) for each task.

A dependable and systematic approach to finding the WCET involves a static analysis. Given the executable code for a task and the processor on which it will run, static analysis provides an upper bound on the time taken to execute the task. The following figure shows a high-level sketch of this process for a trivial example.

In practice, static analysis is not so simple. For instance, just-in-time compilation and modern superscalar processors make execution time highly variable. A worst-case static analysis in these environments may yield a value that is very pessimistic compared to observed behavior. Making matters worse, tools for conducting this analysis typically require the developer to digest assembly opcodes, hexadecimal addresses, and other low-level details in order to make sense of the results.

New research in Java-specific processors offers a solution to these problems. Such processors make Java software more predictable, and as a consequence, temporal analysis of a real-time system becomes less computationally intensive. WCET analysis tools based on these processors can thus offer more powerful features at higher levels of abstraction.

Volta is a suite of tools designed for exploring these concepts. It includes Cascade (a control flow analyzer), Clepsydra (a WCET analyzer), Canteen (time-analyzable collection classes), text editor plugins, and a Java compiler modified to support type-safe WCET annotations. Together, these tools provide novel features such as interactive analysis, offering continuous feedback to the developer as the software is written. Planned additions to the suite will enable analysis of distributed hard real-time systems.