虚拟化技术

虚拟化的含义很广泛,将任何一种形式的资源抽象成另一种形式的技术都是虚拟化技术,比如进程的虚拟地址空间,就是把物理地址虚拟成多个内存空间。相对于进程级的虚拟化,虚拟机是另一个层面的虚拟化,它抽象的是整个物理机,包括CPU 、内存和IO设备。

在一台物理机上可以模拟出多台虚拟机(Virtual Machine,简称VM),每个虚拟机中都可以运行一个操作系统(OS)。提供虚拟化的平台被称为VMM(Virtuall Machine Monitor),在其运行的虚拟级被称为guest VM(客户机)。根据VMM支持的虚拟机制不同,guest VM的运行模式可分为完全虚拟化(Full Virtualization)和类虚拟化(para Virtualization)。

完全虚拟化

如果一个基于硬件(native)的OS不需要修改任何代码就可以直接跑在VMM上,也就是guest OS根本感知不到自己运行在一个虚拟化环境中,这种就被称为“完全虚拟化”。在这种模式下,VMM需要处理guest所有可能的指令。

最简单的方法就是,VMM对guest 运行过程中的每一条指令都进行解释和执行,模拟出这条指令执行的效果,这种方法既适用于和VMM相同体系结构的guest,也能用于模拟和VMM不同体系结构的guest(比如物理CPU是x86的,而guest 是基于 ARM的),其缺点也很明显,就是性能太差。

有一些指令是要操作特权资源的,比如修改虚拟机的运行模式或者下面物理机的状态,读写时钟或者中断寄存器,这些指令被称为敏感指令,确实不合适由guest直接来控制。

然而其他一些非敏感指令,是完全可以在物理CPU上直接执行并返回给guest的,VMM只需要截获并模拟guest对敏感指令的执行和对特权资源的访问就可以了,以Intel的VT-x和AMD的AMD-V为代表的硬件辅助虚拟化技术,就可以帮助VMM高效地识别和截取这些敏感指令。
在这里插入图片描述

类虚拟化

像x86 这种CSIC架构的系统,指令繁杂,其中一些指令是难以虚拟化的,如果使用完全虚拟化,就需要通过二进制代码翻译(binary translation),扫描并修改guest的二进制代码,将难以虚拟化的指令转换为支持虚拟化的指令(ABI级),就像打补丁一样。

如果能直接修改guest 的操作系统内核代码(API级),就可以使得内核避免产生这些难以虚拟化的指令,这就是“类虚拟化”。类虚拟化技术需要修改直接基于native运行的OS的代码,以便和VMM更好配合,其好处是guest的运行性能可以接近物理机的性能。

主流模型

当前主流的虚拟化技术的实现框架可分为三类:

1. Hypervisor模型

在Hypervisor模型中,VMM是一个完备的操作系统,它除了具备操作系统的功能,还具备虚拟化功能。包括CPU、内存和IO设备在内的物理资源都归VMM所有,因此VMM不仅要负责虚拟机环境的创建和管理,还承担着管理物理资源的责任。

在这里插入图片描述
这种方式是比较高效的,然而IO设备种类繁多,管理所有设备就意味着大量的驱动开发工作,在实际产品中,厂商会根据产品定位,有选择的支持一些IO设备,而不是对所有的IO设备都提供支持的。

3. Host模型(宿主机)

在Host模型中,物理资源由host OS管理,host OS是传统操作系统(比如Linux),这些传统操作系统并不是为虚拟化而设计的,因此本身并不具备虚拟化功能,实际的虚拟化功能由VMM来提供。

VMM作为host OS中一个独立的内核模块,通过调用host OS服务来获取资源,实现CPU、内存和IO设备虚拟化。VMM创建出虚拟机后,通常将虚拟机作为host OS的一个进程参与调度。
在这里插入图片描述
host模型最大的优点就是可以充分利用现有操作系统的设备驱动程序,VMM不需要为各种IO设备重新实现驱动,可以专注于物理资源的虚拟化;缺点在于,由于VMM借助host OS的服务来操作硬件,因此受限host OS服务的支持,可能导致硬件利用的不充分。

从架构上看,由Qumranet 公司开发的KVM(Kernel-based Virtual Machine)就是属于host 模型的,kernel-based,顾名思义就是基于操作系统内核。

随着越来越多的虚拟化功能被加入到Linux内核当中,Linux已经越来越像一个hypervisor了,从这个角度看,KVM也可以算是hypervisor模型了。

3. 混和模型

在混合模型中,VMM依然位于最底层,拥有所有的资源,但是为了利用现有操作系统的IO设备驱动程序,VMM会将大部分的IO设备交由一个运行在特权级别的虚拟操作系统(Service OS)来处理,自己则主要负责CPU管理和内存管理。
在这里插入图片描述
混合模型可以说是结合了上述两种模型的优点,既不需要另外开发IO设备驱动程序,又可以通过直接控制CPU和内存实现对这些物理资源的充分利用,以提高效率。

但是它也存在缺点,来自guest OS的IO请求发送到VMM后,VMM需要将这些请求转发到service OS,这无疑增加了上下文的开销。混合模型的代表有Xen,Intel最近推出的Acrn,以及我国工程师写的minos。
上面介绍的这三种VMM实现模型和全虚拟化/类虚拟化的 guest VM之间并没有直接的对应关系,比如Xen 就既可以支持类虚拟化的guest VM,也可以支持全虚拟化的guest VM。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值