虛擬機器

虛擬機（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