虚拟化技术(2)系统虚拟化
系统虚拟化是虚拟化技术中的一种,其抽象的粒度是整个计算机。系统虚拟化的目的通过使用虚拟化管理器(Virtual Machine Monitor,简称VMM,也称Hypervisor)是在一台物理机上虚拟和运行一台或多台虚拟机(Virtual Machine,简称VM),每个虚拟机都拥有自己的虚拟硬件,来提供一个独立的虚拟执行环境。系统虚拟化架构如下所示:系统虚拟化实现中,Hypervisor运行在
概述
系统虚拟化是虚拟化技术中的一种,其抽象的粒度是整个计算机。系统虚拟化的目的通过使用虚拟化管理器(Virtual Machine Monitor,简称VMM,也称Hypervisor)是在一台物理机上虚拟和运行一台或多台虚拟机(Virtual Machine,简称VM),每个虚拟机都拥有自己的虚拟硬件,来提供一个独立的虚拟执行环境。系统虚拟化架构如下所示:
系统虚拟化基本功能
系统虚拟化实现中,Hypervisor运行在硬件资源层上,并为虚拟机提供虚拟的硬件资源,而客户机操作系统则运行在虚拟的硬件资源上。综合来看,Hypervisor应当包含两部分功能:虚拟环境的管理和物理资源的管理。
- 虚拟环境的管理:Hypervisor负责为虚拟机提供虚拟的硬件资源,因此至少应当提供三个基本模块:1)CPU虚拟化模块; 2)内存虚拟化模块;3)IO设备虚拟化模块。除此之外,还应当提供完备的调度机制来调度多个虚拟机的执行以及一套完整的管理接口。
- 物理资源的管理:类似于操作系统,Hypervisor本身也承担了全部或者部分物理资源管理的角色,包括管理底层物理资源、提供安全隔离机制以及系统时间维护等。
现代计算机中最核心的三类资源就是CPU、内存和IO设备,因此Hypervisor的主要任务就是完成这三类硬件的虚拟化:CPU虚拟化、内存虚拟化和IO虚拟化。
CPU虚拟化
在物理环境下,操作系统具有最高特权级别,可以访问寄存器、内存和IO设备等关键的物理资源。但是,在虚拟环境下,虚拟机理论上是不允许直接操作物理资源的,否则会和Hypervisor以及其它虚拟机产生冲突。因此,虚拟机对物理资源的访问应当触发异常,然后陷入到Hypervisor中进行模拟实现,这也是经典的虚拟化处理方法,即Trap-Emulate(陷入-模拟)模型。另外,CPU虚拟化还要考虑中断和异常的模拟及注入。
内存虚拟化
操作系统对于物理内存的使用基于两个假设:①内存都是从物理地址0开始的;②物理内存都是连续的。对于一台物理机上的多个虚拟机而言,它们共享物理内存资源,无法满足上述的假设。内存虚拟化为虚拟机提供了客户机物理地址空间,以保证客户机操作系统对于内存的使用认知不变,但是虚拟机无法通过GPA(客户机物理地址)直接访问内存的数据,而要由Hypervisor截获虚拟机对GPA的访问,并将GPA转换成HPA(宿主机物理地址)。
IO虚拟化
在物理环境下,操作系统通过PIO或者MMIO方式访问实际的IO设备,而在虚拟环境中,客户机操作系统看到的都是Hypervisor模拟出来的虚拟设备,因此Hypervisor需要截获虚拟机所有的PIO和MMIO操作并对其进行模拟实现,然后将结果告知虚拟机。
系统虚拟化实现结构
根据Hypervisor与物理资源和操作系统交互方式的不同,可以将Hypervisor分为两类:
- Type I Hypervisor,也称之为裸机型Hypervisor(Bare-metal Hypervisor)。Type I Hypervisor直接运行在硬件资源上面,可以提供接近于物理机的性能。Type I Hypervisor的实现包括Xen、ACRN等;
- Type II Hypervisor,也称之为宿主型Hypervisor(Hosted Hypervisor)。Type II Hypervirsor运行在操作系统上面,相较于Type I Hypervisor,由于与硬件之间隔了一个操作系统,因此性能上会逊色一些。但由于Type II Hypervisor实现与对应操作系统生态联系比较密切,因此当前应用更加广泛,包括KVM、VMware Fusion、VirtualBox和Parallels Desktop等,都属于此类。
系统虚拟化实现方式
系统虚拟化技术按照实现方式可以分为基于软件的全虚拟化技术(Full Virtualization)、半虚拟化技术(Para-Virtualization)以及硬件辅助的全虚拟化技术。其中:
- 全虚拟化技术无须修改客户机操作系统就可以正常运行虚拟机,此时客户机操作系统“认为”自己就是运行在真实的物理硬件资源上;
- 半虚拟化技术需要客户机操作系统做一些修改,使客户机操作系统意识到自己是运行在虚拟化环境中,从而可以允许Hypervisor针对性地对虚拟机性能进行优化。
早期由于硬件缺乏对虚拟化的支持,只能使用纯软件的方式来实现全虚拟化,如陷入-模拟、解释执行、二进制翻译等技术;后续为了提升运行效率,出现了虚拟机与Hypervisor配合实现的半虚拟化技术,如Xen使用的Hypercall技术。随着技术的演进,硬件开始增加对虚拟化技术的支持,于是产生了硬件辅助的全虚拟化技术实现,典型的如Intel的VT技术、AMD的AMD-V技术等。综合以上,我们可以细化虚拟化技术的实现分类,即:
相关参考
- 《系统虚拟化——原理与实现》
*《深入浅出系统虚拟化:原理与实践》 - 《Linux开源存储全栈详解——从Ceph到容器存储》
更多推荐
所有评论(0)