Real-time describes an application which requires a response to an event within some small upper bounded time frame. Typically, response times are in the millisecond to microsecond time frame.
Hard real time requires that a response be logically correct and occur before a certain deadline or the result is incorrect, and holds no value.
Soft real-time requires that a response be logically correct and occur before a certain deadline or the result becomes increasingly inaccurate, meaning the result can still hold some value, even though it occurred after the required deadline.
Determinism is simply defined as the ability to rationally predict, with a degree of precision, when an event will happen. Determinism combined with a real-time environment guaranties that an event will happen within a small response time and that the performance of this event is repeatable.
A real-time operating system provides determinism and predictability when it responds to a given event through a specialized scheduler. Examples of common real-time operating systems are IntervalZero® ETS (Embedded Tool Suite) and Wind River VxWorks.
Microsoft® Windows® is usually referred to as a general-purpose operating system because it does not allow applications or kernel-level drivers to completely mask interrupts and gain control over the operating system. Depending on hardware, interrupt latencies under Windows can exhibit very good values, averaging in the microseconds. However, worst-case interrupt latencies are unbounded and can exceed hundreds of milliseconds. Due to these unbound latencies, deterministic response time is not guaranteed, making standard Windows Desktop and Server operating systems unacceptable for real-time use.
Even though there are a lot of similarities between an RTOS and RTX, RTX is not an RTOS. RTX is more appropriately defined as a real-time extension for Microsoft Windows. RTX enhances Windows by providing hard real-time and control capabilities to a general purpose operating system that is familiar to developers and their end users. RTX consists of an extension to the Windows HAL and a separate real-time subsystem (RTSS) that schedules and controls all RTSS applications independently of Windows.
The overall design of RTX affords developers the “best of both worlds” by providing the ability to use all the features, and technologies that Windows offers in addition to “hard” real-time behavior within an isolated and controlled subsystem. The RTX Runtime extends the Windows HAL and provides a real-time subsystem that has its own scheduler, which allows all RTSS applications to be prioritized ahead of all Windows applications or Windows operating system functionality. RTX controls system resources and is guaranteed to execute ahead of all Windows threads, Deferred Procedure Calls (DPCs), and interrupts. This means that RTX allows Windows to run only when all real-time processing is finished.
IntervalZero (formerly Ardence, a Citrix Company) has been developing real-time products since 1984. Initially focused on UNIX, IntervalZero began to support Windows in 1995, when Windows NT 4.0 technology became popular. Since that time, IntervalZero has been committed to providing real-time support for all Microsoft professional operating systems, through RTX.
The latest version of RTX is version 8.1, released in December, 2007.
RTX is packaged as a Runtime, a Runtime with Tools, and a Software Development Kit (SDK).
The RTX Runtime is licensed per machine and comes in two varieties:
The RTX Runtime with Tools is licensed per machine and includes:
The RTX Runtime comes with the following components:
The RTX Runtime with Tools comes with the following components:
The RTX SDK comes with the RTX Runtime environment plus the following components:
With the exception of a few select platforms, the RTX Runtime runs on any COTS platform that Windows supports. RTX supports uniprocessor, mobile processor, multiprocessor, hyper-threading-enabled, and multiple-core platforms. However, since all systems are not the same, developers still need to evaluate their selected platform’s latencies to make sure they are in an acceptable range for their Real-time or control needs.
RTX does not support the following platforms:
RTX supports multiprocessor systems in either of the following configurations:
RTX can be used on mobile processor systems. However, since mobile processors use Intel’s SpeedStep® technology to lowers processor speed during Windows Idle time to conserver energy, long latencies can occur when the processor becomes unavailable for the speed change. RTX eliminates these possible latencies by not allowing the Windows Idle thread to run, removing the possibility of the processor becoming unavailable due to speed changing.
RTX can be used on hyper-threading systems. RTX treats the logical processor created by hyper-threading as a separate processor, so you can configure RTX for either shared or dedicated multiprocessor support.
RTX supports PAE for all versions of Windows that support PAE. DEP is also supported except on an RTX multiprocessor dedicated configuration.
The RTX SDK includes a tool called Platform Evaluator that allows you to run a number of latency-measuring tests to determine which platforms best fit your real-time and control needs.
To deploy your RTSS application, you must provide an RTX Runtime for each system the application will run on.
The RTX Runtime installation program provides a silent install command line option, which allows an OEM to wrap the RTX installation and hide it within another installation.
IntervalZero provides an RTX subsystem configuration interface that allows developers to programmatically configure the RTX subsystem. This allows customer to setup their software’s subsystem requirement without requiring anything of their users.
Since RTX extends Windows, there is no need to spend time designing and developing an operating system before application development work even begins. RTX developers can create user interfaces and applications that take advantage of all the functionality that Windows offers; developers only need to focus on the real-time control pieces required to run an RTSS application. Even components that require real-time control can first be developed as a Windows application and then recompiled as an RTSS application with no code changes.
Since all RTAPI calls are Win32 compliant, developers use calls they already know and understand. There is no need to write driver code or follow a strict driver model to configure and use devices.
RTX 8.1 is backwards compatible to version 6.0.1. This means that any application built with RTX 6.0.1 or greater will run on RTX 8.1, so your existing real-time applications won’t have to be rebuilt with each new version of the software, unless you want to take advantage of new features and functionality.
No. You develop RTSS applications with Microsoft Visual Studio. The RTX SDK provides wizards for easy project creation and templates to help get you started. A Visual Studio Debugger Add-in lets you debug RTSS applications in a familiar environment. Because RTSS applications run in Ring 0, they can also be debugged with a kernel-level debugger such as Microsoft WinDbg. The RTX SDK includes an RTX Debugger Data Extension for WinDbg that allows you to view active RTSS processes and objects.
RTX was designed so developers could design and develop applications first as Win32 applications so they could take advantage of features like Ring 3 memory protection and 3rd party debugging tools. Then, once an application is working as designed, just recompile it as an RTSS application, which runs in Ring 0 with no code changes required.
Unlike other applications that run in Ring 0, RTSS application support structured exception handling. RTX lets developers call structured exception handling functions like try, catch, and throw within their RTSS application. For example, if an application references a NULL pointer, the application can handle the error without bringing down the system by terminating or freezing the faulting application.
RTX supports a subset of Microsoft C Runtime calls that you can call from your RTSS application. RTX provides C Runtime Support for Visual Studio 6.0, .NET, .NET 2003, and 2005.
A kernel debugger is not necessary to debug an RTSS application. The RTX SDK includes Visual Studio debugger add-ins that let developers debug Ring 0 real-time or control applications in the familiar Visual Studio development environment. The debugger add-ins for Visual Studio 2005 and Visual Studio .NET 2003 also support remote debugging so developers can remotely debug an RTSS application on a target system that has special hardware requirements.
The RTX SDK provides a tool called TimeView that lets you set up a system trace on an event for a set time period. These system traces log and time stamp a configurable set of system and process events, allowing developers to trace the behavior of their real-time application with minimal impact on their systems real-time performance. The RTAPI also provides the ability to instrument tracing functionality within RTSS application.
RTX provides a number of tools that help developers measure system response and timer latency:
Thread and object creation involves the allocation of several small RTSS structures in addition to the initial space allocated for the thread stack. There are no subsystem limitations on the number of threads, which are limited only by the amount of available non-paged memory.
RTX lets Win32 and RTSS applications communicate through a number of inter-process communication objects (IPC). Use the RTAPIs to create objects that can be viewed and used by Windows processes. Similar to Windows inter-process communication, RTSS and Windows applications create or open handles to named objects or memory regions, allowing simple and standard communication and synchronization between real-time (RTSS) and non-real-time (Windows) applications. Shared memory regions allow Windows and RTSS applications to view the same physical memory without additional messaging or data passing between environments.
RTX acquires the resources the device needs from the Windows Plug and Play Manager. To do this, a device’s driver must be updated to point to the RTX plug and play stub driver. Once the device is controlled by RTX, the device’s resources must be updated to request a unique interrupt that is not already being used by Windows. (Sharing interrupts with Windows would cause determinism to be lost.) Once the device is set up, any RTSS application can access and use the device.
RTX includes a real-time enabled Hardware Abstraction Layer (HAL) extension; this extension does not replace the existing Windows HAL. The extension maintains interrupt isolation between RTSS and Windows. Windows cannot mask (at the interrupt controller level) interrupts managed by RTSS. Windows interrupts are masked during RTSS processing. The real-time HAL extension supports high-resolution clocks and timers for RTSS, while it also supports non real-time clocks and timers for Windows. Other real-time HAL extension features include a software interrupt mechanism between RTSS and Windows, basic exception management, and enhancements for determinism. The HAL timer values can be changed via a predefined value table to as little as 1µs, or can be assigned a custom value using the SDK.