虚拟化技术--全虚拟化、半虚拟化发布时间:2020/4/5 17:50:28 阅读次数:

  

  1)英特尔虚拟化技术专为虚拟机监视器(VMM)提供的全新特权空间,可支持未经修改的操作系统和应用在专门为它们设计的环境中运行,从而简化硬件调用。

  (2)通过硬件底层指令集来支持虚拟机监视器(VMM)与已安装Guest OS(虚拟机上的操作系统)之间的切换,使得虚拟化技术更加简单、高效、可靠。

  (3)虚拟机监视器(VMM)和已安装的Guest OS(虚拟机上的操作系统)的处理器状态信息保留在专用内存地址空间中,这样可以缩短各个操作系统访问硬件之间的间隔时间,同时提高了各个虚拟机上的操作系统之间的安全隔离性。

  实现方式

  虚拟化有两种实施方式:传统的纯软件虚拟化方式和更新的硬件辅助虚拟化方式。在保护模式下,X86处理器一共有4个不同优先级,术语称为Ring,从Ring 0-Ring3。Ring 0的优先级最高,Ring 3最低。Ring 0用于操作系统内核, Ring 1和Ring 2用于操作系统服务,Ring 3用于应用程序。

  位于Ring 0特权空间的操作系统可以优先访问各种硬件资源。传统的虚拟化技术是在Ring 0 中运行一个称为虚拟机监视器(VMM)的软件中间层,以负责控制和排列各个分区访问硬件资源的优先顺序。它要求在软件堆栈的较高层运行操作系统——通常是在Ring 1或者与系统应用共用Ring 3。

  由于传统的纯软件实现方式在测试、验证和维护每款新操作系统和相关补丁方面,付出了大量的时间和资金, 同时二进制码翻译需要消耗处理器的很多计算资源。纯软件虚拟化运行时的开销会造成系统运行速度较慢,有数据表明其引起的系统性能下降可能达5%-20%。

  VT的目的

  VT的目的是在尽可能最小化程序员痛苦的同时尽可能多的增加“virtualization holes”(虚拟化孔)。这种解决方案中,VT-X针对X86而VT-i针对Itanium,分别引入了一种新的模式针对不同的CPU.这里我们主要来看看VT-X,实际上VT-i的功能与VT-X有很多相同的地方。

  这种新的模式被称为VMX,并且引入了一个虚拟化机监控器VMM运行于其中。它被设定在R0级别下,你可以认为是R-1级或者看成是在环的旁边运行。主机操作系统和所有的程序在VMX模式中运行,与此同时VMM运行在VMX根模式中。

  任何一个运行在VMX模式下的操作系统,都拥有所有运行于非VT系统中的一般操作系统的功能和特性。它也处在R0级别中,与平常一样有权利处理每一件事情,而且并不知道有什么东西正在它的旁边运行。当情况得到授权,CPU进入VMX根模式,VMM就可以切换到其他一个运行在另一VMX实例的操作系统。这些切换被称做VM登录和VM退出。

  VT技术所表现出来的不可思议的地方就在于它将从VMX模式到VMX根模式(或从VMX根模式到VMX模式)的登录和退出处理易于操作。一旦主机操作系统被涉及到,那它一定是独自处在自己的世界里的,你必须保存虚拟化世界的完整状态并当你返回时重新载入它。虽然在VT里还有很多事物要去处理,但它被设计为一项任务,所以客观地说它实际是一个简单而并不费力的进程。

  虚拟化技术大概可以分为以下四类:

  硬件仿真

  完全虚拟化

  半虚拟化

  操作系统级的虚拟化

  硬件仿真:最复杂的虚拟化实现技术就是硬件仿真,在这种方法中,可以在宿主系统上创建一个硬件 VM 来仿真所想要的硬件。使用硬件仿真的主要问题是速度会非常慢,因为每条指令都必须在底层硬件上进行仿真。但是使用硬件仿真,您可以在一个 ARM 处理器主机上运行为 PowerPC设计的操作系统,而不需要任何修改。硬件仿真的产品有Bochs和qemu。

  操作系统级的虚拟化:这种技术在操作系统本身之上实现服务器的虚拟化。这种方法支持单个操作系统,并可以将独立的服务器相互简单地隔离开来。比如Virtuozzo。好像应用不是很多?

  而市面上主要的产品都是完全虚拟化或者半虚拟化的。

  完全虚拟化(full virtualization):这种模型使用一个虚拟机,它在客户操作系统和原始硬件之间进行协调。"协调"在这里是一个关键,因为 VMM 在客户操作系统和裸硬件之间提供协调。特定受保护的指令必须被捕获下来并在 hypervisor 中进行处理,因为这些底层硬件并不由操作系统所拥有,而是由操作系统通过 hypervisor 共享。虽然完全虚拟化的速度比硬件仿真的速度要快,但是其性能要低于裸硬件,因为中间经过了 hypervisor 的协调过程。完全虚拟化的最大优点是操作系统无需任何修改就可以直接运行。惟一的限制是操作系统必须要支持底层硬件。

  完全虚拟化又分为传统的和硬件辅助的。传统的完全虚拟化,虚拟机运行在操作系统之上,虚拟机管理程序本身运行在cpu的Ring 0,虚拟的Guest OS则运行在Ring 1(为了避免Guest OS破坏Host OS,Guest OS必须运行 在低于Ring 0的权限)。但是这样一来Guest的兼容性会受到影响,并且原来Guest OS要在Ring 0上执行的指令都必须经过hypervisor翻译才能运行,速度会有所下降。而硬件辅助的完全虚拟化需要cpu硬件支持,有intel的VT和AMD的 AMD-V两种技术,只有支持这两种技术的cpu才可以使用。硬件辅助的虚拟化把虚拟机管理程序本身放到比Ring 0还低的模式运行(比如Ring -1),而把Guest OS放到Ring 0,这样兼容性得到了提高,不过因为第一代硬件虚拟技术(VT和AMD-V)实现上还不够成熟,所以效率上并不比传统的完全虚拟化更高(只能是某几方面高某几方面低)。传统的完全虚拟化技术已经发展了多年,其开发比较复杂,以前的技术一般都是为x86开发的,对于x64不好用,x64上有了VT和 AMD-V之后,估计厂商已经不愿意再花力量为x64开发传统的虚拟机了,所以想要运行64位的Guest OS,都需要VT或AMD-V的支持()。

  半虚拟化(para virtualization):半虚拟化可以提供极高的性能,它与完全虚拟化有一些类似。这种方法使用了一个 hypervisor 来实现对底层硬件的共享访问,还将与虚拟化有关的代码集成到了操作系统本身中。与硬件辅助的完全虚拟化有一点相似是hypervisor运行在Ring -1,而Guest OS运行在Ring 0上。但是半虚拟化有一个缺点是必须修改客户操作系统,因为半虚拟化为了提高效率,必须要让Guest OS本身意识到自己运行在虚拟机上,所以在Guest OS的内核中需要有方法来与hypervisor进行协调,这个缺点很大的影响了半虚拟化技术的普及,因为Linux等系统可以修改,而其它不能修改的系统就不能用了。