QEMU
此條目需要補充更多來源。 (2019年1月20日) |
此條目翻譯品質不佳。 |
開發者 | Fabrice Bellard |
---|---|
當前版本 |
|
源代碼庫 | |
操作系統 | Windows,Linux,Mac OS X,FreeBSD |
類型 | 模擬器 |
許可協議 | 多種授權 |
網站 | www |
QEMU(Quick Emulator)是一款免費開源模擬器,由法布里斯·貝拉(Fabrice Bellard)等人編寫。其與Bochs,PearPC類似,但擁有高速(配合KVM)、跨平台的特性。
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).