|
| |
In computer science, a virtual machine is software that creates a virtualized
environment between the computer platform and its operating system, so that the
end user can operate software on an abstract machine.
Definitions
Specifically, the term virtual machine has several distinct meanings:
Hardware virtual machine
The original meaning of virtual machine, sometimes called a hardware virtual
machine, is that of a number of discrete identical execution environments on a
single computer, each of which runs an operating system (OS). This can allow
applications written for one OS to be executed on a machine which runs a
different OS, or provide execution "sandboxes" which provide a greater level of
isolation between processes than is achieved when running multiple processes on
the same instance of an OS. One use is to provide multiple users the illusion of
having an entire computer, one that is their "private" machine, isolated from
other users, all on a single physical machine. Another advantage is that booting
and restarting a virtual machine can be much faster than with a physical
machine, since it may be possible to skip tasks such as hardware initialization.
Such software is now often referred to with the terms virtualization and virtual
servers. The host software which provides this capability is often referred to
as a virtual machine monitor or hypervisor.
Software virtualization can be done in three major ways:
Emulation, full system simulation, or "full virtualization with dynamic
recompilation" — the virtual machine simulates the complete hardware, allowing
an unmodified OS for a completely different CPU to be run.
Paravirtualization — the virtual machine does not simulate hardware but instead
offers a special API that requires OS modifications. An example of this is
XenSource's XenEnterprise (www.xensource.com)
Native virtualization and "full virtualization" — the virtual machine only
partially simulates enough hardware to allow an unmodified OS to be run in
isolation, but the guest OS must be designed for the same type of CPU. The term
native virtualization is also sometimes used to designate that hardware
assistance through Virtualization Technology is used.
Application virtual machine
Another meaning of virtual machine is a piece of computer software that isolates
the application being used by the user from the computer. Because versions of
the virtual machine are written for various computer platforms, any application
written for the virtual machine can be operated on any of the platforms, instead
of having to produce separate versions of the application for each computer and
operating system. The application is run on the computer using an interpreter or
Just In Time compilation. One of the best known examples of an application
virtual machine is Sun Microsystem's Java Virtual Machine.
Virtual environment
A virtual environment (otherwise referred to as Virtual private server) is
another kind of a virtual machine. In fact, it is a virtualized environment for
running user-level programs (i.e. not the operating system kernel and drivers,
but applications). Virtual environments are created using the software
implementing operating system-level virtualization approach, such as Virtuozzo,
FreeBSD Jails, Linux-VServer, Solaris Containers, chroot jail and OpenVZ.
Machine aggregation
A less common use of the term is to refer to a computer cluster consisting of
many computers that have been aggregated together as a larger and more powerful
"virtual" machine. In this case, the software allows a single environment to be
created spanning multiple computers, so that the end user appears to be using
only one computer rather than several.
PVM (Parallel Virtual Machine)and MPI (Message Passing Interface) are two common
software packages that permit a heterogeneous collection of networked Unix
and/or Windows computers to be used as a single, large, parallel computer. Thus
large computational problems can be solved more cost effectively by using the
aggregate power and memory of many computers than with a traditional
supercomputer.
The Plan9 Operating System from Bell Labs uses this approach.
Boston Circuits had released the gCore (grid-on-chip) Central Processing Unit
(CPU) with 16 ARC 750D cores and a Time-machine hardware module to provide a
virtual machine that uses this approach.
Techniques
Emulation of the underlying raw hardware (native execution)
This approach is described as full virtualization of the hardware, and can be
implemented using a Type 1 or Type 2 hypervisor. (A Type 1 hypervisor runs
directly on the hardware; a Type 2 hypervisor runs on another operating system,
such as Linux.) Each virtual machine can run any operating system supported by
the underlying hardware. Users can thus run two or more different "guest"
operating systems simultaneously, in separate "private" virtual computers.
The pioneer system using this concept was IBM's CP-40, the first (1967) version
of IBM's CP/CMS (1967-1972) and the precursor to IBM's VM family (1972-present).
With the VM architecture, most users run a relatively simple interactive
computing single-user operating system, CMS, as a "guest" on top of the VM
control program (VM-CP). This approach kept the CMS design simple, as if it were
running alone; the control program quietly provides multitasking and resource
management services "behind the scenes". In addition to CMS, VM users can run
any of the other IBM operating systems, such as MVS or z/OS. z/VM is the current
version of VM, and is used to support hundreds or thousands of virtual machines
on a given mainframe. Some installations use Linux for zSeries to run Web
servers, where Linux runs as the operating system within many virtual machines.
Full virtualization is particularly helpful in operating system development,
when experimental new code can be run at the same time as older, more stable,
versions, each in separate virtual machines. (The process can even be recursive:
IBM debugged new versions of its virtual machine operating system, VM, in a
virtual machine running under an older version of VM, and even used this
technique to simulate new hardware. )
The standard x86 processor architecture as used in modern PCs does not actually
meet the Popek and Goldberg virtualization requirements. Notably, there is no
execution mode where all sensitive machine instructions always trap, which would
allow per-instruction virtualization.
Despite these limitations, several software packages have managed to provide
virtualization on the x86 architecture, even though dynamic recompilation of
privileged code, as first implemented by VMware, incurs some performance
overhead as compared to a VM running on a natively virtualizable architecture
such as the IBM System/370 or Motorola MC68020. By now, several other software
packages such as Virtual PC, VirtualBox, Parallels Workstation and Virtual Iron
manage to implement virtualization on x86 hardware.
On the other hand, plex86 can run only Linux under Linux using a specific
patched kernel. It does not emulate a processor, but uses bochs for emulation of
motherboard devices.
Intel and AMD have introduced features to their x86 processors to enable
virtualization in hardware.
Emulation of a non-native system
Virtual machines can also perform the role of an emulator, allowing software
applications and operating systems written for another computer processor
architecture to be run.
Some virtual machines emulate hardware that only exists as a detailed
specification. For example:
One of the first was the p-code machine specification, which allowed programmers
to write Pascal programs that would run on any computer running virtual machine
software that correctly implemented the specification.
The specification of the Java virtual machine.
The Common Language Infrastructure virtual machine at the heart of the Microsoft
.NET initiative.
Open Firmware allows plug-in hardware to include boot-time diagnostics,
configuration code, and device drivers that will run on any kind of CPU.
This technique allows diverse computers to run any software written to that
specification; only the virtual machine software itself must be written
separately for each type of computer on which it runs.
Operating system-level virtualization
Operating System-level Virtualization is a server virtualization technology
which virtualizes servers on an operating system (kernel) layer. It can be
thought of as partitioning: a single physical server is sliced into multiple
small partitions (otherwise called virtual environments (VE), virtual private
servers (VPS), guests, zones etc); each such partition looks and feels like a
real server, from the point of view of its users. One example here is Soalaris
zones. You can have multiple guest OS running under the same OS(This is allowed
on Solaris 10)> But All guest OS have to use teh same kernel level-You cannot
run a different version; And also you cannot run a different OS than solaris.
Also AIX provides the same technique called Micro Partitioning
The operating system level architecture has low overhead that helps to maximize
efficient use of server resources. The virtualization introduces only a
negligible overhead and allows running hundreds of virtual private servers on a
single physical server. In contrast, approaches such as virtualisation (like
VMware) and paravirtualization (like Xen or UML) cannot achieve such level of
density, due to overhead of running multiple kernels. From the other side,
operating system-level virtualization does not allow running different operating
systems (i.e. different kernels), although different libraries, distributions
etc. are possible.
M operating system-level virtualization
List of hardware with virtual machine support
AMD-V Code named as Pacifica
Boston Circuits gCore (grid-on-chip) with 16 ARC 750D cores and Time-machine
hardware virtualization module.
Freescale PowerPC MPC8572 and MPC8641D
IBM System/370, System/390, and zSeries mainframes
Intel-VT Code named as Vanderpool
Sun Microsystems Logical Domains (SPARC)
See also: X86 virtualization#Hardware support in x86 processors
List of virtual machine software
Application virtual machine software
Common Language Runtime - C#, Visual Basic .NET, J#, Managed C++
EiffelStudio for the Eiffel programming language
Erlang programming language
Forth virtual machine - Forth
Glulx - Glulx, Z-code
Hec - Hasm Assembler
Inferno - Limbo
Java virtual machine - Java, Nice, NetREXX
Low Level Virtual Machine (LLVM) - currently C, C++, Stacker
Lua
Macromedia Flash Player - SWF
MMIX - MMIXAL
Neko virtual machine - currently Neko and haXe
O-code machine - BCPL
p-code machine - Pascal
Parrot - Perl 6
Perl virtual machine - Perl
Portable.NET - C#, Visual Basic .NET, J#, Managed C++
YARV - Ruby
ScummVM - Scumm
SECD machine - ISWIM, Lispkit Lisp
Sed the stream-editor can also be seen as a VM with 2 storage spaces.
Smalltalk virtual machine - Smalltalk
SQLite virtual machine - SQLite opcodes
Squeak virtual machine - Squeak
SWEET16
TrueType virtual machine - TrueType
Valgrind - checking of memory accesses and leaks in x86/x86-64 code under Linux
VX32 virtual machine - application-level virtualization for native code
Virtual Processor (VP) from Tao Group (UK).
Waba - Virtual machine for small devices, similar to Java
Warren Abstract Machine - Prolog, CSC GraphTalk
Z-machine - Z-Code
Zend Engine - PHP
Hardware virtual machine software
vThere (From Sentillion, Inc. )
ATL (A MTL Virtual Machine)
Bochs, portable open source x86 and AMD64 PCs emulator
CoLinux Open Source Linux inside Windows
Denali, uses paravirtualization of x86 for running unmodified PC operating
systems.
FAUmachine
Integrity Workstation Green Hills Software
LilyVM is a lightweight virtual machineAn introduction
Microsoft Virtual PC and Microsoft Virtual Server
OKL4
Parallels Workstation, provides virtualization of x86 for running unmodified PC
operating systems
Parallels Desktop for Mac, provides virtualization of x86 for running virtual
machines on Mac OS X or higher
QEMU, is a simulator based on a virtual machine.
SheepShaver.
Simics
SVISTA
TRANGO real-time embedded hypervisor
twoOStwo
User-mode Linux
Virtual Iron (Virtual Iron 3.1)
VM from IBM
VMware (ESX Server, Fusion, Virtual Server, Workstation, Player and ACE)
Xen
KVM
VirtualBox
OS-level virtualization software
OpenVZ
Virtuozzo
FreeVPS
Linux-VServer
FreeBSD Jails
Solaris Containers
Extended descriptions of selected virtualization software
The following software products are able to virtualize the hardware so that
several operating systems can share it.
Adeos is a Hardware Abstraction Layer that can be loaded as a Kernel Module in
Linux. It allows the loading of a real-time kernel as a module, at the same time
as Linux but with higher priority.
Denali uses paravirtualisation to provide high-performance virtual machines on
x86 computers. Denali's virtual machines support specialised minimal OSs for
Internet services. The system can scale to thousands of virtual machines. Denali
does not preserve the application binary interface (ABI), and so applications
must be recompiled to run within a library operating system; in this sense it is
similar to the Exokernel.
OKL4 uses the open-source L4 microkernel as a hypervisor to provide a
high-performance virtualization solution for embedded systems
OpenVZ - Operating System-level server virtualization solution, built on Linux.
Parallels provides virtualization of x86 for running unmodified PC operating
systems. It also uses a lightweight hypervisor technology in order to improve
security and to increase the efficiency. Parallels has become popular for its
ability to run Windows as a guest under Mac OS X on the Apple-Intel
architecture.
QEMU is a simulator based on a virtual machine, which gives it the ability to
emulate a variety of guest CPU architectures on many different host platforms.
Virtual Iron provides virtual machines for x86 that run unmodified operating
systems, such as Windows, Red Hat and SUSE. Virtual Iron open source
virtualization technology implements native virtualization, which delivers
near-native performance for x86 operating systems.
Virtuozzo replaces the hardware abstraction layer with a modified version
enabling it to run with better performance of the OS, but forces all the VMs on
a hardware box to all run the same OS, with some flexibility to support various
Linux distributions on the same server. Currently they have a version for
Windows 2003 and for Linux. OpenVZ is a related open-source project providing
similar functionality for Linux.
VMware provides virtual machines for x86 that can run unmodified PC operating
systems. The technology involved in doing this is complex and also incurs
(sometimes significant) performance overheads with hosted VMware products (VM
Server and Workstation). ESX server provides near-native performance and a fully
virtualized option (along with para-virtualization of some hardware components).
Xen trades running of existing operating systems for running modified
(paravirtualized) operating systems with improved performance. Virtual Iron
provides full OS compatibility for existing or new OSes with near-native
performance without the perfrormance trade-offs between paravirualization and
binary translation.
Xen Virtualization system whose motivation differs from that of Denali in that
it is intended to run a moderate number of full-featured operating systems,
rather than a large number of specialised, lightweight ones.
KVM is a Linux kernel module that enables a modified QEMU program to use
hardware virtualization.
| |
|