System virtual machines
See also:
Hardware virtualization and
Comparison of platform virtual machines
System virtual machines (sometimes called
hardware virtual machines) allow the sharing of the underlying physical machine resources between different virtual machines, each running its own operating system. The software layer providing the virtualization is called a
virtual machine monitor or
hypervisor. A hypervisor can run on bare hardware (
Type 1 or
native VM) or on top of an operating system (
Type 2 or
hosted VM).
The main advantages of system VMs are:
- multiple OS environments can co-exist on the same computer, in strong isolation from each other
- the virtual machine can provide an instruction set architecture (ISA) that is somewhat different from that of the real machine
- application provisioning, maintenance, high availability and disaster recovery[2]
The main disadvantages of system VMs are:
- a virtual machine is less efficient than a real machine when it accesses the hardware indirectly
- when multiple VMs are concurrently running on the same physical host, each VM may exhibit a varying and unstable performance, which highly depends on the workload imposed on the system by other VMs, unless proper techniques are used for temporal isolation among virtual machines.
Multiple VMs each running their own operating system (called
guest operating system) are frequently used in
server consolidation, where different services that used to run on individual machines in order to avoid interference are instead run in separate VMs on the same physical machine.
The desire to run multiple operating systems was the original motivation for virtual machines, as it allowed time-sharing a single computer between several single-tasking OSes. In some respects, a system virtual machine can be considered a generalization of the concept of
virtual memory that historically preceded it. IBM's
CP/CMS, the first systems to allow
full virtualization, implemented
time sharing by providing each user with a single-user operating system, the
CMS. Unlike virtual memory, a system virtual machine allowed the user to use privileged instructions in their code. This approach had certain advantages, for instance it allowed users to add input/output devices not allowed by the standard system.
[3]
The guest OSes do not have to be all the same, making it possible to run different OSes on the same computer (e.g.,
Microsoft Windows and
Linux, or older versions of an OS in order to support software that has not yet been ported to the latest version). The use of virtual machines to support different guest OSes is becoming popular in
embedded systems; a typical use is to support a
real-time operating system at the same time as a high-level OS such as Linux or Windows.
Another use is to
sandbox an OS that is not trusted, possibly because it is a system under development. Virtual machines have other advantages for OS development, including better debugging access and faster reboots.
[4]