A computing platform generally includes some form of hardware architecture and a software framework (including application frameworks). This combination allows the software to run on the hardware. Typical platforms include a computers hardware and low-level software architecture, its operating system (OS), and related user interfaces (run-time system libraries or graphical user interface). Software is developed for these platforms in a software development environment using programming languages that can make use of extensive libraries and development tools, such as debuggers, etc.
Various known platforms include hardware architecture, such as the Intel x86 processors, Advanced RISC Machine (ARM) architecture, etc. They also make use of different operating systems, such as Windows, Linux, Mac OS, Chrome OS, Meego OS, Android, iOS, Web OS, Palm OS, Windows Mobile, BlackBerry, Embedded Linux, etc. The computing platform is not limited to a particular software framework.
The operating system typically provides an interface between applications and the underlying hardware of the computing device, and provides security, control, access, and sharing of the hardware, including input/output elements and a user interface. However, applications are generally designed to run within the context of a particular operating system, and a user chooses an application to purchase that is specific to the operating system running on the user's device.
In some instances, it is desirable to run an application designed for one operating system on a processor/device using another operating system, and even to run applications designed for different operating systems on a common device simultaneously. This might be the case when, for example, an application exists that has been developed for a first OS and not a second OS. A user having a device running the second OS may wish to run the application on his device with the second OS.
To address this issue, virtualization technology has been developed. Virtualization technology allows one or more virtual machines (VM(s)) (a “machine” which is completely implemented in software) to run concurrently on a single physical hardware element. The software or firmware that creates a virtual machine on the host hardware is called a hypervisor (also known as a Virtual Machine Manager (VMM)). There are different types of virtualizations: full, partial, and para.
The hypervisor provides a software virtualization environment in which other software, including operating systems, can run with the appearance of full access to the underlying system hardware, but where, in fact, such access is under the complete control of the hypervisor. The software running in such a hypervisor managed environment is said to be executing within a VM. Multiple VMs may be managed simultaneously by the hypervisor. Hypervisors are generally classified as Type 1 or Type 2 (FIG. 7), depending on whether the hypervisor is running in supervisor mode or privileged mode directly on top of the hardware itself (Type 1) or is itself hosted by a native operating system of the device (Type 2).
An embedded hypervisor is a Type 1 hypervisor that supports the requirements of embedded systems development and is designed into the embedded device from the outset, rather than loaded subsequent to device deployment. The requirements for a hypervisor architecture suitable for embedded applications is quite distinct from hypervisors aimed at enterprise applications, which have a fundamentally different set of requirements. The requirements for the embedded applications hypervisor architecture are summarized as follows:
A small, fast Type 1 hypervisor with support for multiple VMs;
Support for a relatively simple but secure encapsulation of a moderately complex subsystem components that interact strongly;
High-bandwidth, low-latency communication between system components, subject to a configurable, system-wide security policy;
Minimal impact on system resources & real-time performance; and
An ability to implement a scheduling policy between VMs and provide support for real-time system components.
A further development in the art is that multi-core devices are becoming more and more common. A multi-core device is a device that uses a single physical processor (designed on a single chip) that combines two or more complete execution cores. Advantageously, since each execution core has its own cache, many computational tasks can be performed in parallel. Currently, multi-core host architectures exist in servers, desktop PCs, and notebooks. However, new consumer devices such as mobile phones, tablets, and embedded devices such as set-top boxes and home gateways are also beginning to migrate to a multi-core architecture.