本頁使用了標題或全文手工轉換

QEMU

維基百科,自由的百科全書
跳至導覽 跳至搜尋
QEMU
Qemu logo.svg
Qemu linux.png
在Linux上使用Qemu執行ReactOS作業系統
開發者 Fabrice Bellard
穩定版本
3.1.0
( 2018年12月11日,​4個月前​(2018-12-11
預覽版本
4.0.0-rc1
( 2019年3月26日,​21天前​(2019-03-26
原始碼庫 編輯維基數據連結
作業系統 WindowsLinuxMac OS XFreeBSD
類型 類比器
許可協定 多種授權
網站 www.qemu-project.org


QEMU(quick emulator)是一款由Fabrice Bellard等人編寫的免費的可執行硬體虛擬化的(hardware virtualization)開源代管虛擬機器(VMM)。

其與BochsPearPC類似,但擁有高速(配合KVM),跨平台的特性。

QEMU是一個代管的虛擬機器鏡像,它通過動態的二進位轉換,類比CPU,並且提供一組裝置模型,使它能夠執行多種未修改的客戶機OS,可以通過與KVM(kernel-based virtual machine開源加速器)一起使用進而接近本地速度執行虛擬機器(接近真實電腦的速度)。

QEMU還可以為user-level的過程執行CPU仿真,進而允許了為一種架構編譯的程式在另外一中架構上面執行(藉由VMM的形式)。


系統模組[編輯]

QEMU有多種模式[1]

  • User mod:又稱作「使用者模式」,在這種模組下,QEMU執行針對不同指令編譯的單個LinuxDarwin/macOS程式。系統呼叫與32/64位元介面適應。在這種模式下,我們可以實現交叉編譯(cross-compilation)與交叉偵錯(cross- debugging)。
  • System mod:「系統模式」,在這種模式下,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)個人電腦
  • ARM開發板(Integrator / CP和Versatile / PB)
  • PowerPC(PReP和Power Macintosh)

虛擬機器可以連接多種類型的物理主機硬體。這些包括:硬碟CD-ROM網卡音效卡USB。可以完全類比USB裝置(從圖檔,輸入裝置進行海量儲存),也可以使用主機的USB裝置(但這需要管理員權限,並且不適用於所有裝置)。


虛擬磁碟映像可以以特殊格式(qcow或qcow2)儲存,只占用虛擬機器作業系統實際使用的磁碟空間。這樣,仿真的120 GB磁碟在主機上可能只占用幾百兆位元組。 QCOW2格式還允許建立覆蓋映像,以記錄與另一個(未修改的)基本映像檔案的區別。這提供了將類比磁碟的內容恢復到較早狀態的可能性。例如,基本映像可以儲存已知工作的作業系統的全新安裝,並使用疊加映像。如果訪客系統變得不可用(病毒攻擊,意外的系統破壞等),用戶可以刪除覆蓋並重建較早的類比磁碟映像版本。

QEMU可以通過網路位址轉換類比共用主機系統連接的網卡(不同型號),從而有效地允許guest虛擬機器使用與主機相同的網路。虛擬網卡還可以連接到其他QEMU實體的網卡或本地TAP介面。通過使用主機OS的橋接功能,將QEMU使用的TUN / TAP介面與主機OS上的非虛擬乙太網路介面橋接,也可以實現網路連接。

QEMU整合了多種服務以允許主機和訪客系統進行通訊;例如,整合的SMB伺服器和網路埠重新導向(以允許傳入連接到虛擬機器)。它也可以在沒有啟動程式的情況下啟動Linux核心。

QEMU不依賴主機系統上的圖形輸出方法。相反,它可以允許通過整合的VNC伺服器存取客戶作業系統的螢幕。它還可以使用類比的串行線,而不使用任何螢幕和適用的作業系統。

可以在多個CPU上執行SMP對稱多處理結構(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%。 [3]

並列仿真[編輯]

使用QEMU的虛擬化解決方案能夠並列執行多個虛擬CPU。 對於用戶模式仿真,QEMU將仿真執行緒對映到宿主執行緒。 對於全系統仿真,QEMU能夠為每個虛擬CPU執行一個主機執行緒。 前提是用戶端已經更新到可以支援並列系統仿真,目前可以支援的CPU是ARMAlpha。否則QEMU將使用單個執行緒以迴圈方式類比執行每個虛擬CPU。

與其他虛擬機器的整合[編輯]

VirtualBox

VirtualBox,發布於2007年1月,使用了一些QEMU的虛擬硬體裝置,並且有內建的基於QEMUdede動態再編譯器。與KQEMU一樣,VirtualBox通過VMM(虛擬機器管理器)在宿主機上本地執行幾乎所有客戶程式碼,並將再編譯僅僅用作回退機制——例如,當客戶程式碼以實位址模式執行時。 [4]另外,VirtualBox使用內建的反組譯程式進行了大量的程式碼分析和修補,以儘量減少再編譯。除某些功能外,VirtualBox是免費且開源的(在GPL許可下)。

Xen-HVM

Xen是虛擬機器監視器,可以使用Intel VT-x或AMD-V硬體x86虛擬化擴充以及ARM Cortex-A7和Cortex-A15虛擬化擴充在HVM(硬體虛擬機器)模式下執行。 [5]這意味著,面對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月, [6]Win4Lin發布了基於相同程式碼庫的Win4Lin虛擬桌面伺服器。 Win4Lin虛擬桌面伺服器為來自Linux伺服器的精簡客戶機提供Microsoft Windows對談服務。

2006年9月,Win4Lin宣布將公司名稱更改為Virtual Bridges,並發布了Win4BSD Pro Desktop,該產品的一個埠用於FreeBSD和PC-BSD。在2007年5月發布了Win4Solaris Pro Desktop和Win4Solaris虛擬桌面伺服器後,提供了Solaris支援。[7]

SerialICE

SerialICE是一款基於QEMU的韌體除錯工具,可在QEMU內部執行系統韌體,同時通過與主機系統的串行連接存取真實硬體。這可以用作硬體ICE的廉價替代品。

WinUAE

WinUAE Amiga仿真器在3.0.0版本中引入了對使用QEMU PPC核心的CyberStorm PPC和Blizzard 603e開發板的支援。[8]

硬體平台類比[編輯]

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控制器


參考文獻[編輯]

  1. ^ QEMU Internals. qemu.weilnetz.de. 
  2. ^ QEMU PRIP 1 - support for MIPS64 Release 6 - PRPL. wiki.prplfoundation.org. 
  3. ^ Godson-3: A Scalable Multicore RISC Processor with x86 Emulation. IEEE. [2009-04-16]. 
  4. ^ VirtualBox Developer FAQ. [2015-02-02]. 
  5. ^ Xen ARM with Virtualization Extensions. 
  6. ^ win4lin VDS announcement 網際網路檔案館存檔,存檔日期February 10, 2008,.
  7. ^ Win4Solaris announcement 網際網路檔案館存檔,存檔日期December 23, 2007,.
  8. ^ WinUAE 3.0.0. English Amiga Board. 2014-12-17 [2016-03-25]. 

外部連結[編輯]