虚拟机器

虚拟机（virtual machine），在计算机科学中的体系结构里，是指一种特殊的软件，可以在计算机平台和终端用户之间建立一种环境，而终端用户则是基于虚拟机这个软件所建立的环境来操作其它软件。虚拟机（VM）是计算机系统的仿真器，通过软件模拟具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统，能提供物理计算机的功能。

有不同种类的虚拟机，每种虚拟机具有不同的功能：

- 系统虚拟机（也称为全虚拟化虚拟机）可代替物理计算机。它提供了运行整个操作系统所需的功能。虚拟机监视器（hypervisor）共享和管理硬件，从而允许有相互隔离但存在于同一物理机器上的多个环境。现代虚拟机监视器使用虚拟化专用硬件（主要是主机CPU）来进行硬件辅助虚拟化。
- 程序虚拟机 被设计用来在与平台无关的环境中执行计算机程序。

## 定义

虚拟机最初由波佩克与戈德堡定义为有效的、独立的真实机器的副本。当前包括跟任何真实机器无关的虚拟机。

例子：

用Java编写的程序可以通过对Java运行环境（JRE）软件发命令获得服务，取得期望的结果。透过提供这种服务，JRE起到了虚拟机的作用。程序不必为特定的操作系统或硬件编写。

虚拟机根据它们的运用和与直接机器的相关性分为两大类。“系统虚拟机”提供一个可以运行完整操作系统的完整系统平台。“程序虚拟机”则为运行单个计算机程序设计，这意味它支持单个进程。虚拟机的一个本质特点是运行在虚拟机上的软件被局限在虚拟机提供的资源里，也就是说它不能超出虚拟世界。“操作系统层虚拟化”不提供完整操作系统环境，将母机内核分给多个独立空间的应用程序，不同于系统虚拟机需要运行完整操作系统，也不像程序虚拟机运行特定程式语言。

### 系统虚拟机

<image>

例如：VirtualBox、VMware Workstation

### 程序虚拟机

例如：Java虚拟机（JVM）

### 操作系统层虚拟化

例如：Docker

## 技术（硬件的模拟）

基于这种虚拟机，用户可以运行任何操作系统，比如可以在他们“个人的”虚拟电脑上运行两个不同的操作系统，这也被称为“访客”（guests）。这样的话，新版的实验性操作系统就可以与旧版的较稳定版本一同在单独的虚拟机上运行。这个过程甚至可以重复（recursive）；IBM就在运行于旧版的虚拟机上的虚拟机上调试它新版的虚拟机操作系统——VM。

这个概念的一个早期使用者就是IBM大型计算机上的“VM/CMS time-sharing”产品，该产品使用的交互式计算单用户操作系统——CMS（Conversational Monitor System），相对来说比较简单，运行于VM上。通过这种方式，CMS编写起来就比较简单，就好像只有它一个在运行一样，VM操作系统就在幕后提供多任务以及资源管理服务。

当然，不是每个VM用户都必须运行CMS；有些用户选择在一个或者多个虚拟机上运行某种“OS/360”（或者“MVS”），来提供传统上的批处理任务。今天，IBM大型机还在使用VM，许多虚拟机上运行的是Linux操作系统。

“VMware”、“TwoOStwo”、“SVISTA”软件包在现代电脑上都在处理类似截获硬件访问，模拟除了处理器以外的任何主板上的器件的事情。

“plex86”属于另外一种情况，它使用特定的打过补丁的内核，只能运行于“Linux”下，而且只能在其之上运行它。因此，它不是仿真处理器，它利用“bochs”来仿真主板设备。

现代电脑使用的“x86处理器架构”其实并不能满足波佩克与戈德堡虚拟化需求。很明显，这种架构缺少所有特权机器指令都会产生异常的模式，而这种模式可以做到单指令的虚拟化。这导致“VMware”或类似的“x86虚拟软件”必须动态地重新编译特权模式代码。这种虚拟技术和运行于如“IBM System/370”、“Motorola MC68020”的原生态可虚拟架构上的“VM”相比，就会多出一些性能上的开销。Intel及AMD已经为自己的处理器/芯片组产品加入硬件虚拟化功能，Intel有Intel VT-x（CPU虚拟化）及Intel VT-d（IO虚拟化），AMD有AMD SVM（CPU虚拟化）及IOMMU（IO虚拟化）。

