QEMU
此條目需要补充更多来源。 (2019年1月20日) |
此條目翻譯品質不佳。 |
開發者 | Fabrice Bellard |
---|---|
当前版本 | 7.0.0(2022年4月19日 | )
预览版本 | 7.0.0-rc4(2022年4月12日 | )
源代码库 | |
操作系统 | Windows,Linux,Mac OS X,FreeBSD |
类型 | 模擬器 |
许可协议 | 多種授權 |
网站 | www |
QEMU(quick emulator)是一款由法布裡斯·貝拉(Fabrice Bellard)等人編寫的通用且免費的可執行硬體虛擬化的(hardware virtualization)開源模擬器(Emulator)。
其與Bochs,PearPC類似,但擁有高速(配合KVM),跨平臺的特性。
QEMU是一個托管的虛擬機,它通過動態的二進制轉換,模擬CPU,並且提供一組設備模型,使它能夠執行多種未修改的客戶端OS,可以通過與KVM一起使用並且接近本地速度運行模擬機(接近真實電腦速度)。
QEMU還可以為user-level的進程執行CPU模擬,進而允許了為一種架構編譯的程式在另外一種架構上面運行(藉由VMM的形式)。
系統模組
QEMU有多種模式
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%。
並行模擬
使用QEMU的虚拟化解决方案能够并行执行多个虚拟CPU。 对于用户模式仿真,QEMU将仿真线程映射到宿主线程。 对于全系统仿真,QEMU能够为每个虚拟CPU运行一个主机线程。 前提是客户端已经更新到可以支持并行系统仿真,目前可以支持的CPU是ARM和Alpha。否则QEMU将使用单个线程以循环方式模拟执行每个虚拟CPU。
与其他虚拟机的集成
VirtualBox
VirtualBox,发布于2007年1月,使用了一些QEMU的虚拟硬件设备,并且有内置的基于QEMUdede动态再编译器。与KQEMU一样,VirtualBox通过VMM(虚拟机管理器)在宿主机上本地运行几乎所有客户代码,并将再编译仅仅用作回退机制——例如,当客户代码以实地址模式执行时。 [2]另外,VirtualBox使用内置的反汇编程序进行了大量的代码分析和修补,以尽量减少再编译。除某些功能外,VirtualBox是免费且开源的(在GPL许可下)。
Xen-HVM
Xen是虚拟机监视器,可以使用Intel VT-x或AMD-V硬件x86虚拟化扩展以及ARM Cortex-A7和Cortex-A15虚拟化扩展在HVM(硬件虚拟机)模式下运行。 [3]这意味着,面对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月, [4]Win4Lin发布了基于相同代码库的Win4Lin虚拟桌面服务器。 Win4Lin虚拟桌面服务器为来自Linux服务器的精简客户机提供Microsoft Windows会话服务。
2006年9月,Win4Lin宣布将公司名称更改为Virtual Bridges,并发布了Win4BSD Pro Desktop,该产品的一个端口用于FreeBSD和PC-BSD。在2007年5月发布了Win4Solaris Pro Desktop和Win4Solaris虚拟桌面服务器后,提供了Solaris支持。[5]
SerialICE
SerialICE是一款基于QEMU的固件调试工具,可在QEMU内部运行系统固件,同时通过与主机系统的串行连接访问真实硬件。这可以用作硬件ICE的廉价替代品。
WinUAE
WinUAE Amiga仿真器在3.0.0版本中引入了对使用QEMU PPC内核的CyberStorm PPC和Blizzard 603e开发板的支持。[6]
硬件平台模拟
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操作系统。[7]基于QEMU的UTM虚拟机[8],可支持模拟30多个架构,例如x86_64,ARM64,以及RISC-V等[9]。
目前UTM支持在系统版本 iPadOS 13以上、iOS 11以上、macOS Big Sur 以上的设备上运行。
参见
參考文獻
- ^ QEMU PRIP 1 - support for MIPS64 Release 6 - PRPL. wiki.prplfoundation.org. [2019-01-20]. (原始内容存档于2017-04-21).
- ^ 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).