虛擬機器
程序執行 |
---|
基礎概念 |
代碼類型 |
編譯策略 |
|
知名運行環境 |
著名編譯器及工具鏈 |
此條目需要精通或熟悉計算機科學的編者參與及協助編輯。 (2010年10月29日) |
虛擬機(英語:virtual machine),在計算機科學中的體系結構裡,是指一種特殊的軟件,可以在計算機平台和終端用戶之間建立一種環境,而終端用戶則是基於虛擬機這個軟件所建立的環境來操作其它軟件。虛擬機(VM)是計算機系統的仿真器,通過軟件模擬具有完整硬件系統功能的、運行在一個完全隔離環境中的完整計算機系統,能提供物理計算機的功能。
有不同種類的虛擬機,每種虛擬機具有不同的功能:
- 系統虛擬機(也稱為全虛擬化虛擬機)可代替物理計算機。它提供了運行整個操作系統所需的功能。虛擬機監視器(hypervisor)共享和管理硬件,從而允許有相互隔離但存在於同一物理機器上的多個環境。現代虛擬機監視器使用虛擬化專用硬件(主要是主機CPU)來進行硬件輔助虛擬化。
- 程序虛擬機 被設計用來在與平台無關的環境中執行計算機程序。
定義
[編輯]虛擬機最初由波佩克[註 1]與戈德堡定義為有效的、獨立的真實機器的副本。當前包括跟任何真實機器無關的虛擬機[1]。
例子: 用Java編寫的程序可以通過對Java運行環境(JRE)軟件發命令獲得服務,取得期望的結果。透過提供這種服務,JRE起到了虛擬機的作用。程序不必為特定的操作系統或硬件編寫。
虛擬機根據它們的運用和與直接機器的相關性分為兩大類。「系統虛擬機」提供一個可以運行完整操作系統的完整系統平台。「程序虛擬機」則為運行單個計算機程序設計,這意味它支持單個進程。虛擬機的一個本質特點是運行在虛擬機上的軟件被局限在虛擬機提供的資源里,也就是說它不能超出虛擬世界。「作業系統層虛擬化」不提供完整作業系統環境,將母機內核分給多個獨立空間的應用程式,不同於系統虛擬機需要運行完整作業系統,也不像程序虛擬機運行特定程式語言。
系統虛擬機
[編輯]例如: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處理器架構」其實並不能滿足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虛擬化)。
虛擬機器列表
[編輯]虛擬軟體的更多描述
[編輯]下列的軟體產品可以用來虛擬硬體,故可用於各種作業系統之上。
- Adeos是一種硬體抽象層。
- 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,Linux Windows 7,Windows 8 Windows 8.1,Windows 10,Windows Server |
私有(免費) |
KVM | Red Hat | Intel/AMD處理器與x86虛擬化 | x86/x86-64 | Linux | Linux,Windows | GPL v2 |
Logical Domains | 太陽計算機系統公司 | 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 | 經常變化[1] (頁面存檔備份,存於網際網路檔案館) | GPL/LGPL |
QEMU(kqemu模塊) | Fabrice Bellard | Intel x86,x86-64 | Intel x86,x86-64 | Linux,FreeBSD,OpenBSD,Solaris,Windows | 經常變化[2] (頁面存檔備份,存於網際網路檔案館) | 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公司專有 |
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 | Jeff Dike(其他開發者幫助) | 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 | 完整的產品是私有的[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 2005 R2 | Microsoft | Intel x86,x86-64 | Intel x86 | Windows 2003,XP | Windows NT,2000,2003, Linux(Red Hat and SUSE) |
私有(免費) |
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 | 英國劍橋大學,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 | 主系統 | 目標系統 | 許可 |
注釋
[編輯]- ^ Gerald J. Popek,美國計算機科學家,曾提出虛擬機的實現需求,通稱波佩克與戈德堡虛擬化需求。
參考文獻
[編輯]- ^ Smith, Daniel E.; Nair, Ravi. The Architecture of Virtual Machines. Computer (IEEE Computer Society): 32–38. doi:10.1109/MC.2005.173 (英語).
外部連結
[編輯]- The Reincarnation of Virtual Machines, Article on ACM Queue by Mendel Rosenblum, Co-Founder, VMware(英文)
- Xen(英文)