虚拟机

计算机软件

虚拟机(英语: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 (英语). 

外部链接

参见