Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1371534
  • 博文数量: 244
  • 博客积分: 3321
  • 博客等级: 中校
  • 技术积分: 2704
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-26 08:17
个人简介

微信公众号:杰夫弹弹看

文章分类

全部博文(244)

文章存档

2018年(4)

2017年(32)

2016年(25)

2015年(28)

2014年(27)

2013年(34)

2012年(25)

2011年(30)

2010年(39)

分类: 虚拟化

2012-06-08 22:11:22

X86处理器引入的一个很重要的虚拟化支持就是Non-Root模式和Root模式。VMM运行在Root模式,guest OS都运行在Non-Root模式。

为什么引入这种特殊的模式呢? 这要从X86的毛病说起,因为X86架构在2005年之前都对虚拟化没有相应的支持:在于,

首先,X86的处理器指令有一部分是特权指令,在用户模式下,它们会被trap,如果在内核模式,不会trap。

除此之外,还有一部分指令很特殊(sensitive instruction),会涉及到对系统资源的访问,比如对标志寄存器的修改。这些指令在用户模式下不会被trap。这样会造成guest OS 认为状态更改了,但是Hardware本身忽略这些修改。所以需要通过一种手段来截获这些特殊的敏感指令,在VMM层进行相应的模拟,例如二进制翻译。

虽然在VMware在软件层次的全虚拟化方法性能上不错,但是离开了硬件上的虚拟化支持还是有所打折。2005年——2006年,Intel/AMD推出了VT/SVM,CPU引入了Non-Root模式和Root模式,使得敏感指令在guest OS执行时,会被VMM截获,直接转换等价的硬件指令执行。

KVM最初的出发点就是利用硬件技术的虚拟化,来实现Linux host OS的全虚拟化方案, 而Vmware直到2007年才推出第一款利用Hardware虚拟化的Hypervisor。


参考资料:

(1)KVM: Kernel-based Virtualization Driver

(2)Understanding Full Virtualization, Paravirtualization, and Hardware Assist  

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