QEMU支持3种运行模式 -- 理解
虚拟机的运行软件是QEMU。QEMU官方(www.qemu-project.org)对自己的定义为“QEMU is a generic and open source machine emulator and virtualizer.”名称取自“Quick EMUlator”。
QEMU支持3种运行模式:
Full-system emulation:Run operating systems for any machine, on any supported architecture
User-mode emulation:Run programs for another Linux/BSD target, on any supported architecture
Virtualization:Run KVM and Xen virtual machines with near native performance
用户模式仿真允许将 为一个 CPU arch A(arm)构建的 可执行程序(用户层程序,比如linux os 上面的一个elf 格式程序)在另一个 CPU arch B(x86) 上执行,前提是这两个CPU arch A and B 上面都运行的是同一个OS (比如linux),需要这个arch (x86) + OS (linux) 上面运行的 qemu 具有翻译另外一个arch 的指令(机器码)的能力。因为用户层可执行程序仅仅是对OS的调用,所以通过qemu 可以将 arm 指令描述的对OS 的调用翻译为对x86 指令描述的对OS的调用调用即可。
系统模式仿真允许对整个系统进行仿真,包括处理器和配套的外围设备;可以用x86 linux 上面运行的qemu 模拟一个arm开发板,这是就必须使用 系统模式仿真。虚拟化和用户模式仿真都达不到这种级别的模拟。虚拟化无法实现不同arch的模拟,用户模式模拟器无法实现裸板 级别的模拟。
虚拟化运行模式是指通过底层的硬件支持(Intel-VT,AMD-V等虚拟化技术)和Xen或者KVM等系统级虚拟化技术相结合,高效运行虚拟化系统。一个arch (x86)的cpu + 外设,虚拟为多台相同arch + 不同外设的虚拟机器。
模拟器(emulation)和虚拟化(virtulization)的区别
模拟器是emulator,通常是为了模拟不同指令集、不同体系架构的 CPU,所以多数情况要对微指令进行解释执行,效率相对与虚拟化慢很多;
虚拟化技术 virtualization,基本都是去虚拟出来另外一套相同指令集相同架构的硬件平台,因此在做好保护的前提下,很多时候可以直接利用 CPU 去执行目标指令。虽然还是模拟物理 CPU 而不借助于 Host OS 的功能,少了一层指令集转换,运行速度会提高不少。