Developing realtime software is a human resource intensive process. Researchers have reported that realtime code can take 4 to 20 times as much effort per line of code as compared to non-realtime code1. Interestingly, non-realtime code when intermingled with realtime code also requires more effort than the same code developed outside a realtime setting. So how do you simplify development of a realtime embedded application?
"Divide and conquer" is one of the most powerful techniques in the developers' toolkit. It's used everyday in non-realtime developments. Splitting a large task into subtasks with a small number of data and control connections makes programming these separate modules a simplified process. Like software developed for human interaction and no realtime component, developers of embedded realtime systems need to separate realtime development from non-realtime development.
As a first step to optimizing the development process, separating the realtime development from the non-realtime development will reduce the effort required to implement the entire system. In addition, partitioning embedded systems into realtime and non-realtime tasks permits developers to offload "cycle counting" to a Virtual Machine Monitor (VMM) or Hypervisor. Apart from questions of whether or not the processor is fast enough to serve all applications on the embedded device, programmers need not be concerned with software interaction timing issues. That's all handled by the VMM or Hypervisor with its attendant scheduling algorithm. Furthermore, developers may work with an OS with which they are already familiar, eliminating a new learning curve.
>Virtualization is the technologythat drives this scenario. And it can start benefiting developers even before the real platform is available. Developers can use tools that employ virtualization as a software, hardware, or co-prototyping tool. Intel® EmbeddedAlliance Affiliate member Green Hills® Software, a long time vendor of virtualization technology, has established a new business unit: Embedded Virtualization Business Unit focused on bringing virtualization approaches to embedded and special computer systems. The embedded unit combines products: INTEGRITY Secure Virtualization (ISV) which supports hosting of Windows, Linux, VxWorks and other general purpose operating systems in secure virtual containers. The new business unit also offers development tools and engineering services to foster diffusion of virtualization technology to embedded systems engineers.
INTEGRITY provides the ability to guarantee CPU availability at both the task and address space levels. Critical tasks and address spaces will always get the CPU time they need, regardless of what any other tasks or address spaces are doing in the system.
For example, in a system with two tasks at the same priority-A and B- if task B spawns 2 subtasks, B1 and B2, INTEGRITY can be configured to force all 3 "B" tasks to equally share the CPU budget originally allocated to task B (50\%). This protects task A from losing any of its allocation as a result of another task's actions.
Software engineering productivity is a function of several factors. Some of the issues affecting development productivity are system configuration techniques and tools, supported high level languages, language specific source level debug tools, event debugging and logging, and higher level systems control.
Development tools available from Green Hills include a Project Wizard that provides a graphical interface permitting developers to choose project attributes like: the number of address spaces desired and whether the image will be loaded dynamically. The Project Wizard manages shared libraries, file systems, TCP/IP stacks, Resource Manager, and debug agents. Other tools include: debug tools including remote debug, the IntegrateTM utility, the MULTI IDE's ResourceAnalyzerTM, the INTEGRITY shell, EventAnalyzerTM, and Optimizing compilers including C, C++, Embedded C++, and Ada 95.
Virtualization itself offers a critical advantage during realtime systems development. Because applications and even the guest Operating System itself can be run within a protected partition, the system can save state information even when an application has a critical fault. By permitting better monitoring of the realtime applications, virtualization aids during the integration, testing and debug phases of development.
There's more to developing embedded systems than realtime applications and operation. User interfaces and other non-realtime operations often play a critical role in the success and effectiveness of embedded systems. By dividing embedded systems components into different VMs each operating the appropriate OS, system development can proceed in parallel. More importantly, non-realtime software can be developed by the more widely available Windows programmer using standard Windows development tools and methodologies.
Adopting virtualization techniques and technologies can simplify the development of embedded systems. It allows engineers to choose the right tool for the job. Why do software development in the same old way when a powerful capability is available to ease the process?
(1) Three essetial publications document relative development costs
Boehm, Barry W., "Software Engineering Economics," PrenticeHall, 1981
Brooks, Frederick P., "The Mythical ManMonth," Addison Wesley, 1995
Tausworthe, Robert C., "Deep Space Network Estimation Model," Jet Propulsion Report 817, 1981.