虚拟机
程序执行 |
---|
基础概念 |
代码类型 |
编译策略 |
|
知名运行环境 |
著名编译器及工具链 |
此条目需要精通或熟悉电脑科学的编者参与及协助编辑。 (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(英文)