跳转到内容

QEMU:修订间差异

维基百科,自由的百科全书
删除的内容 添加的内容
无编辑摘要
标签移动版编辑 移动版网页编辑 高级移动版编辑
 
(未显示21个用户的46个中间版本)
第1行: 第1行:
{{Refimprove|time=2019-01-20T06:50:07+00:00}}
{{Refimprove|time=2019-01-20T06:50:07+00:00}}
{{Rough translation}}
{{NoteTA|G1=IT}}
{{NoteTA|G1=IT}}
{{Infobox_Software
{{Infobox_Software
|name = QEMU
|name = QEMU
|logo = Qemu_logo.svg
|logo = Qemu_logo.svg
|screenshot = [[File:Qemu linux.png|250px]]
|screenshot = QEMU 6.2 screenshot.png
|screenshot size = 250px
|caption = 在Linux上使用Qemu运行[[ReactOS]]操作系统
|caption = 在Linux上使用Qemu运行[[OpenIndiana]]操作系统
|developer = Fabrice Bellard
|developer = Fabrice Bellard
|latest_release_version = 4.0.0
|latest_release_date = {{Release date and age|2019|04|23}}
|latest_preview_version = 4.0.0-rc4
|latest_preview_date = {{Release date and age|2019|04|17}}
|operating_system = [[Microsoft Windows|Windows]],[[Linux]],[[Mac OS X]],[[FreeBSD]]
|operating_system = [[Microsoft Windows|Windows]],[[Linux]],[[Mac OS X]],[[FreeBSD]]
|genre = [[模擬器]]
|genre = [[模擬器]]
|license = 多種授權
|license = 多種授權
|website = {{URL|http://www.qemu-project.org/}}
}}
}}


'''QEMU'''(Quick Emulator)是一款免费开源模拟器,由[[法布里斯·贝拉]](Fabrice Bellard)等人编写。其与[[Bochs]],[[PearPC]]类似,但拥有高速(配合[[基于内核的虚拟机|KVM]])、跨平台的特性。


QEMU是一个托管的虚拟机,它使用动态二进制转换技术来模拟处理器,并且提供多种硬件和外设模型,使它能够运行多种未修改的客户机操作系统,能与[[基于内核的虚拟机|KVM]]配合以接近本地速度运行虚拟机(接近真实电脑的速度)。
'''QEMU'''(quick emulator)是一款由Fabrice Bellard等人编写的免费的可执行[[硬件虚拟化]]的(hardware virtualization)开源托管[[虚拟机]](VMM)。

其与[[Bochs]],[[PearPC]]类似,但拥有高速(配合[[KVM]]),跨平台的特性。

QEMU是一个托管的虚拟机镜像,它通过动态二进制转换模拟[[CPU]],并且提供一组模型,使它能够运行多种未修改的客户机OS,可以通过与[[KVM]](kernel-based virtual machine开源加速器)一起使用进而接近本地速度运行虚拟机(接近真实电脑的速度)。

QEMU可以为user-level的进程执行CPU仿真,允许了为一架构编译的程序在另架构上运行(藉由VMM的形式)。


QEMU可以执行用户级的进程仿真,可以使一架构编译的程序在另一架构上运行(通过 VMM 的形式实现)。


__TOC__
__TOC__
第31行: 第24行:
== 系统模块 ==
== 系统模块 ==


QEMU有多种模式<ref>{{cite web|url=https://qemu.weilnetz.de/doc/qemu-tech.html|title=QEMU Internals|website=qemu.weilnetz.de}}</ref>
QEMU有多种模式<ref>{{cite web|url=https://qemu.weilnetz.de/doc/qemu-tech.html|title=QEMU Internals|website=qemu.weilnetz.de}}{{Dead link|date=2019年10月 |bot=InternetArchiveBot |fix-attempted=yes }}</ref>

*User mod:又称作“使用者模式”,在这种模下,QEMU运行针对不同指令编译的单个[[Linux]]或[[Darwin]]/[[macOS]]程序。系统调用与32/64位接口适应。在这种模式下,我们可以实现交叉编译(cross-compilation)与交叉偵错(cross- debugging)。

*System mod:“系统模式”,在这种模式下,QEMU模拟一个完整的计算机系统,包括外围设备。它可以用于在一台计算机上提供多台虚拟计算机的虚拟主机。 QEMU可以实现许多客户机OS的引导,比如x86,MIPS,32-bit ARMv7,PowerPC等等。


*User mode:又称作“使用者模式”,在这种模下,QEMU运行针对不同指令编译的单个[[Linux]]或[[Darwin_(操作系统)|Darwin]]/[[macOS]]程序。系统调用与32/64位接口适应。在这种模式下,我们可以实现交叉编译(cross-compilation)与交叉偵错(cross- debugging)。
*System mode:“系统模式”,在这种模式下,QEMU模拟一个完整的计算机系统,包括外围设备。它可以用于在一台计算机上提供多台虚拟计算机的虚拟主机。 QEMU可以实现许多客户机OS的引导,比如x86,MIPS,32-bit ARMv7,PowerPC等等。
*KVM Hosting:QEMU在这时处理KVM镜像的设置与迁移,并参加硬件的仿真,但是客户端的执行则由KVM完成。
*KVM Hosting:QEMU在这时处理KVM镜像的设置与迁移,并参加硬件的仿真,但是客户端的执行则由KVM完成。

*Xen Hosting:在这种托管下,客户端的执行几乎完全在[[Xen]]中完成,并且对QEMU屏蔽。QEMU只提供硬件仿真的支持。
*Xen Hosting:在这种托管下,客户端的执行几乎完全在[[Xen]]中完成,并且对QEMU屏蔽。QEMU只提供硬件仿真的支持。


第59行: 第49行:
*[[x86-64]]个人电脑
*[[x86-64]]个人电脑


*[[MIPS64]] Release 6<ref>{{cite web|url=http://wiki.prplfoundation.org/wiki/QEMU_PRIP_1_-_support_for_MIPS64_Release_6|title=QEMU PRIP 1 - support for MIPS64 Release 6 - PRPL|website=wiki.prplfoundation.org}}</ref>和更早的版本
*[[MIPS架構|MIPS64]] Release 6<ref>{{cite web|url=http://wiki.prplfoundation.org/wiki/QEMU_PRIP_1_-_support_for_MIPS64_Release_6|title=QEMU PRIP 1 - support for MIPS64 Release 6 - PRPL|website=wiki.prplfoundation.org|access-date=2019-01-20|archive-url=https://web.archive.org/web/20170421171437/http://wiki.prplfoundation.org/wiki/QEMU_PRIP_1_-_support_for_MIPS64_Release_6|archive-date=2017-04-21|dead-url=yes}}</ref>和更早的版本


*Sun的SPARC [[sun4m]]
*Sun的SPARC [[sun4m]]
第76行: 第66行:


*[[RISC-V]]
*[[RISC-V]]
*[[LoongArch]]


[[虚拟机]]可以连接多种类型的物理件。这些包括[[硬盘]],[[CD-ROM]],[[网卡]],[[声卡|音效卡]]和[[USB]]。可以完全模拟USB设备(从图像文件输入设备进行海量存储),也可以使用主机的USB设备(但这需要管理员权限,不适用于所有设备)。
[[虚拟机]]可以连接多种类型的實體體,包括[[硬盘]],[[CD-ROM]],[[网卡]],[[声卡|音效卡]]和[[USB]]設備USB设备可以完全模擬的,也可以使用主机的USB设备(但这需要管理员权限,並非所有设备皆適用)。


'''虚拟磁盘映像'''可以以特殊格式(qcow或qcow2)存,只占用虚拟机操作系统实际使用的磁盘空间。这样,仿真的120 GB磁盘在主机上可能占用兆字节 QCOW2格式还允许创建覆盖映像,以记录与另一个(未修改的)基本映像文件的区别。这提供了将模拟磁盘的内容恢复到较早状态的可能性。例如,基本映像可以保存已知的操作系统的全新安使用叠加映像。如果访客系统变得不可用(病毒攻击,意外的系统破坏等),用可以删除覆盖并重建较早的模拟磁盘映像版本。
'''虚拟磁盘映像'''可以以特殊格式(qcow或qcow2)存,只占用虚拟机操作系统实际使用的磁盘空间。此時模擬的120 GB硬碟可能占用主機硬碟幾MB的空間。QCOW2格式还允许创建覆盖映像,以记录与另一个(未修改的)基本映像文件的区别。如此便可能将模拟磁盘的内容恢复到较早状态。例如,基本映像文件可以保存已知可順利運作的全新安裝系統但操作時使用覆蓋映像。萬一访客系统故障如因病毒攻击,意外的系统破坏等),使可以删除覆盖映像,使用较早的模拟磁盘映像版本就行了

<!--QEMU can emulate network cards (of different models) which share the host system's connectivity by doing network address translation, effectively allowing the guest to use the same network as the host. The virtual network cards can also connect to network cards of other instances of QEMU or to local TAP interfaces. Network connectivity can also be achieved by bridging a TUN/TAP interface used by QEMU with a non-virtual Ethernet interface on the host OS using the host OS's bridging features.-->


QEMU可以通过网络地址转换模拟共享主机系统连接的网卡(不同型号),从而有效地允许'''guest虚拟机'''使用与'''主机'''相同的网络。虚拟网卡还可以连接到其他QEMU实例的网卡或本地TAP接口。通过使用主机OS的桥接功能,将QEMU使用的TUN / TAP接口与主机OS上的非虚拟以太网接口桥接,也可以实现网络连接。
QEMU可以通过网络地址转换模拟共享主机系统连接的网卡(不同型号),从而有效地允许'''guest虚拟机'''使用与'''主机'''相同的网络。虚拟网卡还可以连接到其他QEMU实例的网卡或本地TAP接口。通过使用主机OS的桥接功能,将QEMU使用的TUN / TAP接口与主机OS上的非虚拟以太网接口桥接,也可以实现网络连接。
<!--
QEMU integrates several services to allow the host and guest systems to communicate; for example, an integrated SMB server and network-port redirection (to allow incoming connections to the virtual machine). It can also boot Linux kernels without a bootloader.-->


QEMU集成了多种服务以允许主机和访客系统进行通信;例如,集成的SMB服务器和网络端口重定向(以允许传入连接到虚拟机)。它也可以在没有引导程序的情况下引导Linux内核。
QEMU集成了多种服务以允许主机和访客系统进行通信;例如,集成的SMB服务器和网络端口重定向(以允许传入连接到虚拟机)。它也可以在没有引导程序的情况下引导Linux内核。
<!--
QEMU does not depend on the presence of graphical output methods on the host system. Instead, it can allow one to access the screen of the guest OS via an integrated VNC server. It can also use an emulated serial line, without any screen, with applicable operating systems.-->


QEMU不依赖主机系统上的图形输出方法。相反,它可以允许通过集成的VNC服务器访问客户操作系统的屏幕。它还可以使用模拟的串行线,而不使用任何屏幕和适用的操作系统。
QEMU不依赖主机系统上的图形输出方法。相反,它可以允许通过集成的VNC服务器访问客户操作系统的屏幕。它还可以使用模拟的串行线,而不使用任何屏幕和适用的操作系统。


可以在CPU上运SMP[[對稱多處理機|对称多处理结构]](Symmetrical Multi-Processing)
模擬CPU行對稱多處理(Symmetrical Multi-Processing)也是可能的。


QEMU不需要管理权限运行,除非使用了额外的提高速度的内核模(如KQEMU),或者使用其网络连接模型的某些模
QEMU不需要管理权限运行,但在使用了某些提高速度的内核模(如KQEMU),或者使用某些網路連接組時,則需要管理員權限


=== 微型代码生成器 ===
=== 微型代码生成器 ===
第101行: 第97行:


KQEMU是一个Linux内核模块,由Fabrice Bellard撰写,它明显加快了在具有相同CPU架构的平台上模拟x86或x86-64程序的速度。这可以通过直接在主机CPU上运行用户模式代码(以及可选的某些内核代码)以及仅对内核模式和实模式代码使用处理器与外设模拟来实现。即使宿主机CPU不支持硬件辅助虚拟化,KQEMU也可以从多个客户操作系统执行代码。QEMU支持大容量内存,这使得它们与KQEMU不兼容。较新的QEMU版本已完全取消对KQEMU的支持。
KQEMU是一个Linux内核模块,由Fabrice Bellard撰写,它明显加快了在具有相同CPU架构的平台上模拟x86或x86-64程序的速度。这可以通过直接在主机CPU上运行用户模式代码(以及可选的某些内核代码)以及仅对内核模式和实模式代码使用处理器与外设模拟来实现。即使宿主机CPU不支持硬件辅助虚拟化,KQEMU也可以从多个客户操作系统执行代码。QEMU支持大容量内存,这使得它们与KQEMU不兼容。较新的QEMU版本已完全取消对KQEMU的支持。

由于缺乏对KQEMU和QVM86的支持,基于内核的虚拟机(KVM)已经基本成为基于Linux的硬件辅助虚拟化解决方案,与QEMU一起使用。
由于缺乏对KQEMU和QVM86的支持,基于内核的虚拟机(KVM)已经基本成为基于Linux的硬件辅助虚拟化解决方案,与QEMU一起使用。

英特尔的硬件加速执行管理器(HAXM)是KVM在Windows和MacOS上基于x86的硬件辅助虚拟化的开源替代品。2013年,英特尔使用QEMU来进行Android开发。
英特尔的硬件加速执行管理器(HAXM)是KVM在Windows和MacOS上基于x86的硬件辅助虚拟化的开源替代品。2013年,英特尔使用QEMU来进行Android开发。


== 硬件辅助仿真 ==
== 硬件辅助仿真 ==


[[MIPS]]兼容的[[龙芯]]3处理器增加了200条新指令来帮助QEMU翻译x86指令,这些新指令降低了在MIPS流水线中执行x86 / CISC风格指令的开销。由于[[中国科学院]]对QEMU进行了进一步改进,龙芯3在9个基准测试中,运行x86二进制文件的同时,执行本机二进制文件的平均性能达到70%。 <ref>{{cite web |url=http://doi.ieeecomputersociety.org/10.1109/MM.2009.30 |title=Godson-3: A Scalable Multicore RISC Processor with x86 Emulation |publisher=[[IEEE]] |accessdate=2009-04-16 }}</ref>
[[MIPS架構|MIPS]]兼容的[[龙芯]]3处理器增加了200条新指令来帮助QEMU翻译x86指令,这些新指令降低了在MIPS流水线中执行x86 / CISC风格指令的开销。由于[[中国科学院]]对QEMU进行了进一步改进,龙芯3在9个基准测试中,运行x86二进制文件的同时,执行本机二进制文件的平均性能达到70%。 <ref>{{cite web |url=http://doi.ieeecomputersociety.org/10.1109/MM.2009.30 |title=Godson-3: A Scalable Multicore RISC Processor with x86 Emulation |publisher=[[IEEE]] |accessdate=2009-04-16 }}{{Dead link}}</ref>


== 并行仿真 ==
== 并行仿真 ==


使用QEMU的虚拟化解决方案能够并行执行多个虚拟CPU。 对于用户模式仿真,QEMU将仿真线程映射到宿主线程。 对于全系统仿真,QEMU能够为每个虚拟CPU运行一个主机线程。 前提是客户端已经更新到可以支持并行系统仿真,目前可以支持的CPU是[[ARM]]和[[Alpha]]。否则QEMU将使用单个线程以循环方式模拟执行每个虚拟CPU。
使用QEMU的虚拟化解决方案能够并行执行多个虚拟CPU。 对于用户模式仿真,QEMU将仿真线程映射到宿主线程。 对于全系统仿真,QEMU能够为每个虚拟CPU运行一个主机线程。 前提是客户端已经更新到可以支持并行系统仿真,目前可以支持的CPU是[[ARM]]和[[DEC Alpha|Alpha]]。否则QEMU将使用单个线程以循环方式模拟执行每个虚拟CPU。


== 与其他虚拟机的集成 ==
== 与其他虚拟机的集成 ==
第119行: 第115行:


[[VirtualBox]],发布于2007年1月,使用了一些QEMU的虚拟硬件设备,并且有内置的基于QEMUdede动态再编译器。与KQEMU一样,VirtualBox通过VMM(虚拟机管理器)在宿主机上本地运行几乎所有客户代码,并将再编译仅仅用作回退机制——例如,当客户代码以实地址模式执行时。
[[VirtualBox]],发布于2007年1月,使用了一些QEMU的虚拟硬件设备,并且有内置的基于QEMUdede动态再编译器。与KQEMU一样,VirtualBox通过VMM(虚拟机管理器)在宿主机上本地运行几乎所有客户代码,并将再编译仅仅用作回退机制——例如,当客户代码以实地址模式执行时。
<ref>
<ref>{{cite web
{{cite web
|url= http://virtualbox.org/wiki/Developer_FAQ
|url= http://virtualbox.org/wiki/Developer_FAQ
|title= VirtualBox Developer FAQ
|title= VirtualBox Developer FAQ
|accessdate= 2015-02-02
|accessdate= 2015-02-02
|archive-date= 2015-03-26
}}
|archive-url= https://web.archive.org/web/20150326132558/https://www.virtualbox.org/wiki/Developer_FAQ
</ref>另外,VirtualBox使用内置的反汇编程序进行了大量的代码分析和修补,以尽量减少再编译。除某些功能外,VirtualBox是免费且开源的(在GPL许可下)。
|dead-url= no
}}</ref>另外,VirtualBox使用内置的反汇编程序进行了大量的代码分析和修补,以尽量减少再编译。除某些功能外,VirtualBox是免费且开源的(在GPL许可下)。


'''Xen-HVM'''
'''Xen-HVM'''


[[Xen]]是虚拟机监视器,可以使用Intel VT-x或AMD-V硬件x86虚拟化扩展以及ARM Cortex-A7和Cortex-A15虚拟化扩展在HVM(硬件虚拟机)模式下运行。
[[Xen]]是虚拟机监视器,可以使用Intel VT-x或AMD-V硬件x86虚拟化扩展以及ARM Cortex-A7和Cortex-A15虚拟化扩展在HVM(硬件虚拟机)模式下运行。
<ref>{{cite web |url=http://wiki.xenproject.org/wiki/Xen_ARM_with_Virtualization_Extensions |title=Xen ARM with Virtualization Extensions }}</ref>这意味着,面对domU以使用真实的设备驱动程序进行交谈的是一组真实的虚拟硬件,而不是半虚拟化设备。
<ref>{{cite web |url=http://wiki.xenproject.org/wiki/Xen_ARM_with_Virtualization_Extensions |title=Xen ARM with Virtualization Extensions |accessdate=2019-01-20 |archive-date=2018-11-16 |archive-url=https://web.archive.org/web/20181116094209/https://wiki.xenproject.org/wiki/Xen_ARM_with_Virtualization_Extensions |dead-url=no }}</ref>这意味着,面对domU以使用真实的设备驱动程序进行交谈的是一组真实的虚拟硬件,而不是半虚拟化设备。


QEMU包含几个组件:CPU仿真器,仿真设备,通用设备,机器描述符,用户界面和调试器。 QEMU中的仿真器件和通用器件组成了虚拟I/O的器件模型。它们包括PIIX3 IDE,Cirrus Logic或纯VGA模拟视频,RTL8139或E1000网络仿真以及ACPI支持。Xen提供APIC支持。
QEMU包含几个组件:CPU仿真器,仿真设备,通用设备,机器描述符,用户界面和调试器。 QEMU中的仿真器件和通用器件组成了虚拟I/O的器件模型。它们包括PIIX3 IDE,Cirrus Logic或纯VGA模拟视频,RTL8139或E1000网络仿真以及ACPI支持。Xen提供APIC支持。
第138行: 第135行:
'''KVM'''
'''KVM'''


[[KVM]](基于内核的虚拟机)是FreeBSD和Linux的内核模块,它允许用户空间程序访问各种处理器的虚拟化硬件特性,这个特点使得QEMU可以为x86,PowerPC和S/390客户提供虚拟化。当目标体系结构与主机相同时,QEMU可以使用KVM特有的功能,比如加速功能。
[[基于内核的虚拟机|KVM]](基于内核的虚拟机)是FreeBSD和Linux的内核模块,它允许用户空间程序访问各种处理器的虚拟化硬件特性,这个特点使得QEMU可以为x86,PowerPC和S/390客户提供虚拟化。当目标体系结构与主机相同时,QEMU可以使用KVM特有的功能,比如加速功能。


'''Win4Lin Pro Desktop'''
'''Win4Lin Pro Desktop'''


在2005年初,[[Win4Lin]]推出了Win4Lin Pro Desktop,它基于QEMU和KQEMU的已调谐版本,并且托管了Windows的NT版本。 在2006年6月,
在2005年初,[[Win4Lin]]推出了Win4Lin Pro Desktop,它基于QEMU和KQEMU的已调谐版本,并且托管了Windows的NT版本。 在2006年6月,
<ref>[http://weblog.infoworld.com/virtualization/archives/2006/06/win4lin_announc.html win4lin VDS announcement] {{webarchive |url=https://web.archive.org/web/20080210042356/http://weblog.infoworld.com/virtualization/archives/2006/06/win4lin_announc.html |date=February 10, 2008 }}</ref>Win4Lin发布了基于相同代码库的Win4Lin虚拟桌面服务器。 Win4Lin虚拟桌面服务器为来自Linux服务器的精简客户机提供Microsoft Windows会话服务。
<ref>{{Cite web |url=http://weblog.infoworld.com/virtualization/archives/2006/06/win4lin_announc.html |title=win4lin VDS announcement |accessdate=2019-01-20 |archive-date=2008-02-10 |archive-url=https://web.archive.org/web/20080210042356/http://weblog.infoworld.com/virtualization/archives/2006/06/win4lin_announc.html |dead-url=no }}</ref>Win4Lin发布了基于相同代码库的Win4Lin虚拟桌面服务器。 Win4Lin虚拟桌面服务器为来自Linux服务器的精简客户机提供Microsoft Windows会话服务。


2006年9月,Win4Lin宣布将公司名称更改为Virtual Bridges,并发布了Win4BSD Pro Desktop,该产品的一个端口用于FreeBSD和PC-BSD。在2007年5月发布了Win4Solaris Pro Desktop和Win4Solaris虚拟桌面服务器后,提供了Solaris支持。<ref>[http://win4solaris.com/jml/index.php?option=com_content&task=view&id=17&Itemid=1 Win4Solaris announcement] {{webarchive |url=https://web.archive.org/web/20071223221725/http://win4solaris.com/jml/index.php?option=com_content&task=view&id=17&Itemid=1 |date=December 23, 2007 }}</ref>
2006年9月,Win4Lin宣布将公司名称更改为Virtual Bridges,并发布了Win4BSD Pro Desktop,该产品的一个端口用于FreeBSD和PC-BSD。在2007年5月发布了Win4Solaris Pro Desktop和Win4Solaris虚拟桌面服务器后,提供了Solaris支持。<ref>{{Cite web |url=http://win4solaris.com/jml/index.php?option=com_content&task=view&id=17&Itemid=1 |title=Win4Solaris announcement |accessdate=2019-01-20 |archive-date=2007-12-23 |archive-url=https://web.archive.org/web/20071223221725/http://win4solaris.com/jml/index.php?option=com_content&task=view&id=17&Itemid=1 |dead-url=no }}</ref>


'''SerialICE'''
'''SerialICE'''
第153行: 第150行:
'''WinUAE'''
'''WinUAE'''


WinUAE Amiga仿真器在3.0.0版本中引入了对使用QEMU PPC内核的CyberStorm PPC和Blizzard 603e开发板的支持。<ref>{{cite web |url=http://eab.abime.net/showpost.php?p=992271&postcount=1|title=WinUAE 3.0.0|publisher=English Amiga Board|date=2014-12-17|accessdate=2016-03-25}}</ref>
WinUAE Amiga仿真器在3.0.0版本中引入了对使用QEMU PPC内核的CyberStorm PPC和Blizzard 603e开发板的支持。<ref>{{cite web|url=http://eab.abime.net/showpost.php?p=992271&postcount=1|title=WinUAE 3.0.0|publisher=English Amiga Board|date=2014-12-17|accessdate=2016-03-25|archive-date=2016-04-06|archive-url=https://web.archive.org/web/20160406141904/http://eab.abime.net/showpost.php?p=992271&postcount=1|dead-url=no}}</ref>


== 硬件平台模拟 ==
== 硬件平台模拟 ==
第174行: 第171行:
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控制器
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控制器


== 派生版本 ==


[[File:UTM-ipados.jpg|缩略图|256x256像素|UTM 2.0在iPadOS 14上的屏幕截图]]
== 參考文獻 ==
UTM虚拟机(UTM Virtual Machine)是一款基于QEMU的虚拟机,支持[[iOS]]、[[iPadOS]]、[[macOS]]操作系统。<ref>{{Cite web|title=UTM|url=https://getutm.app/|access-date=2021-11-20|work=getutm.app|archive-date=2022-01-13|archive-url=https://web.archive.org/web/20220113235838/http://getutm.app/|dead-url=no}}</ref>基于QEMU的UTM虚拟机<ref>{{Cite web|title=UTM Virtual Machines 2.4.0 Cracked for macOS|url=https://haxmac.cc/utm-virtual-machines/|access-date=2021-12-06|date=2021-11-02|work=Haxmac|language=en-US|archive-date=2021-12-06|archive-url=https://web.archive.org/web/20211206192116/https://haxmac.cc/utm-virtual-machines/|dead-url=no}}</ref>,可支持模拟30多个架构,例如[[x86_64]],[[ARM64]],以及[[RISC-V]]等<ref>{{Cite web|title=Documentation/Platforms - QEMU|url=https://wiki.qemu.org/Documentation/Platforms|access-date=2021-11-20|work=wiki.qemu.org|archive-date=2021-11-20|archive-url=https://web.archive.org/web/20211120160900/https://wiki.qemu.org/Documentation/Platforms|dead-url=no}}</ref>。

目前UTM支持在系统版本 [[iPadOS 13]]以上、[[iOS 11]]以上、[[macOS Big Sur]] 以上的设备上运行。

== 参见 ==
{{Portal|自由软件}}
{{Portal|自由软件}}
* [[系统虚拟机比较]]
* [[系统虚拟机比较]]
* [[VirtualBox]]
* [[VirtualBox]]

{{Reflist|30em}}
== 參考文獻 ==
{{Reflist}}


== 外部連結 ==
== 外部連結 ==
*[http://wiki.qemu.org/Index.html QEMU的主頁]
*[http://wiki.qemu.org/Index.html QEMU的主頁]{{Wayback|url=http://wiki.qemu.org/Index.html |date=20100528112917 }}
*[http://lassauge.free.fr/qemu/ QEMU on Windows] - 已编译的二进制可执行文件
*[http://lassauge.free.fr/qemu/ QEMU on Windows]{{Wayback|url=http://lassauge.free.fr/qemu/ |date=20110408201136 }} - 已编译的二进制可执行文件
*[https://web.archive.org/web/20111121143700/http://qemu-forum.ipi.fi/viewtopic.php?f=5&p=16200 qemu-0.12.4 Binaries (x86 & x64)] - 同上
*[https://web.archive.org/web/20111121143700/http://qemu-forum.ipi.fi/viewtopic.php?f=5&p=16200 qemu-0.12.4 Binaries (x86 & x64)] - 同上
*[http://www.claunia.com/qemu/drivers/index.html Drivers for QEMU devices] - [[驱动程序]]<!-- 谁能继续补充 -->
*[http://www.claunia.com/qemu/drivers/index.html Drivers for QEMU devices]{{Wayback|url=http://www.claunia.com/qemu/drivers/index.html |date=20100405081344 }} - [[驱动程序]]<!-- 谁能继续补充 -->
*[https://web.archive.org/web/20130211102503/http://www.davereyn.co.uk/ Qemu Manager] - 初学者易用<!-- 其实命令行也易用,就是配置多个虚拟机比较麻烦,而这个又是旧的,唉 -->
*[https://web.archive.org/web/20130211102503/http://www.davereyn.co.uk/ Qemu Manager] - 初学者易用<!-- 其实命令行也易用,就是配置多个虚拟机比较麻烦,而这个又是旧的,唉 -->
*[http://amanda_hoic.mysinablog.com/index.php?op=ViewArticle&articleId=1343462 用Eee PC 901同時運行四個OS!(Windows XP、Linux加集體回憶DOS / Windows 3.x及Windows 95)]
*[https://web.archive.org/web/20090217165739/http://amanda_hoic.mysinablog.com/index.php?op=ViewArticle&articleId=1343462 用Eee PC 901同時運行四個OS!(Windows XP、Linux加集體回憶DOS / Windows 3.x及Windows 95)]
*[https://web.archive.org/web/20100723025510/http://superstanwu.blog.ithome.com.tw/post/775/76131 實作QEMU虛擬機PXE網路開機]
*[https://web.archive.org/web/20100723025510/http://superstanwu.blog.ithome.com.tw/post/775/76131 實作QEMU虛擬機PXE網路開機]


[[Category:虛擬軟體]]
[[Category:自由虚拟软件]]
[[Category:自由跨平台軟體]]
[[Category:自由跨平台軟體]]

2024年9月1日 (日) 17:53的最新版本

QEMU
在Linux上使用Qemu运行OpenIndiana操作系统
在Linux上使用Qemu运行OpenIndiana操作系统
開發者Fabrice Bellard
当前版本
  • 9.1.2(2024年11月21日;穩定版本)[1]
編輯維基數據鏈接
源代码库 編輯維基數據鏈接
操作系统WindowsLinuxMac OS XFreeBSD
类型模擬器
许可协议多種授權
网站www.qemu.org/ 编辑维基数据

QEMU(Quick Emulator)是一款免费开源模拟器,由法布里斯·贝拉(Fabrice Bellard)等人编写。其与BochsPearPC类似,但拥有高速(配合KVM)、跨平台的特性。

QEMU是一个托管的虚拟机,它使用动态二进制转换技术来模拟处理器,并且提供多种硬件和外设模型,这使它能够运行多种未修改的客户机操作系统,能与KVM配合以接近本地速度运行虚拟机(接近真实电脑的速度)。

QEMU可以执行用户级的进程仿真,从而可以使为某一架构编译的程序在另一架构上运行(通过 VMM 的形式实现)。

系统模块

[编辑]

QEMU有多种模式[2]

  • User mode:又称作“使用者模式”,在这种模式下,QEMU运行针对不同指令编译的单个LinuxDarwin/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)个人电脑
  • ARM开发板(Integrator / CP和Versatile / PB)
  • 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是ARMAlpha。否则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 2.0在iPadOS 14上的屏幕截图

UTM虚拟机(UTM Virtual Machine)是一款基于QEMU的虚拟机,支持iOSiPadOSmacOS操作系统。[10]基于QEMU的UTM虚拟机[11],可支持模拟30多个架构,例如x86_64ARM64,以及RISC-V[12]

目前UTM支持在系统版本 iPadOS 13以上、iOS 11以上、macOS Big Sur 以上的设备上运行。

参见

[编辑]

參考文獻

[编辑]
  1. ^ [ANNOUNCE] QEMU 9.1.2 Stable released. 2024年11月21日 [2024年11月21日]. 
  2. ^ QEMU Internals. qemu.weilnetz.de. [永久失效連結]
  3. ^ QEMU PRIP 1 - support for MIPS64 Release 6 - PRPL. wiki.prplfoundation.org. [2019-01-20]. (原始内容存档于2017-04-21). 
  4. ^ Godson-3: A Scalable Multicore RISC Processor with x86 Emulation. IEEE. [2009-04-16]. [失效連結]
  5. ^ VirtualBox Developer FAQ. [2015-02-02]. (原始内容存档于2015-03-26). 
  6. ^ Xen ARM with Virtualization Extensions. [2019-01-20]. (原始内容存档于2018-11-16). 
  7. ^ win4lin VDS announcement. [2019-01-20]. (原始内容存档于2008-02-10). 
  8. ^ Win4Solaris announcement. [2019-01-20]. (原始内容存档于2007-12-23). 
  9. ^ WinUAE 3.0.0. English Amiga Board. 2014-12-17 [2016-03-25]. (原始内容存档于2016-04-06). 
  10. ^ UTM. getutm.app. [2021-11-20]. (原始内容存档于2022-01-13). 
  11. ^ UTM Virtual Machines 2.4.0 Cracked for macOS. Haxmac. 2021-11-02 [2021-12-06]. (原始内容存档于2021-12-06) (美国英语). 
  12. ^ Documentation/Platforms - QEMU. wiki.qemu.org. [2021-11-20]. (原始内容存档于2021-11-20). 

外部連結

[编辑]