The hypervisor provides a layer between software environments and physical hardware that has the following characteristics:
Programmable and transparent to the software above it
Makes efficient use of the hardware below it
Virtualization provides a way to bypass interoperability constraints. Virtualizing a system or component such as a processor, memory, or an I/O device at a given abstraction level maps its interface and visible resources onto the interface and resources of an underlying, possibly different, real system. Consequently, the real system appears as a different virtual system or even as multiple virtual systems.