虛擬機器

计算机软件

虛擬機器(英語:virtual machine),在電腦科學中的體系結構裡,是指一種特殊的軟體,可以在電腦平台終端使用者之間建立一種環境,而終端使用者則是基於虛擬機器這個軟體所建立的環境來操作其它軟體。虛擬機器(VM)是電腦系統的仿真器,通過軟體類比具有完整硬體系統功能的、執行在一個完全隔離環境中的完整電腦系統,能提供物理電腦的功能。

有不同種類的虛擬機器,每種虛擬機器具有不同的功能:

  • 系統虛擬機器(也稱為全虛擬化虛擬機器)可代替物理電腦。它提供了執行整個作業系統所需的功能。虛擬機器監視器(hypervisor)共享和管理硬體,從而允許有相互隔離但存在於同一物理機器上的多個環境。現代虛擬機器監視器使用虛擬化專用硬體(主要是主機CPU)來進行硬體輔助虛擬化。
  • 程式虛擬機器 被設計用來在與平台無關的環境中執行電腦程式。

定義

編輯

虛擬機器最初由波佩克[註 1]與戈德堡定義為有效的、獨立的真實機器的副本。當前包括跟任何真實機器無關的虛擬機器[1]

例子: 用Java編寫的程式可以通過對Java執行環境(JRE)軟體發命令獲得服務,取得期望的結果。透過提供這種服務,JRE起到了虛擬機器的作用。程式不必為特定的作業系統或硬體編寫。

虛擬機器根據它們的運用和與直接機器的相關性分為兩大類。「系統虛擬機器」提供一個可以執行完整作業系統的完整系統平台。「程式虛擬機器」則為執行單個電腦程式設計,這意味它支援單個行程。虛擬機器的一個本質特點是執行在虛擬機器上的軟體被局限在虛擬機器提供的資源里,也就是說它不能超出虛擬世界。「作業系統層虛擬化」不提供完整作業系統環境,將母機核心分給多個獨立空間的應用程式,不同於系統虛擬機需要運行完整作業系統,也不像程式虛擬機器運行特定程式語言。

系統虛擬機器

編輯
 
VirtualBox

例如:VirtualBoxVMware 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處理器架構」其實並不能滿足Popek和Goldberg虛擬化要求。很明顯,這種架構缺少所有特權機器指令都會產生異常的模式,而這種模式可以做到單指令的虛擬化。這導致「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虛擬化)。

虛擬機器列表

編輯

虛擬軟體的更多描述

編輯

下列的軟體產品可以用來虛擬硬體,故可用於各種作業系統之上。

虛擬機器比較

編輯

下面的表格比較了一些虛擬機器軟體的基本資訊。請注意,這裡說的是系統虛擬機器Java虛擬機器之類的程式虛擬機器不算在內。

名稱 作者 主CPU 目標CPU 主系統 目標系統 許可
CHARON Stromasys x86,x86-64 DEC PDP11,Alpha, VAX, SUN SPARC,HP3000 WindowsLinux, Solaris Solaris/SunOS,Tru64,
OpenVMS,Ultrix
私有
Bochs Kevin Lawton 任何 x86x86-64 WindowsWindows MobileLinuxIRIX
AIXFreeBSDOpenBSDBeOSMac OS XAndroid
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-VIntel VT x86-64x86 Windows Server, Windows 8, Windows 8.1, Windows 10 Windows 2000Windows 2003
Windows XP
Windows VistaLinux
Windows 7Windows 8
Windows 8.1Windows 10Windows Server
私有(免費)
KVM Red Hat Intel/AMD處理器與x86虛擬化 x86/x86-64 Linux Linux,Windows GPL v2
Logical Domains英語Logical Domains 太陽電腦系統公司 UltraSPARC T1UltraSPARC 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 MacOSChrome OS MacOSWindowsLinuxFreeBSD
OS/2eComStation
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 經常變化[1]頁面存檔備份,存於網際網路檔案館 GPL/LGPL
QEMUkqemu模組) Fabrice Bellard Intel x86,x86-64 Intel x86,x86-64 Linux,FreeBSD,OpenBSD,Solaris,Windows 經常變化[2]頁面存檔備份,存於網際網路檔案館 GPL/LGPL
QEMUqvm86模組) Paul Brook x86 x86 Linux,NetBSD頁面存檔備份,存於網際網路檔案館),Windows 經常變化 GPL
SimNow AMD x86-64 x86-64 Linux(64位元),Windows(64位元) Linux,Windows(32位元和64位元) AMD公司專有
Sun xVM Server英語Sun xVM Server 太陽電腦系統公司 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;完整版本中的額外特性是專有的(免費供個人與教育機構使用和評價)
User Mode Linux英語User Mode Linux Jeff Dike英語Jeff Dike(其他開發者幫助) x86,x86-64,PowerPC x86,x86-64,PowerPC Linux Linux GPL v2
Virtual Iron platform 3.1 Virtual Iron英語Virtual Iron(已於2009年5月13日被甲骨文公司收購) x86 VT-x,x86-64 AMD-V x86,x86-64 無:裸機執行 Windows,Red HatSuSE 完整的產品是私有的[3]頁面存檔備份,存於網際網路檔案館);幾個組成部分是GPL v2[4]頁面存檔備份,存於網際網路檔案館
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英語Microsoft Virtual Server 2005 R2 Microsoft Intel x86,x86-64 Intel x86 Windows 2003,XP Windows NT,2000,2003,
Linux(Red Hat and SUSE)
私有(免費)
Virtuozzo英語Virtuozzo 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 英國劍橋大學IntelAMD x86,x86-64 x86,x86-64 NetBSD,Linux,Solaris Linux,Solaris,
Windows XP & 2003 Server
(需要3.0版和VanderpoolPacifica),
九號計畫FreeBSD
GPL
Proxmox VE Proxmox頁面存檔備份,存於網際網路檔案館 x86-64 無:裸機安裝 Windows,Linux 免費、付費 都有
名稱 作者 主CPU 目標CPU 主系統 目標系統 許可

注釋

編輯
  1. ^ Gerald J. Popek,美國電腦科學家,曾提出虛擬機器的實現需求,通稱波佩克與戈德堡虛擬化需求

參考文獻

編輯
  1. ^ Smith, Daniel E.; Nair, Ravi. The Architecture of Virtual Machines. Computer (IEEE Computer Society): 32–38. doi:10.1109/MC.2005.173 (英語). 

外部連結

編輯

參見

編輯