QEMU
此條目需要補充更多來源。 (2019年1月20日) |
此條目翻譯品質不佳。 |
QEMU(Quick Emulator)是一款免費開源模擬器,由法布里斯·貝拉(Fabrice Bellard)等人編寫。其與Bochs,PearPC類似,但擁有高速(配合KVM)、跨平台的特性。
開發者 | Fabrice Bellard |
---|---|
目前版本 |
|
原始碼庫 | |
作業系統 | Windows,Linux,Mac OS X,FreeBSD |
類型 | 模擬器 |
許可協定 | 多種授權 |
網站 | www |
QEMU是一個代管的虛擬機器,它使用動態二進制轉換技術來類比處理器,並且提供多種硬體和外設模型,這使它能夠執行多種未修改的客戶機作業系統,能與KVM配合以接近本地速度執行虛擬機器(接近真實電腦的速度)。
QEMU可以執行使用者級的行程仿真,從而可以使為某一架構編譯的程式在另一架構上執行(通過 VMM 的形式實現)。
系統模組
QEMU有多種模式[2]:
- User mode:又稱作「使用者模式」,在這種模式下,QEMU執行針對不同指令編譯的單個Linux或Darwin/macOS程式。系統呼叫與32/64位元介面適應。在這種模式下,我們可以實現交叉編譯(cross-compilation)與交叉偵錯(cross- debugging)。
- System mode:「系統模式」,在這種模式下,QEMU類比一個完整的電腦系統,包括外圍裝置。它可以用於在一台電腦上提供多台虛擬電腦的虛擬主機。 QEMU可以實現許多客戶機OS的引導,比如x86,MIPS,32-bit 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支援仿真各種體系結構,包括:
- IA-32(x86)個人電腦
- x86-64個人電腦
- Sun的SPARC sun4m
- Sun的SPARC sun4u
- ARM開發板(Integrator / CP和Versatile / PB)
- SH4 SHIX板
- PowerPC(PReP和Power Macintosh)
虛擬機器可以連接多種類型的實體主機硬體,包括硬碟,CD-ROM,網卡,音效卡和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 Multi-Processing)也是可能的。
QEMU不需要管理員權限執行,但在使用了某些提高速度的核心模組(如KQEMU),或者使用某些網路連接模組時,則需要管理員權限。
微型碼產生器
微型碼產生器(TCG)旨在消除依賴特定版本的GCC或編譯器的缺點,並將編譯合併到QEMU的執行時任務中。因此,整個翻譯階段由兩部分組成:目的碼塊(TB)以TCG指令(一種機器無關的中間符號)重寫 ,隨後TCG為宿主機架構執行編譯。可選的最佳化在這兩步之間傳遞。
TCG需要專用的代碼來支援每個體系結構。它還要求重寫目標指令集翻譯過程以利用TCG指令,而不是以前使用的dyngen指令。
加速器
KQEMU是一個Linux核心模組,由Fabrice Bellard撰寫,它明顯加快了在具有相同CPU架構的平台上類比x86或x86-64程式的速度。這可以通過直接在主機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%。 [4]
並列仿真
使用QEMU的虛擬化解決方案能夠並列執行多個虛擬CPU。 對於使用者模式仿真,QEMU將仿真執行緒對映到宿主執行緒。 對於全系統仿真,QEMU能夠為每個虛擬CPU執行一個主機執行緒。 前提是客戶端已經更新到可以支援並列系統仿真,目前可以支援的CPU是ARM和Alpha。否則QEMU將使用單個執行緒以迴圈方式類比執行每個虛擬CPU。
與其他虛擬機器的整合
VirtualBox
VirtualBox,發布於2007年1月,使用了一些QEMU的虛擬硬體裝置,並且有內建的基於QEMUdede動態再編譯器。與KQEMU一樣,VirtualBox通過VMM(虛擬機器管理器)在宿主機上本地執行幾乎所有客戶代碼,並將再編譯僅僅用作回退機制——例如,當客戶代碼以實位址模式執行時。 [5]另外,VirtualBox使用內建的反組譯程式進行了大量的代碼分析和修補,以儘量減少再編譯。除某些功能外,VirtualBox是免費且開源的(在GPL許可下)。
Xen-HVM
Xen是虛擬機器監視器,可以使用Intel VT-x或AMD-V硬體x86虛擬化擴充以及ARM Cortex-A7和Cortex-A15虛擬化擴充在HVM(硬體虛擬機器)模式下執行。 [6]這意味著,面對domU以使用真實的裝置驅動程式進行交談的是一組真實的虛擬硬體,而不是半虛擬化裝置。
QEMU包含幾個組件:CPU仿真器,仿真裝置,通用裝置,機器描述符,使用者介面和除錯器。 QEMU中的仿真器件和通用器件組成了虛擬I/O的器件模型。它們包括PIIX3 IDE,Cirrus Logic或純VGA類比影片,RTL8139或E1000網路仿真以及ACPI支援。Xen提供APIC支援。
Xen-HVM具有基於QEMU專案的裝置仿真功能,可為虛擬機器提供虛擬I/O。硬體通過執行在dom0後端的「QEMU裝置模型」守護行程來類比。與其他QEMU執行模式(動態轉換或KVM)不同,虛擬CPU完全由管理程式管理,管理程式負責在QEMU類比主記憶體對映I/O訪問時停止虛擬CPU。
KVM
KVM(基於核心的虛擬機器)是FreeBSD和Linux的核心模組,它允許使用者空間程式訪問各種處理器的虛擬化硬體特性,這個特點使得QEMU可以為x86,PowerPC和S/390客戶提供虛擬化。當目標體系結構與主機相同時,QEMU可以使用KVM特有的功能,比如加速功能。
Win4Lin Pro Desktop
在2005年初,Win4Lin推出了Win4Lin Pro Desktop,它基於QEMU和KQEMU的已調諧版本,並且代管了Windows的NT版本。 在2006年6月, [7]Win4Lin發布了基於相同代碼庫的Win4Lin虛擬桌面伺服器。 Win4Lin虛擬桌面伺服器為來自Linux伺服器的精簡客戶機提供Microsoft Windows對談服務。
2006年9月,Win4Lin宣布將公司名稱更改為Virtual Bridges,並發布了Win4BSD Pro Desktop,該產品的一個埠用於FreeBSD和PC-BSD。在2007年5月發布了Win4Solaris Pro Desktop和Win4Solaris虛擬桌面伺服器後,提供了Solaris支援。[8]
SerialICE
SerialICE是一款基於QEMU的韌體除錯工具,可在QEMU內部執行系統韌體,同時通過與主機系統的串行連接訪問真實硬體。這可以用作硬體ICE的廉價替代品。
WinUAE
WinUAE Amiga仿真器在3.0.0版本中引入了對使用QEMU PPC核心的CyberStorm PPC和Blizzard 603e開發板的支援。[9]
硬體平台類比
QEMU可類比多種硬體裝置
鍵盤 SCSI控制器(AMD PCscsi和Tekram DC-390控制器中的LSI MegaRAID SAS 1078,LSI53C895A,NCR53C9x) 串行介面 音效卡(Sound Blaster 16,ES1370 PCI,Gravis Ultrasound,AC97和Intel HD Audio) 看門狗定時器(Intel 6300 ESB PCI或iB700 ISA) USB 1.x / 2.x / 3.x控制器(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採用以下元素進行建模仿真:
Zynq-7000 ARM Cortex-A9 CPU Zynq-7000 ARM Cortex-A9 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作業系統。[10]基於QEMU的UTM虛擬機器[11],可支援類比30多個架構,例如x86_64,ARM64,以及RISC-V等[12]。
目前UTM支援在系統版本 iPadOS 13以上、iOS 11以上、macOS Big Sur 以上的裝置上執行。
參見
參考文獻
- ^ [ANNOUNCE] QEMU 9.1.2 Stable released. 2024年11月21日 [2024年11月21日].
- ^ QEMU Internals. qemu.weilnetz.de.[永久失效連結]
- ^ QEMU PRIP 1 - support for MIPS64 Release 6 - PRPL. wiki.prplfoundation.org. [2019-01-20]. (原始內容存檔於2017-04-21).
- ^ Godson-3: A Scalable Multicore RISC Processor with x86 Emulation. IEEE. [2009-04-16].[失效連結]
- ^ VirtualBox Developer FAQ. [2015-02-02]. (原始內容存檔於2015-03-26).
- ^ Xen ARM with Virtualization Extensions. [2019-01-20]. (原始內容存檔於2018-11-16).
- ^ win4lin VDS announcement. [2019-01-20]. (原始內容存檔於2008-02-10).
- ^ Win4Solaris announcement. [2019-01-20]. (原始內容存檔於2007-12-23).
- ^ WinUAE 3.0.0. English Amiga Board. 2014-12-17 [2016-03-25]. (原始內容存檔於2016-04-06).
- ^ UTM. getutm.app. [2021-11-20]. (原始內容存檔於2022-01-13).
- ^ UTM Virtual Machines 2.4.0 Cracked for macOS. Haxmac. 2021-11-02 [2021-12-06]. (原始內容存檔於2021-12-06) (美國英語).
- ^ Documentation/Platforms - QEMU. wiki.qemu.org. [2021-11-20]. (原始內容存檔於2021-11-20).