虛擬機的運行軟件是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 的功能,少了一層指令集轉換,運行速度會提高不少。