QEMU（Quick Emulator）是一款免費開源模擬器，由法布里斯貝拉（Fabrice Bellard）等人編寫。其與 Bochs，PearPC 類似，但擁有高速（配合 KVM）、跨平臺的特性。 QEMU 是一個託管的虛擬機器，它使用動態二進位制轉換技術來模擬處理器，並且提供多種硬體和外設模型，這使它能夠執行多種未修改的客戶機作業系統，能與 KVM 配合以接近本地速度執行虛擬機器（接近真實電腦的速度）。 QEMU 可以執行使用者級的程序模擬，從而可以使為某一架構編譯的程式在另一架構上執行（透過 VMM 的形式實現）。 __TOC__ 系統模組 QEMU 有多種模式： User mode：又稱作 使用者模式，在這種模式下，QEMU 運行針對不同指令編譯的單個 Linux 或 DarwinmacOS 程式。系統呼叫與 3264 位介面適應。在這種模式下，我們可以實現交叉編譯（crosscompilation）與交叉偵錯（cross debugging）。 System mode：系統模式，在這種模式下，QEMU 模擬一個完整的計算機系統，包括外圍裝置。它可以用於在一臺計算機上提供多臺虛擬計算機的虛擬主機。 QEMU 可以實現許多客戶機 OS 的引導，比如 x86，MIPS，32bit ARMv7，PowerPC 等等。 KVM Hosting：QEMU 在這時處理 KVM 映象的設定與遷移，並參加硬體的模擬，但是客戶端的執行則由 KVM 完成。 Xen Hosting：在這種託管下，客戶端的執行幾乎完全在 Xen 中完成，並且對 QEMU 遮蔽。QEMU 只提供硬體模擬的支援。 架構 QEMU 的架構由純軟體實現，並在 Guest 與 Host 中間，來處理 Guest 的硬體請求，並由其轉譯給真正的硬體。 然而因為 QEMU 是純軟體實現的，所有的指令都要經過 QEMU，使得效能很差，而配合 KVM 則可以解決這一問題。 QEMU 虛擬化的思路是：提取 Guest 程式碼，翻譯為 TCG 中間程式碼，而後翻譯為 Host 程式碼。相當於實現了一個 中間人 的角色。 特性 QEMU 可以在執行所有程式的情況下儲存和恢復虛擬機器的狀態。客戶作業系統（Guest Operating System）不需要修補就可以在 QEMU 中執行。 QEMU 支援模擬各種體系結構，包括： IA32（x86）個人電腦 x8664 個人電腦 MIPS64 Release 6 和更早的版本 Sun 的 SPARC sun4m Sun 的 SPARC sun4u ARM 開發板（Integrator CP 和 Versatile PB） SH4 SHIX 板 PowerPC（PReP 和 Power Macintosh） ETRAX CRIS MicroBlaze RISCV LoongArch 虛擬機器可以連線多種型別的實體主機硬體，包括硬碟，CDROM，網絡卡，音效卡和 USB 裝置。USB 裝置可以是完全模擬的，也可以使用主機的 USB 裝置（但這需要管理員許可權，而且並非所有裝置皆適用）。 虛擬磁碟映像可以以特殊格式（qcow 或 qcow2）儲存，只佔用虛擬機器作業系統實際使用的磁碟空間。此時模擬的 120 GB 硬碟可能僅佔用主機硬碟幾百 MB 的空間。QCOW2 格式還允許建立覆蓋映像，以記錄與另一個（未修改的）基本映像檔案的區別。如此便可能將模擬磁碟的內容恢復到較早狀態。例如，基本映像檔案可以儲存已知可順利運作的全新安裝系統，但操作時使用覆蓋映像。萬一訪客系統故障（如因病毒攻擊，意外的系統破壞等），使用者可以刪除覆蓋映像，使用較早的模擬磁碟映像版本就行了。 QEMU 可以透過網路地址轉換模擬共享主機系統連線的網絡卡（不同型號），從而有效地允許 guest 虛擬機器使用與主機相同的網路。虛擬網絡卡還可以連線到其他 QEMU 例項的網絡卡或本地 TAP 介面。透過使用主機 OS 的橋接功能，將 QEMU 使用的 TUN TAP 介面與主機 OS 上的非虛擬乙太網介面橋接，也可以實現網路連線。 QEMU 集成了多種服務以允許主機和訪客系統進行通訊；例如，整合的 SMB 伺服器和網路埠重定向（以允許傳入連線到虛擬機器）。它也可以在沒有載入程式的情況下引導 Linux 核心。 QEMU 不依賴主機系統上的圖形輸出方法。相反，它可以允許透過整合的 VNC 伺服器訪問客戶作業系統的螢幕。它還可以使用模擬的序列線，而不使用任何螢幕和適用的作業系統。 模擬多個 CPU 進行對稱多處理（Symmetrical MultiProcessing）也是可能的。 QEMU 不需要管理員許可權執行，但在使用了某些提高速度的核心模組（如 KQEMU），或者使用某些網路連線模組時，則需要管理員許可權。 微型程式碼生成器 微型程式碼生成器（TCG）旨在消除依賴特定版本的 GCC 或編譯器的缺點，並將編譯合併到 QEMU 的執行時任務中。因此，整個翻譯階段由兩部分組成：目的碼塊（TB）以 TCG 指令（一種機器無關的中間符號）重寫 ，隨後 TCG 為宿主機架構執行編譯。可選的最佳化在這兩步之間傳遞。 TCG 需要專用的程式碼來支援每個體系結構。它還要求重寫目標指令集翻譯過程以利用 TCG 指令，而不是以前使用的 dyngen 指令。 加速器 KQEMU 是一個 Linux 核心模組，由 Fabrice Bellard 撰寫，它明顯加快了在具有相同 CPU 架構的平臺上模擬 x86 或 x8664 程式的速度。這可以透過直接在主機 CPU 上執行使用者模式程式碼（以及可選的某些核心程式碼）以及僅對核心模式和真實模式程式碼使用處理器與外設模擬來實現。即使宿主機 CPU 不支援硬體輔助虛擬化，KQEMU 也可以從多個客戶作業系統執行程式碼。QEMU 支援大容量記憶體，這使得它們與 KQEMU 不相容。較新的 QEMU 版本已完全取消對 KQEMU 的支援。 由於缺乏對 KQEMU 和 QVM86 的支援，基於核心的虛擬機器（KVM）已經基本成為基於 Linux 的硬體輔助虛擬化解決方案，與 QEMU 一起使用。 英特爾的硬體加速執行管理器（HAXM）是 KVM 在 Windows 和 MacOS 上基於 x86 的硬體輔助虛擬化的開源替代品。2013 年，英特爾使用 QEMU 來進行 Android 開發。 硬體輔助模擬 MIPS 相容的龍芯 3 處理器增加了 200 條新指令來幫助 QEMU 翻譯 x86 指令，這些新指令降低了在 MIPS 流水線中執行 x86 CISC 風格指令的開銷。由於中國科學院對 QEMU 進行了進一步改進，龍芯 3 在 9 個基準測試中，執行 x86 二進位制檔案的同時，執行本機二進位制檔案的平均效能達到 70％。 並行模擬 使用 QEMU 的虛擬化解決方案能夠並行執行多個虛擬 CPU。 對於使用者模式模擬，QEMU 將模擬執行緒對映到宿主執行緒。 對於全系統模擬，QEMU 能夠為每個虛擬 CPU 執行一個主機執行緒。 前提是客戶端已經更新到可以支援並行系統模擬，目前可以支援的 CPU 是 ARM 和 Alpha。否則 QEMU 將使用單個執行緒以迴圈方式模擬執行每個虛擬 CPU。 與其他虛擬機器的整合 VirtualBox VirtualBox，釋出於 2007 年 1 月，使用了一些 QEMU 的虛擬硬體裝置，並且有內建的基於 QEMUdede 動態再編譯器。與 KQEMU 一樣，VirtualBox 透過 VMM（虛擬機器管理器）在宿主機上本地執行幾乎所有客戶程式碼，並將再編譯僅僅用作回退機制 例如，當客戶程式碼以實地址模式執行時。 另外，VirtualBox 使用內建的反彙編程式進行了大量的程式碼分析和修補，以儘量減少再編譯。除某些功能外，VirtualBox 是免費且開源的（在 GPL 許可下）。 XenHVM Xen 是虛擬機器監視器，可以使用 Intel VTx 或 AMDV 硬體 x86 虛擬化擴充套件以及 ARM CortexA7 和 CortexA15 虛擬化擴充套件在 HVM（硬體虛擬機器）模式下執行。 這意味著，面對 domU 以使用真實的裝置驅動程式進行交談的是一組真實的虛擬硬體，而不是半虛擬化裝置。 QEMU 包含幾個元件：CPU 模擬器，模擬裝置，通用裝置，機器描述符，使用者介面和偵錯程式。 QEMU 中的模擬器件和通用器件組成了虛擬 IO 的器件模型。它們包括 PIIX3 IDE，Cirrus Logic 或純 VGA 模擬影片，RTL8139 或 E1000 網路模擬以及 ACPI 支援。Xen 提供 APIC 支援。 XenHVM 具有基於 QEMU 專案的裝置模擬功能，可為虛擬機器提供虛擬 IO。硬體透過執行在 dom0 後端的 QEMU 裝置模型 守護程序來模擬。與其他 QEMU 執行模式（動態轉換或 KVM）不同，虛擬 CPU 完全由管理程式管理，管理程式負責在 QEMU 模擬記憶體對映 IO 訪問時停止虛擬 CPU。 KVM KVM（基於核心的虛擬機器）是 FreeBSD 和 Linux 的核心模組，它允許使用者空間程式訪問各種處理器的虛擬化硬體特性，這個特點使得 QEMU 可以為 x86，PowerPC 和 S390 客戶提供虛擬化。當目標體系結構與主機相同時，QEMU 可以使用 KVM 特有的功能，比如加速功能。 Win4Lin Pro Desktop 在 2005 年初，Win4Lin 推出了 Win4Lin Pro Desktop，它基於 QEMU 和 KQEMU 的已調諧版本，並且託管了 Windows 的 NT 版本。 在 2006 年 6 月， Win4Lin 釋出了基於相同程式碼庫的 Win4Lin 虛擬桌面伺服器。 Win4Lin 虛擬桌面伺服器為來自 Linux 伺服器的精簡客戶機提供 Microsoft Windows 會話服務。 2006 年 9 月，Win4Lin 宣佈將公司名稱更改為 Virtual Bridges，併發布了 Win4BSD Pro Desktop，該產品的一個埠用於 FreeBSD 和 PCBSD。在 2007 年 5 月釋出了 Win4Solaris Pro Desktop 和 Win4Solaris 虛擬桌面伺服器後，提供了 Solaris 支援。 SerialICE SerialICE 是一款基於 QEMU 的韌體除錯工具，可在 QEMU 內部執行系統韌體，同時透過與主機系統的序列連線訪問真實硬體。這可以用作硬體 ICE 的廉價替代品。 WinUAE WinUAE Amiga 模擬器在 300 版本中引入了對使用 QEMU PPC 核心的 CyberStorm PPC 和 Blizzard 603e 開發板的支援。 硬體平臺模擬 QEMU 可模擬多種硬體裝置 鍵盤 SCSI 控制器（AMD PCscsi 和 Tekram DC390 控制器中的 LSI MegaRAID SAS 1078，LSI53C895A，NCR53C9x） 序列介面 音效卡（Sound Blaster 16，ES1370 PCI，Gravis Ultrasound，AC97 和 Intel HD Audio） 看門狗定時器（Intel 6300 ESB PCI 或 iB700 ISA） USB 1x 2x 3x 控制器（UHCI，EHCI，xHCI） USB 裝置：音訊，藍牙介面卡，HID（鍵盤 滑鼠 平板電腦），MTP，序列介面，CAC 智慧卡讀卡器，儲存（僅批次傳輸和 USB 連線 SCSI），Wacom 數位板 arm QEMU 使用 NEON 擴充套件模擬 ARMv7 指令集。它模擬整合系統 CP 板，多功能底板，RealView 模擬底板，基於 XScale 的 PDA，Palm Tungsten E PDA，諾基亞 N800 和諾基亞 N810 網際網路平板電腦等完整系統QEMU 還為 Android SDK 提供支援，該模擬器屬於 Android SDK 。三星選擇了 QEMU 來幫助開發模擬 Wave 裝置。 基於 Xilinx Cortex A9 的 Zynq SoC 採用以下元素進行建模模擬： Zynq7000 ARM CortexA9 CPU Zynq7000 ARM CortexA9 MPCore 三重計時器 DDR 記憶體控制器 DMA 控制器（PL330） 靜態儲存器控制器（NAND NOR 快閃記憶體） SD SDIO 外設控制器（SDHCI） Zynq 千兆乙太網控制器 USB 控制器（僅限 EHCI 主機支援） Zynq UART 控制器 SPI 和 QSPI 控制器 I2C 控制器 派生版本 UTM 虛擬機器（UTM Virtual Machine）是一款基於 QEMU 的虛擬機器，支援 iOS、iPadOS、macOS 作業系統。基於 QEMU 的 UTM 虛擬機器，可支援模擬 30 多個架構，例如 x86_64，ARM64，以及 RISCV 等。 目前 UTM 支援在系統版本 iPadOS 13 以上、iOS 11 以上、macOS Big Sur 以上的裝置上執行。 參見 系統虛擬機器比較 VirtualBox 參考文獻 外部連結 QEMU 的主頁 QEMU on Windows 已編譯的二進位制可執行檔案 qemu0124 Binaries x86 x64） 同上 Drivers for QEMU devices 驅動程式 Qemu Manager 初學者易用 用 Eee PC 901 同時執行四個 OS！（Windows XP、Linux 加集體回憶 DOS Windows 3x 及 Windows 95） 實作 QEMU 虛擬機器 PXE 網路開機 Category 自由虛擬化軟體 Category 自由跨平臺軟體