
_START_ARTICLE_
QEMU
_START_SECTION_
架构
_START_PARAGRAPH_
QEMU的架构由纯软件实现，并在Guest与Host中间，来处理Guest的硬件请求，并由其转译给真正的硬件。_NEWLINE_然而因为QEMU是纯软件实现的，所有的指令都要经过QEMU，使得性能很差，而配合KVM则可以解决这一问题。_NEWLINE_QEMU虚拟化的思路是：提取Guest代码，翻译为TCG中间代码，而后翻译为Host代码。相当于实现了一个“中间人”的角色。
_START_SECTION_
微型代码生成器
_START_PARAGRAPH_
微型代码生成器（TCG）旨在消除依赖特定版本的GCC或编译器的缺点，并将编译合并到QEMU的运行时任务中。因此，整个翻译阶段由两部分组成：目标代码块（TB）以TCG指令（一种机器无关的中间符号）重写，随后TCG为宿主机架构执行编译。可选的优化在这两步之间传递。_NEWLINE_TCG需要专用的代码来支持每个体系结构。它还要求重写目标指令集翻译过程以利用TCG指令，而不是以前使用的dyngen指令。
_START_SECTION_
加速器
_START_PARAGRAPH_
KQEMU是一个Linux内核模块，由Fabrice Bellard撰写，它明显加快了在具有相同CPU架构的平台上模拟x86或x86-64程序的速度。这可以通过直接在主机CPU上运行用户模式代码（以及可选的某些内核代码）以及仅对内核模式和实模式代码使用处理器与外设模拟来实现。即使宿主机CPU不支持硬件辅助虚拟化，KQEMU也可以从多个客户操作系统执行代码。QEMU支持大容量内存，这使得它们与KQEMU不兼容。较新的QEMU版本已完全取消对KQEMU的支持。_NEWLINE_由于缺乏对KQEMU和QVM86的支持，基于内核的虚拟机（KVM）已经基本成为基于Linux的硬件辅助虚拟化解决方案，与QEMU一起使用。_NEWLINE_英特尔的硬件加速执行管理器（HAXM）是KVM在Windows和MacOS上基于x86的硬件辅助虚拟化的开源替代品。2013年，英特尔使用QEMU来进行Android开发。
_START_SECTION_
硬件辅助仿真
_START_PARAGRAPH_
MIPS兼容的龙芯3处理器增加了200条新指令来帮助QEMU翻译x86指令，这些新指令降低了在MIPS流水线中执行x86 / CISC风格指令的开销。由于中国科学院对QEMU进行了进一步改进，龙芯3在9个基准测试中，运行x86二进制文件的同时，执行本机二进制文件的平均性能达到70％。
_START_SECTION_
并行仿真
_START_PARAGRAPH_
使用QEMU的虚拟化解决方案能够并行执行多个虚拟CPU。 对于用户模式仿真，QEMU将仿真线程映射到宿主线程。 对于全系统仿真，QEMU能够为每个虚拟CPU运行一个主机线程。 前提是客户端已经更新到可以支持并行系统仿真，当前可以支持的CPU是ARM和Alpha。否则QEMU将使用单个线程以循环方式模拟执行每个虚拟CPU。
_START_SECTION_
与其他虚拟机的集成
_START_PARAGRAPH_
VirtualBox_NEWLINE_VirtualBox，发布于2007年1月，使用了一些QEMU的虚拟硬件设备，并且有内置的基于QEMUdede动态再编译器。与KQEMU一样，VirtualBox通过VMM（虚拟机管理器）在宿主机上本地运行几乎所有客户代码，并将再编译仅仅用作回退机制——例如，当客户代码以实地址模式执行时。_NEWLINE_另外，VirtualBox使用内置的反汇编程序进行了大量的代码分析和修补，以尽量减少再编译。除某些功能外，VirtualBox是免费且开源的（在GPL许可下）。_NEWLINE_Xen-HVM_NEWLINE_Xen是虚拟机监视器，可以使用Intel VT-x或AMD-V硬件x86虚拟化扩展以及ARM Cortex-A7和Cortex-A15虚拟化扩展在HVM（硬件虚拟机）模式下运行。_NEWLINE_这意味着，面对domU以使用真实的设备驱动程序进行交谈的是一组真实的虚拟硬件，而不是半虚拟化设备。_NEWLINE_QEMU包含几个组件：CPU仿真器，仿真设备，通用设备，机器描述符，用户界面和调试器。 QEMU中的仿真器件和通用器件组成了虚拟I/O的器件模型。它们包括PIIX3 IDE，Cirrus Logic或纯VGA模拟视频，RTL8139或E1000网络仿真以及ACPI支持。Xen提供APIC支持。_NEWLINE_Xen-HVM具有基于QEMU项目的设备仿真功能，可为虚拟机提供虚拟I/O。硬件通过运行在dom0后端的“QEMU设备模型”守护进程来模拟。与其他QEMU运行模式（动态转换或KVM）不同，虚拟CPU完全由管理程序管理，管理程序负责在QEMU模拟内存映射I/O访问时停止虚拟CPU。_NEWLINE_KVM_NEWLINE_KVM（基于内核的虚拟机）是FreeBSD和Linux的内核模块，它允许用户空间程序访问各种处理器的虚拟化硬件特性，这个特点使得QEMU可以为x86，PowerPC和S/390客户提供虚拟化。当目标体系结构与主机相同时，QEMU可以使用KVM特有的功能，比如加速功能。_NEWLINE_Win4Lin Pro Desktop_NEWLINE_在2005年初，Win4Lin推出了Win4Lin Pro Desktop，它基于QEMU和KQEMU的已调谐版本，并且托管了Windows的NT版本。 在2006年6月，_NEWLINE_Win4Lin发布了基于相同代码库的Win4Lin虚拟桌面服务器。 Win4Lin虚拟桌面服务器为来自Linux服务器的精简客户机提供Microsoft Windows会话服务。_NEWLINE_2006年9月，Win4Lin宣布将公司名称更改为Virtual Bridges，并发布了Win4BSD Pro Desktop，该产品的一个端口用于FreeBSD和PC-BSD。在2007年5月发布了Win4Solaris Pro Desktop和Win4Solaris虚拟桌面服务器后，提供了Solaris支持。_NEWLINE_SerialICE_NEWLINE_SerialICE是一款基于QEMU的固件调试工具，可在QEMU内部运行系统固件，同时通过与主机系统的串行连接访问真实硬件。这可以用作硬件ICE的廉价替代品。_NEWLINE_WinUAE_NEWLINE_WinUAE Amiga仿真器在3.0.0版本中引入了对使用QEMU PPC内核的CyberStorm PPC和Blizzard 603e开发板的支持。
_START_SECTION_
硬件平台模拟
_START_PARAGRAPH_
QEMU可模拟多种硬件设备_NEWLINE_键盘 _NEWLINE_SCSI控制器（AMD PCscsi和Tekram DC-390控制器中的LSI MegaRAID SAS 1078，LSI53C895A，NCR53C9x） _NEWLINE_串行接口 _NEWLINE_声卡（Sound Blaster 16，ES1370 PCI，Gravis Ultrasound，AC97和Intel HD Audio） _NEWLINE_看门狗定时器（Intel 6300 ESB PCI或iB700 ISA） _NEWLINE_USB 1.x / 2.x / 3.x控制器（UHCI，EHCI，xHCI） _NEWLINE_USB设备：音频，蓝牙适配器，HID（键盘/鼠标/平板电脑），MTP，串行接口，CAC智能卡读卡器，存储（仅批量传输和USB连接SCSI），Wacom数字板_NEWLINE_arm_NEWLINE_QEMU使用NEON扩展模拟ARMv7指令集。它模拟集成系统/ CP板，多功能底板，RealView仿真底板，基于XScale的PDA，Palm Tungsten | E PDA，诺基亚N800和诺基亚N810互联网平板电脑等完整系统.QEMU还为Android SDK提供支持，该模拟器属于Android SDK 。三星选择了QEMU来帮助开发仿真'Wave'设备。_NEWLINE_基于Xilinx Cortex A9的Zynq SoC采用以下元素进行建模仿真：_NEWLINE_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控制器