虚拟化(Virtualization)技术最早出现在20世纪60年代的IBM大型机系统,在70年代的System 370系列中逐渐流行起来。这些机器通过一种叫虚拟机监控器(Virtual Machine Monitor,VMM)的程序在物理硬件之上生成许多可以运行独立操作系统软件的虚拟机(Virtual Machine)实例。
随着近年计算机技术的进步,无论是服务器市场、桌面市场,还是嵌入式市场,处理器的频率和核心数目都出现了巨大的进步,从而带来了处理能力的迅速增长,使得虚拟化技术再次迅速发展起来,并从最初的的裸机虚拟化技术开始,演化出主机虚拟化、混合虚拟化等更复杂的虚拟化模型,并在此基础山发展出了当下最热门的云虚拟化技术,极大地降低了IT成本,增强了系统的安全性,可靠性和扩展性。
在计算机领域,虚拟化是一个广义的概念。简而言之,虚拟化是指对计算机资源的抽象。虚拟机最初被Popek和Goldberg定义为物理机器的一个或多个隔离的有效复制[16]。J.E. Smith和RaviNair给出了一个更具体化的定义:虚拟机是通过在物理平台上添加的软件给出的一个或多个不同的平台。一个虚拟机可以有一个操作系统和指令集,或者两者都有,可以不同于底下的真实的硬件。
虚拟化技术的本质在于对计算机系统软硬件资源的划分和抽象。计算机系统的高度复杂性是通过各种层次的抽象来控制,每一层都通过层与层之间的接口对底层进行抽象,隐藏底层具体实现而向上层提供较简单的接口。
1. 虚拟化技术层次
计算机系统包括五个抽象层:硬件抽象层,指令集架构层,操作系统层,库函数层和应用程序层。相应地,虚拟化可以在每个抽象层来实现。无论是在哪个抽象层实现,其本质都是一样的,那就是它使用某些手段来管理分配底层资源,并将底层资源反映给上层。操作系统上传统的进程模型就利用了虚拟化的思想,操作系统通过对物理内存的划分和抽象,给每个进程呈现出远超出物理内存空间的4G空间,并且使得每个进程实现了有效的隔离,从而一个进程的崩溃不会影响到其它进程的正常运行。
虚拟化平台是操作系统层虚拟化的实现。在系统虚拟化中,虚拟机(VM)是在一个硬件平台上模拟一个或者多个独立的和实际底层硬件相同的执行环境。每个虚拟的执行环境里面可以运行不同的操作系统,即客户机操作系统(Guest OS)。Guest OS通过虚拟机监控器提供的抽象层来实现对物理资源的访问和操作。目前存在各种各样的虚拟机,但基本上所有虚拟机都基于"计算机硬件 + 虚拟机监视器(VMM)+ 客户机操作系统(Guest OS)"的模型。
虚拟机监控器是计算机硬件和Guest OS之间的一个抽象层,它运行在最高特权级,负责将底层硬件资源加以抽象,提供给上层运行的多个虚拟机使用,并且为上层的虚拟机提供多个隔离的执行环境,使得每个虚拟机都以为自己在独占整个计算机资源。虚拟机监控器可以将运行在不同物理机器上的操作系统和应用程序合并到同一台物理机器上运行,减少了管理成本和能源损耗,并且便于系统的迁移。
2. 虚拟机监视器(VMM)模型
根据虚拟机监视器在虚拟化平台中的位置,可以将其分为以下3种模型:
-
裸机虚拟化模型(Hypervisor Model)
裸机虚拟化模型,也称为Type-I型虚拟化模型、独立监控模型。该模型中,虚拟机监控器直接运行在没有操作系统的裸机上,具有最高特权级,管理底层所有的硬件资源。所有的Guest OS都运行在较低的特权级中,所有Guest OS对底层资源的访问都被虚拟机监控器拦截,由虚拟机监控器代为操作并返回操作结果,从而实现系统的隔离性,达到对系统资源绝对控制。作为底层硬件的管理者,虚拟机监控器中有所有的硬件驱动。这种模型又称为Type-I型虚拟机监控器。
采用该模型的虚拟化平台有Wind River的Hypervisor 2.0, VMware ESXi, Xen等。 -
宿主机虚拟化模型(Host-based Model)
宿主机虚拟化模型,也称为Type-II型虚拟化模型。该模型中,虚拟机监控器作为一个应用程序运行在宿主机操作系统(Host OS)上,而Guest OS运行于虚拟机监控器之上。Guest OS对底层硬件资源的访问要被虚拟机监控器拦截,虚拟机监控器再转交给Host OS进行处理。改模型中,Guest OS对底层资源的访问路径更长,故而性能相对独立监控模型有所损失。但优点是,虚拟机监控器可以利用宿主机操作系统的大部分功能,而无需重复实现对底层资源的管理和分配,也无需重写硬件驱动。
采用该模型的虚拟化平台有Wind River的VxWorks ST,VMware Workstation和Xen等。 -
混合模型(Hybrid Model)
该模型中,虚拟机监控器直接运行在物理机器上,具有最高的特权级,所有虚拟机都运行在虚拟机监控器之上。与Type-I型虚拟化模型不同的是,这种模型中虚拟机监控器不需要实现硬件驱动,甚至虚拟机调度器等部分虚拟机管理功能,而把对外部设备访问、虚拟机调度等功能交给一个特权级虚拟机(RootOS、Domain 0、根操作系统等)来处理。特权级虚拟机可以管理其它虚拟机和直接访问硬件设备,只有虚拟化相关的部分,例如虚拟机的创建/删除和外设的分配/控制等功能才交由虚拟机监视控制。
采用该模型的虚拟化平台有Linux KVM、Jailhouse等。
3. 常用虚拟化技术
虚拟机监视器采用的虚拟化技术分为以下4种:
硬件仿真技术
该技术在宿主机操作系统上创建一个硬件VM来仿真所想要的硬件,包括客户机需要的CPU指令集和各种外设等。硬件仿真技术使用VM来模拟所需要的硬件,因此速度会非常慢。由于每条指令都必须在底层硬件上进行仿真,因此速度减慢100倍的情况也并不稀奇。若要实现高度保真的仿真,包括周期精度、所仿真的 CPU 管道以及缓存行为,实际速度差距甚至可能会达到 1000 倍之多。当然,硬件仿真也有自己的优点。例如,使用硬件仿真,可以在一个ARM架构处理器上运行为PowerPC设计的操作系统,而不需要任何修改。采用该技术,甚至可以运行多个虚拟机,每个虚拟器仿真一个不同架构的处理器。
采用该技术的虚拟机有WindRiver Simics、QEMU、Bochs等。全虚拟化技术(Full Virtualization)
全虚拟化技术,也称为原始虚拟化技术。该技术以软件模拟的方式来弥补硬件的虚拟化漏洞,呈现给虚拟机的是一个与真实硬件完全相同的硬件环境,使得为原始硬件设计的操作系统或其它系统软件完全不做任何修改就可以直接运行在全虚拟化的虚拟机监控器上,兼容性非常好。但是采用该技术的虚拟机监控器模拟了完整的底层硬件,并且需要额外的指令翻译,从而使得模拟过程比较复杂,导致效率较为低下。
采用该技术的虚拟化平台有VirtualBox,Virtual Iron,IBM z/VM,Virtual PC,Hyper-V,VMware Workstation,VMware Server (formerly GSX Server),Adeos,Mac-on-Linux以及Egenera vBlade technology等。-
半虚拟化技术(Paravirtualization)
半虚拟化技术又称为泛虚拟化技术、准虚拟化技术、协同虚拟化技术或者超虚拟化技术,是指通过暴露给Guest OS一个修改过的硬件抽象,将硬件接口以软件的形式提供给客户机操作系统。这可以通过Hypercall(VMM提供给GuestOS的直接调用,与系统调用类似)的方式来提供。比较著名的VMM有Denali以及早期的Xen等。而Guest OS也修改自己的部分代码与VMM配合工作来实现系统虚拟化。半虚拟化的优点是降低了虚拟化技术带来的性能开销,主要表现在消减代码冗余减少特权级别转换和减少内存复制。并且半虚拟化技术修改了Guest OS与虚拟机监控器协同工作,使得虚拟机监控器可以得知Guest OS内部的一些状态,消除了黑盒调度带来的一些问题。
采用该技术的虚拟化平台有Denali、UML(User-mode Linux)和早期的Xen等。 -
硬件辅助虚拟化技术(Hardware-Assisted Virtualization)
硬件辅助虚拟化技术是指借助硬件(CPU、芯片组以及I/O设备等)的虚拟化支持来实现高效的全虚拟化。原有的硬件体系结构在虚拟化方面存在虚拟化漏洞等缺陷,导致单纯的软件虚拟化方法存在一些问题;还有就是由于硬件架构的限制,某些功能即使可以通过软件的方式来实现,但是实现过程却异常复杂,甚至带来性能的大幅下降,这主要体现在以软件方式实现的内存虚拟化和I/O设备虚拟化。通过在硬件中加入专门针对虚拟化的支持,系统虚拟化的实现变得更加容易和高效。例如,在Intel VT技术的支持下,Guest OS和VMM的执行环境可以自动地完全隔离开来,Guest OS有自己的“全套寄存器”,可以直接运行在最高级别。
目前支持完整的硬件辅助虚拟化技术的硬件平台包括:- X86架构:AMD-V (代号Pacifica), Intel VT (代号Vanderpool)等;
- ARM架构:ARMv8内核的A15及以上处理器等;
- Power架构: Freescale P系列/T系列处理器等。
采用该技术的虚拟化平台有Linux KVM, VMware Workstation, VMware Fusion, Microsoft Virtual PC, Xen, Parallels Desktop for Mac,VirtualBox and Parallels Workstation。
4. 嵌入式虚拟化技术
嵌入式系统是虚拟化技术的新方向和重要分支。
嵌入式处理器的迅速发展使得嵌入式系统在更多方面得到了广泛的应用。而嵌入式设备应用的普及导致其对软硬件的需求也越来越高。硬件体现在不断增强的计算能力和多种多样的外部设备,软件体现在愈加复杂的新功能特性。这些问题导致嵌入式开发变得复杂和软件维护成本的增加。原来的SMP和AMP等多核操作系统方案无法满足安全隔离、硬件资源分配和复用等日益复杂的要求。因此,服务器和桌面系统上的虚拟化技术被引入了嵌入式操作系统领域,并借助于硬件辅助虚拟化技术,解决了虚拟化技术带来的便利性与嵌入式系统得实时性要求之间的矛盾,使得以Linux KVM、Xen等嵌入式虚拟化平台得到了迅速发展。
虚拟化平台在硬件和操作系统之间引入了一个新的抽象层次,称为虚拟机监控器(Virtual Machine Monitor,简称VMM),由它接管所有的硬件,并管理运行其上的所有虚拟机(Virtual Machine,简称VM),而每个虚拟机中可以运行各自的操作系统。
虚拟化的优点在于实现了资源的重用,使得一个物理平台上面可以同时运行多个不同的操作系统。通过利用系统虚拟化技术,可以在嵌入式设备中同时运行实时操作系统和通用操作系统,分别发挥各自的优势——实时操作系统处理实时任务,通用操作系统提供丰富的应用程序,它们彼此分工协作,发挥各自的优势,同时满足各种不同的需求。
但与此同时,虚拟化平台技术也引入了新问题。不少嵌入式系统对实时性能都有比较高的要求,而虚拟机与虚拟机监控器间的切换导致处理器操作模式的切换和上下文的切换,会增加系统的响应时间,从而增加实时系统的时间不确定性,影响了实时系统的性能。虚拟机对运行于其上的应用程序的隔离又增加了虚拟机监控器的精确调度的难度,目前的虚拟机监控器也只能基于虚拟机的优先级或者时间片分配而进行粗粒度的调度。此外,现存的虚拟化平台技术主要基于X86等通用计算机平台,对ARM、MIPS等嵌入式处理器支持不够,在功能性和稳定性上都有所缺失。
综上所述,虚拟化可以解决嵌入式系统目前面临的不少问题,带来很多方便,但由于现存虚拟化解决方案(如KVM和XEN)在设计之初并没有考虑嵌入式系统的特殊需求,从导致功能性、实时性、稳定性都有所缺失。