云计算虚拟化技术与开发
上QQ阅读APP看书,第一时间看更新

3.1.1 QEMU实现原理

QEMU采用动态翻译技术,先将目标代码翻译成一系列等价的被称为“微操作”(Micro-Operations)的指令,然后再对这些指令进行复制、修改、连接,最后产生一些本地代码。这些微操作排列复杂,从简单的寄存器转换模拟到整数/浮点数学函数模拟再到load/store操作模拟,其中load/store操作的模拟需要目标操作系统分页机制的支持。

QEMU对客户代码的翻译是按块进行的,并且翻译后的代码被缓存以便将来重用。在没有中断的情况下,翻译后的代码仅仅是被链接到一个全局的链表上,目的是保证整个控制流保持在目标代码中。当异步的中断产生时,中断处理函数就会遍历串连翻译后代码的全局链表来在主机上执行翻译后的代码,这就保证了控制流从目标代码跳转到QEMU代码。简单概括为:指定某个中断来控制翻译代码的执行,即每当产生这个中断时才会去执行翻译后的代码,没有中断时仅仅只是个翻译过程而已。这样做的好处就是,代码是按块翻译,按块执行的,不像Bochs翻译一条指令,马上就执行一条指令。Bochs是一个x86硬件平台的开源模拟器,可以模拟各种硬件的配置。Bochs模拟的是整个PC平台,包括I/O设备、内存和BIOS等。