虚拟化是一块“肥肉”,思杰公司也想分一杯羹,于2003年推出了XEN虚拟化解决方案,它采用的解决方案与vmware公司的虚拟化有些不同,但是vmware公司已经占据了市场的制高点,成了虚拟化市场的霸主。
我们下面来看一下,思杰公司是如何解决X86架构CPU的缺陷的,这里的缺陷就是指的是敏感指令并不全是特权指令。
hypercall超级调用
思杰公司采用hypercall的技术解决部门敏感指令不能被捕捉的问题。他们的思路有点像《×××帝国》的“莫费斯”,他告诉了男主他并不是真实的。OS认为他就是一台真实物理机,xen修改了OS的部分代码,告诉OS它就是一个虚拟机,这样的话当OS要运行一些敏感指令的时候就转换为发给VMM的hypercall,由VMM继续进行处理。
OS明确知道自己是运行在环1上,而不是环0上,所以有效的避免了执行冲突的问题。
我们可以看出来,xen的虚拟化比较有哲学意义,它让OS更加现实,接受了自己就是虚拟机的现实;它让OS更像一个软件,使用敏感指令的时候会主动通过VMM,让VMM发起对硬件的调用。
我认为用被抓和自首来比喻全虚拟化和半虚拟化比较恰当,区分在于被动和主动。
而在全虚拟时,OS对自己是虚拟机的事实一概不知,所以老是做出一些“出格”的事情,它明明运行在环1上却想运行环0的指令,而全虚拟化的VMM就像警察,每当OS犯罪的时候就会发现,发现会进行降级和模拟处理,但并不是每次OS做出犯罪行为时VMM都能识别,之后有了二进程翻译技术之后,警察就会发现OS每次的犯罪行为,然后被“抓起来”进行处理
而半虚拟化就像人自首,并不用VMM进行捕获,当OS想要做一些出格的事情时,就会直接进行一些库调用,这些库调用是通过对VMM进行抽象得来的,所以一调用就是直接告诉VMM了,它不用被监控了,实现这一些的前提就是修改OS的代码,所以xen只支持linux,而不是支持windows上原因。
怎样理解半虚拟化?
所谓的全虚拟化就是我自己并不是知道自己是虚拟机,对于客户端而言都是没有感觉的,这就是全虚拟化。
当OS知道了自己就是虚拟机之后,全虚拟化就不再全了,客户有感觉了,这种就叫做半虚拟化。
在效率性能上,半虚拟化比vmware要高很多。
原文地址:http://blog.51cto.com/13778749/2161670