先来回答后者:所谓虚拟,既与真相对,又与假相反。如何获取定义,取决于所在的位置。在虚拟之中,虚拟就是真;而在虚拟之外,虚拟就是假。(我知道大家想到了The Matrix)
根据虚拟的理解,虚拟机无非就是计算机前面加个定义,对于虚拟机之外,这个计算机就是假的,而在虚拟机内,这个计算机就是真的。
别急,虚拟机里面就一定认为是真的吗?答案是否定的。
虚拟化一般分为全虚拟和半虚拟。比如HyperV、Xen这种是半虚拟,虽然的确可以运行单独的操作系统,但他们更像是一种管理系统来管理部署多个操作系统。半虚拟在虚拟机内能明确感知(拟人)到自己所处于虚假的环境,而且或多或少直接访问到真实的环境。这也是为什么半虚拟的解决方案往往拥有更高的性能。
许多桌面应用,比如vmware workstation/vpc/virtual Box 等就是全虚拟,他们常常安装在宿主机上,比如win7。通常情况下全虚拟部署简便,管理省心,初中生都可以开个虚拟机多开游戏来玩。全虚拟的情况下虚拟机内是不能明确感知(又是拟人)自己所处的虚假环境的。这里说不能明确感知,表明刻意地去检测,还是很容易检测到虚拟的环境的。最按照套路出牌的是检测一些硬件加速上的bug,网上去搜索一下挺有趣的。因为全虚拟会损失一定性能,虚拟机/宿主操作系统/物理硬件会提供一些技术来加速全虚拟的虚拟机,加之为了提供一些额外的功能,虚拟机内可以很容易地检测,比如win8.1本身就有检测虚拟机的能力(原理暂未深究)。当然还有一些非常规的做法,比如硬件的名称(你电脑城买得到vmware的硬盘?买的倒vmware的显示器?),还可以检测一些虚拟环境一定需要的组建。不过,你可以通过完全地二进制模拟、关闭一些特性来尽可能地做到虚拟的完全性。
再来,假如当前环境是虚拟的,那么上一个环境就是真实的,这样说可以吗?不可以!虚拟化可以嵌套,你完全可以虚拟一个intel vt-x 然后再虚拟机里面装ms2008玩hyperV。
以上胡乱说了虚拟机的大原理,似乎有些跑题,题主问虚拟机的实现原理,而且还限定vmware,我猜你并不是真的要问虚拟机的实现原理吧。首先做虚拟机的有很多,vmware公司更是拥有各个线的产品,要说实现原理还真不简单。首先不同的产品有不同的技术,而且虚拟不同的硬件,提供各种借口,在物理硬件上调度,要实现的东西太多了。vmware 提供的是非开源的商业产品,你可以去官方找到各种白皮书,最佳实践什么的能找到很多实现的原理。但更多的实现原理恐怕只有待你加入vmware才能了解了。如果对虚拟化的实现感兴趣,许多开源的虚拟化产品你可以去看下。