## 虚拟机器列表

### 虚拟软件的更多描述

下列的软件产品可以用来虚拟硬件，故可用于各种操作系统之上。

- 是一种硬件抽象层。
- KVM是一种Linux kernel模组，可以修正QEMU program使之可使用硬件虚拟现实（hardware virtualization）。
- LLVM是一种新的动态编译平台。

### 虚拟机器比较

下面的表格比较了一些虚拟机软件的基本信息。请注意，这里说的是系统虚拟机。Java虚拟机之类的程序虚拟机不算在内。

名称｜作者｜主CPU｜目标CPU｜主系统｜目标系统｜许可

CHARON｜Stromasys｜x86，x86-64｜DEC PDP11，Alpha, VAX, SUN SPARC,HP3000｜Windows，Linux, Solaris｜Solaris/SunOS，Tru64，OpenVMS，Ultrix｜私有

Bochs｜Kevin Lawton｜任何｜x86，x86-64｜Windows，Windows Mobile，Linux，IRIX，AIX，FreeBSD，OpenBSD，BeOS，Mac OS X，Android｜DOS，Windows，xBSD，Linux｜LGPL

DOSBox｜Peter Veenstra和Sjoerd与社区帮助｜任何｜x86｜Linux，Windows，Mac OS Classic，Mac OS X，BeOS，FreeBSD，OpenBSD，Solaris，QNX，IRIX，MorphOS，AmigaOS｜DOS｜GPL

DOSEMU｜社区项目｜x86，x86-64｜x86｜Linux｜DOS｜GPL v2

Hercules｜Roger Bowler｜任何｜z（IBM大型计算机）｜Linux，Mac OS X，Solaris，Windows｜OS/360，OS/390，z/OS，z/Linux｜QPL

Hyper-V｜微软｜x86-64+硬件辅助虚拟（AMD-V或Intel VT）｜x86-64，x86｜Windows Server, Windows 8, Windows 8.1, Windows 10｜Windows 2000，Windows 2003，Windows XP，Windows Vista，LinuxWindows 7，Windows 8Windows 8.1，Windows 10，Windows Server｜私有（免费）

KVM｜Red Hat｜Intel/AMD处理器与x86虚拟化｜x86/x86-64｜Linux｜Linux，Windows｜GPL v2

太阳计算机系统公司｜UltraSPARC T1，UltraSPARC T2｜兼容｜Solaris｜Solaris，Linux，FreeBSD｜?

OpenVZ｜社区项目，SWsoft支持｜Intel x86，x86-64，IA-64，PowerPC64，SPARC/64｜Intel x86，x86-64，IA-64，PowerPC64，SPARC/64｜Linux｜各种Linux发行版｜GPL

Oracle VM｜甲骨文公司｜Intel x86，x86-64，Intel VT-x｜Intel x86，x86-64，Intel VT-x｜无（裸机安装）｜Microsoft Windows，Oracle Enterprise Linux，Red Hat Enterprise Linux｜免费，商业

Parallels Desktop（曾用名：Parallels Workstation）｜Parallels 公司｜x86，x86-64，Intel VT-x｜x86，x86-64｜MacOS， Chrome OS｜MacOS，Windows，Linux，FreeBSD，OS/2，eComStation，MS-DOS，Solaris，和其他大多数的操作系统｜私有

PearPC｜Sebastian Biallas｜x86，x86-64，PowerPC｜PowerPC｜Windows，Linux，Mac OS X，NetBSD｜Mac OS X，Darwin，Linux｜GPL

QEMU｜Fabrice Bellard（其他开发者帮助）｜x86，x86-64，IA-64，PowerPC，Alpha，SPARC 32 and 64，ARM，S/390，M68k｜x86，x86-64，ARM，SPARC 32 and 64，PowerPC，MIPS｜Windows，Linux，Mac OS X，Solaris，FreeBSD，OpenBSD，BeOS｜经常变化｜GPL/LGPL

