I arrived safe and sound at the Embedded Systems Conference in Boston today. It's been a few years since I have attended ESC, but it all came back to me quickly, and is just as I remember it, a lot of small booths with vendors showing small boards doing something (hopefully something interesting and not something small).
The most interesting talk I attended was Virtualization for Embedded and Real-Time Systems. Virtualization is one of favorite topics to follow as I'm pretty sure it has many applications in both embedded systems and for EDA tools that have yet to be realized. This talk was a 90 minute session jammed with all things related to virtualization by somebody who clearly has spent years understanding and implementing many types of virtualization.
I found a good wikipedia page that is a good summary of some of the material that was covered.
One of the primary applications in embedded systems is to use virtualization to run multiple operating systems on a single CPU. This is not unlike server applications in a data center, but in embedded applications the operating systems are heterogeneous. Often times one of the operating systems is a legacy OS and the other is a general purpose OS like Linux. This enables cost reduction of hardware as processors get faster since multiple boards can be replaced by a single board. Another example that seems to be popular among the embedded virtualization vendors is to run the protocol stack for making phone calls on the mobile phone in one virtual machine and the general purpose OS that handles the display, other peripherals, and all the applications in another virtual machine. This way the user cannot download and run poorly behaved applications that might interfere with the core capability of making phone calls. Trango is another vendor working in this area. The concept sounds very promising to keep the games, e-mail, and web browsing from causing poor call quality.
If you can follow and understand the picture below you have a good start at understanding commonly used virtualization techniques. This is just the first level. For every one of these there are interesting topics such as using virtualization to improve software debugging and to profile software execution.
There are multiple talks on the ESC program about virtualization. It seems to be one of the hot topics in embedded software. This talk definitely helped me understand all of the kinds of virtualization and gave me a better understanding of how many of them work, including the VMware that I use everyday.
I would love to hear about other applications or ideas on how virtualization is being used or could be used.