【IT168 专稿】QEMU是一套由Fabrice Bellard]所编写的仿真处理器的自由软件。它与Bochs,PearPC近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性。经由kqemu这个开源的加速器,QEMU能仿真至接近真实计算机的速度。本文所介绍的一种有趣的虚拟化应用程序 QEMU 并非目前的热门技术。QEMU 应用程序适用于各种设置。可用于来宾操作系统的虚拟化,或作为完整的机器仿真器使用,运行使用主机 CPU 或其他 CPU 架构的操作系统。
一、QEMU简介
QEMU有两种主要运作模式:
QEMU应用程序适用于各种设置。可用于来宾操作系统的虚拟化,或作为完整的机器仿真器使用,运行使用主机CPU或其它CPU架构的操作系统。一种有用的技术称为仿真。仿真,顾名思义,通过模拟完整的硬件环境来虚拟化来宾平台。仿真可通过多种方法实现,即使在同一个解决方案中也是如此。通过仿真实现虚拟化的技术有QEMU和Bochs。
QEMU的优点
可以仿真 IA-32 (x86)个人计算机,AMD64个人计算机, MIPS R4000,升阳的 SPARC sun3 与 PowerPC(PReP 及 Power Macintosh)架构
支持其它架构,不论在主机或虚拟系统上(请参看QEMU主页以获取完整的清单)
增加了仿真速度,某些程序甚至可以实时运行
可以在其它平台上运行Unix、Linux的程序
可以储存及还原运行状态(如运行中的程序)
可以虚拟网络卡
可模拟多CPU
QEMU架构如图-1
图-1 QEMU架构
1.QEMU两种模式的基本操作
QEMU支持两种操作模式:用户模式仿真(User mode)和系统模式仿真(System mode)。
用户模式仿真
QEMU能启动那些为不同中央处理器编译的Linux程序。而Wine及Dosemu是其主要目标。用户模式仿真允许一个CPU构建的进程在另一个CPU上执行(执行主机CPU指令的动态翻译并相应地转换Linux系统调用)。
系统模式仿真
系统模式仿真允许对整个系统进行仿真,包括处理器和配套的外围设备。在x86主机系统上仿真x86代码时,使用QEMU加速器可以实现近似本地的性能。这让我们能够直接在主机CPU上执行仿真代码(在Linux上通过kernel模块执行)。但是从技术角度看,QEMU的有趣之处在于其快速、可移植的动态翻译程序。动态翻译程序允许在运行时将用于目标(来宾)CPU的指令转换为用于主机CPU,从而实现仿真。这可以通过一种强制方法实现(将指令从一个CPU映像到另一个CPU)。但是情况并非总是这样简单,在某些情况下,根据所翻译的架构,可能需要使用多个指令或行为更改。QEMU实现动态翻译的方法是,首先将目标指令转换为微操作。这些微操作是一些编译成对象的C代码。然后构建核心翻译程序。它将目标指令映像到微操作以进行动态翻译。这不仅可产生高效率,而且可以移植。QEMU的动态翻译程序还缓存了翻译后的代码块,使翻译程序的内存开销最小化。当初次使用目标代码块时,翻译该块并将其存储为翻译后的代码块。QEMU将最近使用的翻译后的代码块缓存在一个16MB的块中。QEMU甚至可以通过在缓存中将翻译后的代码块变为无效来支持代码的自我修改。
要了解QEMU及其动态翻译程序的更多内部细节,请参阅QEMU的作者所撰写的有趣文章(Fabrice Bellard的"QEMU, a Fast and Portable Dynamic Translator"(PDF),了解QEMU动态翻译的内部细节)。