QEMU（kqemu模块）｜Fabrice Bellard｜Intel x86，x86-64｜Intel x86，x86-64｜Linux，FreeBSD，OpenBSD，Solaris，Windows｜经常变化｜GPL/LGPL

QEMU（qvm86模块）｜Paul Brook｜x86｜x86｜Linux， NetBSD，Windows｜经常变化｜GPL

SimNow｜AMD｜x86-64｜x86-64｜Linux（64位），Windows（64位）｜Linux，Windows（32位和64位）｜AMD公司专有

太阳计算机系统公司｜x86-64，SPARC｜x86-64，SPARC｜无：裸机执行｜Windows XP & 2003 Server（仅x86-64），Linux，Solaris｜GPL v3

Oracle VirtualBox｜甲骨文公司｜x86，x86-64，VT-x，AMD-V｜x86，（x86-64仅在VirtualBox 2及x86-64主机上）｜Windows，Linux，Mac OS X（Intel），Solaris, FreeBSD｜DOS，Windows，Linux，OS/2，FreeBSD，Solaris｜GPL v2；完整版本中的额外特性是专有的（免费供个人与教育机构使用和评价）

（其他开发者帮助）｜x86，x86-64，PowerPC｜x86，x86-64，PowerPC｜Linux｜Linux｜GPL v2

Virtual Iron platform 3.1｜Virtual Iron（已于2009年5月13日被甲骨文公司收购）｜x86 VT-x，x86-64 AMD-V｜x86，x86-64｜无：裸机执行｜Windows，Red Hat，SuSE｜完整的产品是私有的；几个组成部分是GPL v2

Virtual PC 2007｜Microsoft｜x86，x86-64｜x86｜Windows Vista（商业版，企业版，旗舰版），XP Pro，XP Tablet PC版｜DOS，Windows，OS/2，Linux（Suse，Xubuntu），OpenSolaris（Belenix）｜私有（从2006年7月起免费）

Virtual Server 2005 R2｜Microsoft｜Intel x86，x86-64｜Intel x86｜Windows 2003，XP｜Windows NT，2000，2003，Linux（Red Hat and SUSE）｜私有（免费）

SWsoft｜x86，IA-64，x86-64｜x86，IA-64，x86-64｜Linux & Windows｜各种Linux发行版；Windows｜私有

VMware ESXi｜VMware｜x86，x86-64｜x86，x86-64｜无：裸机安装｜Windows，Red Hat，SuSE，Ubuntu，Netware，Solaris，FreeBSD｜私有

VMware Fusion｜VMware｜x86，Intel VT-x｜x86，x86-64｜Mac OS X（Intel）｜Windows，Linux，Netware，Solaris｜私有

VMware Server（不再维护）｜VMware｜x86，x86-64｜x86，x86-64｜Windows，Linux｜DOS，Windows，Linux，FreeBSD，Netware，Solaris，虚拟设备｜私有（免费）

VMware Workstation Pro｜VMware｜x86，x86-64｜x86，x86-64｜Windows，Linux｜DOS，Windows，Linux，FreeBSD，Netware，Solaris，Darwin，虚拟设备｜私有

VMware Workstation Player｜VMware｜x86，x86-64｜x86，x86-64｜Windows，Linux｜DOS，Windows，Linux，FreeBSD，Netware，Solaris，Darwin，虚拟设备｜私有（免费）

Xen｜英国剑桥大学，Intel，AMD｜x86，x86-64｜x86，x86-64｜NetBSD，Linux，Solaris｜Linux，Solaris，Windows XP & 2003 Server（需要3.0版和Vanderpool或Pacifica），九号计划，FreeBSD｜GPL

Proxmox VE｜ Proxmox｜x86-64｜无：裸机安装｜Windows，Linux｜免费、付费 都有

名称｜作者｜主CPU｜目标CPU｜主系统｜目标系统｜许可

## 外部链接

- The Reincarnation of Virtual Machines, Article on ACM Queue by Mendel Rosenblum, Co-Founder, VMware
- Xen