虚拟化技术一些概念整理
---恢复内容开始---
1 虚拟化技术的实质是一样的:将底层资源进行分区,并向上层提供特定的和多样化的执行环境。
虚拟化系统分类:
a)指令级虚拟化
指令级虚拟化又称为指令集架构级虚拟化(ISA虚拟化)。它通过纯软件方法,模拟出与实际运行的应用程序(或操作系统)不同的指令集去执行,采用这种方法构造的虚拟机一般称为模拟器。模拟器可将客户机发出的所有指令翻译成本地指令集,然后在真实的硬件上执行。
b)硬件级虚拟化
硬件抽象层虚拟化实际上与指令集架构级虚拟化非常相似,其不同之处在于,这种类型的虚拟化所考虑的是一种特殊情况:客户执行环境和主机具有相同指令集的情况,并充分利用这一特点,让绝大多数客户指令在主机上直接执行,从而大大提高了执行的速度。
这种虚拟化技术要能够正确工作,所构造的虚拟机就必须对其中的一些特权指令进行处理,执行时产生Trap(陷入)并将它传递给下层VMM执行。这是因为在虚拟机中运行的未加修改的操作系统会利用特权指令得到CPU和内存资源。当某特权指令执行时产生一个Trap,便马上将指令发送给VMM使得VMM可以完全控制虚拟机并保持每个虚拟机间的隔离。然后,该VMM在处理器中执行该指令,并将模拟结构及特权指令返回给虚拟机。
2 三种虚拟化技术简介
CPU:
1)全虚拟化
在全虚拟化下,VMM可以向虚拟机虚拟出和真实硬件完全相同的硬件环境,为每个虚拟机提供完整的硬件支持服务,包括虚拟BIOS、虚拟设备和虚拟内存管理等。这个过程并不需要硬件或操作系统的协助,因而不需要修改Guest OS的内核,Guest OS完全感知不到是否发生了虚拟化。
2)半虚拟化
在半虚拟化下,VMM需要操作系统的协助才能够完成对x86敏感指令的虚拟化。因而需要对Guest OS的内核进行修改,以便操作系统能够自行对有缺陷的指令进行替换。半虚拟化也可以成为操作系统协助虚拟化OS。在这种情况下,Guest OS是知道自己运行在虚拟机中的。
3)硬件虚拟化
硬件虚拟化又称为硬件辅助虚拟化,就是说VMM需要硬件的协助才能完成对硬件资源的虚拟。硬件虚拟化始于CPU厂商Intel和AMD分别提出的Intel-VT和AMD-V技术,其基本思想是引入新的指令和处理器运行模式,使VMM和Guest OS 运行在不同的模式下。Guest OS只能在受控的模式下运行,当需要由VMM进行监控和模拟时,由硬件支持模式切换。
内存虚拟化:
1)MMU半虚拟化
2)影子页表
I/O设备虚拟化
在全虚拟化、半虚拟化以及硬件虚拟化中,I/O设备虚拟化都不尽相同,其核心在于I/O设备原生驱动的存放位置以及VMM对I/O设备的处理方式。
1)全虚拟化
在全虚拟化下,由于不需要修改Guest OS内核,I/O设备的原生驱动存放在Guest OS中,但是VMM处理设备的方式会根据VMM的位置不同而有所不同。例如,VMM采用独立监控模式,即VMM直接运行在物理硬件上,直接操作硬件设备,而Guest OS看到的则是一组统一的虚拟I/O设备。Guest OS对这些虚拟设备的每一个I/O操作都会陷入VMM中,由VMM对I/O指令进行解析并映射到实际物理设备,然后直接控制硬件完成;VMM运行在一个传统操作系统之上,那么VMM无法获得对硬件资源的完全控制,因此通常用软件模拟的方法来虚拟I/O设备。Guest OS的I/O操作会被VMM捕获,并转交给宿主操作系统的一个用户进程,该进程通过对宿主操作系统调用来模拟设备的行为。
模拟I/O虚拟化方法的最大开销在于处理器模式的切换:包括从Guest OS到VMM的切换,以及从内核态的VMM到用户态的I/O模拟进程之间的切换。因此,对于采用模拟方法进行虚拟化的I/O设备,优化I/O性能的主要策略就是尽量减少模式切换。
2)半虚拟化
在半虚拟化下,修改Guest OS内核,将原生设备驱动从Guest OS中移出,放在一个经过VMM授权的设备虚拟机中,其余虚拟机中Guest OS的I/O请求都交由设备虚拟机处理。而每个Guest OS内部,系统为每个虚拟I/O设备安装一个特殊的驱动程序(半虚拟化驱动程序),由该驱动程序负责I/O请求的传递。设备虚拟机在经过VMM授权后,解析收到的I/O请求并映射到实际物理设备,最后交给它的原生设备驱动程序控制硬件完成。
---恢复内容结束---