虚拟化(Virtualization)技术最早出现在20世纪60年代的IBM大型机系统,在70年代的System 370系列中逐渐流行起来。这些机器通过一种叫虚拟机监控器(Virtual Machine Monitor,VMM)的程序在物理硬件之上生成许多可以运行独立操作系统软件的虚拟机(Virtual Machine)实例。
随着近年计算机技术的进步,无论是服务器市场、桌面市场,还是嵌入式市场,处理器的频率和核心数目都出现了巨大的进步,从而带来了处理能力的迅速增长,使得虚拟化技术再次迅速发展起来,并从最初的的裸机虚拟化技术开始,演化出主机虚拟化、混合虚拟化等更复杂的虚拟化模型,并在此基础山发展出了当下最热门的云虚拟化技术,极大地降低了IT成本,增强了系统的安全性,可靠性和扩展性。
虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU 并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。虚拟化技术的本质在于对计算机系统软硬件资源的划分和抽象。计算机系统的高度复杂性是通过各种层次的抽象来控制,每一层都通过层与层之间的接口对底层进行抽象,隐藏底层具体实现而向上层提供较简单的接口。
虚拟机虚拟化技术所能提供的优势取决于客户的目标、所选择的特殊虚拟技术以及现有的IT基础架构。并非所有的客户都能够从实现某一特殊虚拟化解决方案中获得同样的利益。现在,即使是使用虚拟化进行简单的服务器整合,客户们也经常可以在某种程度上获得以下很多利益:更高的资源利用率——虚拟可支持实现物理资源和资源池的动态共享,提高资源利用率,特别是针对那些平均需求远低于需要为其提供专用资源的不同负载。
常用的虚拟化技术分为以下4种:
1、硬件仿真技术
该技术在宿主机操作系统上创建一个硬件VM来仿真所想要的硬件,包括客户机需要的CPU指令集和各种外设等。硬件仿真技术使用VM来模拟所需要的硬件,因此速度会非常慢。由于每条指令都必须在底层硬件上进行仿真,因此速度减慢100倍的情况也并不稀奇。若要实现高度保真的仿真,包括周期精度、所仿真的 CPU 管道以及缓存行为,实际速度差距甚至可能会达到 1000 倍之多。当然,硬件仿真也有自己的优点。例如,使用硬件仿真,可以在一个ARM架构处理器上运行为PowerPC设计的操作系统,而不需要任何修改。采用该技术,甚至可以运行多个虚拟机,每个虚拟器仿真一个不同架构的处理器。
采用该技术的虚拟机有WindRiver Simics、QEMU、Bochs等。
2、全虚拟化技术(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等。
3、半虚拟化技术(Paravirtualization)
半虚拟化技术又称为泛虚拟化技术、准虚拟化技术、协同虚拟化技术或者超虚拟化技术,是指通过暴露给Guest OS一个修改过的硬件抽象,将硬件接口以软件的形式提供给客户机操作系统。这可以通过Hypercall(VMM提供给GuestOS的直接调用,与系统调用类似)的方式来提供。比较著名的VMM有Denali以及早期的Xen等。而Guest OS也修改自己的部分代码与VMM配合工作来实现系统虚拟化。半虚拟化的优点是降低了虚拟化技术带来的性能开销,主要表现在消减代码冗余减少特权级别转换和减少内存复制。并且半虚拟化技术修改了Guest OS与虚拟机监控器协同工作,使得虚拟机监控器可以得知Guest OS内部的一些状态,消除了黑盒调度带来的一些问题。
采用该技术的虚拟化平台有Denali、UML(User-mode Linux)和早期的Xen等。
4、硬件辅助虚拟化技术(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。
综上所述,虚拟化可以解决嵌入式系统目前面临的不少问题,带来很多方便,但由于现存虚拟化解决方案(如KVM和XEN)在设计之初并没有考虑嵌入式系统的特殊需求,从导致功能性、实时性、稳定性都有所缺失,但是经过这些年的高速发展,已经有很大改善,已经能放心的使用了。