在计算机虚拟化领域中,对设备进行模拟是虚拟化实现的基础。设备的模拟主要包括一下三个方面:
设备状态的记录;
设备的运行逻辑的模拟,包括不同状态之间的转换关系,状态转换时对其他设备的影响(没有的话当然最好);
设备跟外界的交互接口,主要是各种总线接口或者I/O地址接口。
说白了其实就是复杂一点的状态机。
实现设备模拟可有两种方式,即纯软件模拟和硬件辅助的方式。
纯软件模拟的方式即借助第三方软件的运行,对设备的状态及运行方式进行模拟,真正运行的是第三方软件,而目标设备只是被间接地运行起来(或者再外界开来似乎是运行起来了),它并没有真正在硬件上运行。这种硬件模拟方式运行起来性能比较差,但是却可以充分发挥软件的灵活性,让第三方软件能够模拟出更多的硬件。
通过硬件辅助的方式进行设备模拟即借助硬件自身的模拟功能,让模拟的设备实实在在地在真是的硬件上运行。为了实现这种功能,即可以通过时分复用的方式也可以通过硬件分区的方式。
时分复用的方式即让某些高速的设备一会儿作为模拟的设备运行,一会儿作为非模拟的设备运行,比如x86 CPU的VMX功能,当VMX功能开启的时候,它就会再vCPU和物理CPU之间不停地切换,让vCPU和物理CPU交替地运行,只要运行和切换的速度足够快,用户就感觉不出来延迟,产生并行执行的错觉。好比演员,在真实世界中是一个人物,在电影、电视剧中又是一个另外的任务,处在一个完全不同的世界中。
硬件分区的方式即将一个完整的硬件划分为N个区域,每个区域运行一个模拟的设备,这个多个模拟的设备可以真正同时运行。这个有点类似于封建社会的分封制度,当某个帝王的儿子长大之后,他就在自己的底盘里画出一片区域,让他自个玩去。