How can we take a programming language off the shelf and upgrade it into a real-time programming language? Programs such as device drivers and plant controllers must explicitly refer and react to time. For this purpose, a variety of language constructs--including delays, timeouts, and watchdogs--has been put forward. We advocate an alternative answer, namely, to designate certain program variables as clock variables. The value of a clock variable changes as time advances. Timing constraints can be expressed, then, by conditions on clock values. A single new language construct--the guarded wait statement--suffices to enforce the timely progress of a program. The usage of clock variables and the guarded wait statement is illustrated with real-time applications such as round-robin (timeout-driven) scheduling, priority (interrupt-driven) scheduling, and embedded process control.
Theories and Experiences for Real-time System Development (T. Rus, C. Rattray, eds.), AMAST Series in Computing 2, World Scientific, 1994, pp. 1-29.