Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1247570
  • 博文数量: 122
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4004
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-20 08:27
文章分类
文章存档

2016年(1)

2015年(21)

2014年(100)

分类: LINUX

2014-03-05 14:02:11

 

l  KVMKernel-based Virtual Machine基于kernel的虚拟机

l  VMMVirtual Machine Monitor,虚拟机监控器,在KVM虚拟化环境中,即KVM内核。

l  VMVirtual Machine,虚拟机,即Guest机。

l  全虚拟化:Guest OS无需做任何改动即可运行。有两种实现方式:软件辅助实现和硬件辅助实现。

ü  软件辅助实现的全虚拟化:一般采用优先级压缩(Ring Compression)和二进制翻译(Binary Translation)实现。由于一些特权指令必须运行于特权级Ring0LGDT,通常OS kernel运行Ring0中,这样虚拟化环境中,VMM就没有Ring可用了。优先级压缩大致原理为:使VMM运行于Ring0Guest OS kernel运行于Ring1,而Guest OS user运行于Ring3。优先级压缩能正确处理大部分的特权指令,但是由于x86架构存在虚拟化漏洞(部分敏感指令不能被捕获),采用二进制翻译方法来处理这些虚拟化漏洞:VMM扫描并修改Guest的二进制代码,将无法捕获的敏感指令转换为支持虚拟化的指令。

ü  硬件辅助实现的全虚拟化:依赖硬件虚拟化特性(比如Intel VT-x),基本思想是:在硬件架构上加入了足够的虚拟化功能,使其可以截获Guest OS中所有敏感指令,并进行模拟。

l  半虚拟化:Guest OS需要进行修改,对不能“陷入”的敏感指令进行替换,以解决敏感指令的捕获问题。

l  VT-xIntelCPU虚拟化提供了VT-x(Intel Virtualization for x86)技术(AMD SVM也提供了类似的功能)VT-x引入了一套新的工作模式,即VMX(Virtual Machine eXtension),该模式下的CPU具有两种操作模式:根模式(VMX root operation)和非根模式(VMX non-root operation)。每种操作模式下,都有独立的Ring0-Ring3

ü  VMM运行于根模式,对KVM虚拟化环境来说,即KVM主机运行于根模式,主机中的kernel运行于根模式中的Ring0,主机中用户态程序(比如Qemu-kvm)运行于根模式中的Ring3

ü  Guest运行于非根模式,Guest中的kernel运行于非根模式中的Ring0Guest中的用户态程序运行于非根模式中的Ring3

此外,VT-x还引入了一组新的指令,包括VMLAUNCH/VMRESUME(用于发起VM-Entry)VMREAD/VMWRITE(用于配置VMCS)等。

l  VM-Exit/VM-Entry:在VT-x环境中,非根模式下(Guest),执行敏感指令触发的“陷入”称为VM-ExitVM-Exit发生时,CPU自动从非根模式切换到根模式下,然后就可以由VMM对触发VM-Exit的敏感指令做进一步处理或模拟。

VM-Exit对应的是VM-Entry,此操作由VMM发起,通常是VMM调度某个Guest(VCPU)运行时引起,此时CPU自动由根模式切换为非根模式。

l  VMCS:在VT-x环境中,引入了VMCS(Virtual Machine Control Structure,虚拟机控制结构),以便更好的支持CPU虚拟化。VMCS用于保存虚拟CPU需要的相关状态,比如:CPU在根模式和非根模式下的寄存器的值、VM-Exit的原因等,当CPU发生VM-ExitVM-Entry时,会自动查询和更新VMCSVMM也可以通过配置VMCS控制CPU的行为。

阅读(6754) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~