QEMU

title: 系统模块.
content: QEMU有多种模式
title: 架构.
content: QEMU的架构由纯软件实现,并在Guest与Host中间,来处理Guest的硬件请求,并由其转译给真正的硬件。  然而因为QEMU是纯软件实现的,所有的指令都要经过QEMU,使得性能很差,而配合KVM则可以解决这一问题。  QEMU虚拟化的思路是:提取Guest代码,翻译为TCG中间代码,而后翻译为Host代码。相当于实现了一个“中间人”的角色。
title: 特性.
content: QEMU可以在运行所有程序的情况下保存和恢复虚拟机的状态。客户操作系统(Guest Operating System)不需要修补就可以在QEMU中运行。  QEMU支持仿真各种体系结构,包括:  虚拟机可以连接多种类型的物理主机硬件。这些包括:硬盘,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),或者使用其网络连接模型的某些模式。
title: 微型代码生成器.
content: 微型代码生成器(TCG)旨在消除依赖特定版本的GCC或编译器的缺点,并将编译合并到QEMU的运行时任务中。因此,整个翻译阶段由两部分组成:目标代码块(TB)以TCG指令(一种机器无关的中间符号)重写,随后TCG为宿主机架构执行编译。可选的优化在这两步之间传递。  TCG需要专用的代码来支持每个体系结构。它还要求重写目标指令集翻译过程以利用TCG指令,而不是以前使用的dyngen指令。
title: 加速器.
content: 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开发。
title: 硬件辅助仿真.
content: MIPS兼容的龙芯3处理器增加了200条新指令来帮助QEMU翻译x86指令,这些新指令降低了在MIPS流水线中执行x86 / CISC风格指令的开销。由于中国科学院对QEMU进行了进一步改进,龙芯3在9个基准测试中,运行x86二进制文件的同时,执行本机二进制文件的平均性能达到70%。
title: 并行仿真.
content: 使用QEMU的虚拟化解决方案能够并行执行多个虚拟CPU。 对于用户模式仿真,QEMU将仿真线程映射到宿主线程。 对于全系统仿真,QEMU能够为每个虚拟CPU运行一个主机线程。 前提是客户端已经更新到可以支持并行系统仿真,目前可以支持的CPU是ARM和Alpha。否则QEMU将使用单个线程以循环方式模拟执行每个虚拟CPU。
title: 与其他虚拟机的集成.
content: VirtualBox  VirtualBox,发布于2007年1月,使用了一些QEMU的虚拟硬件设备,并且有内置的基于QEMUdede动态再编译器。与KQEMU一样,VirtualBox通过VMM(虚拟机管理器)在宿主机上本地运行几乎所有客户代码,并将再编译仅仅用作回退机制——例如,当客户代码以实地址模式执行时。 另外,VirtualBox使用内置的反汇编程序进行了大量的代码分析和修补,以尽量减少再编译。除某些功能外,VirtualBox是免费且开源的(在GPL许可下)。  Xen-HVM  Xen是虚拟机监视器,可以使用Intel VT-x或AMD-V硬件x86虚拟化扩展以及ARM Cortex-A7和Cortex-A15虚拟化扩展在HVM(硬件虚拟机)模式下运行。 这意味着,面对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月, Win4Lin发布了基于相同代码库的Win4Lin虚拟桌面服务器。 Win4Lin虚拟桌面服务器为来自Linux服务器的精简客户机提供Microsoft Windows会话服务。  2006年9月,Win4Lin宣布将公司名称更改为Virtual Bridges,并发布了Win4BSD Pro Desktop,该产品的一个端口用于FreeBSD和PC-BSD。在2007年5月发布了Win4Solaris Pro Desktop和Win4Solaris虚拟桌面服务器后,提供了Solaris支持。  SerialICE  SerialICE是一款基于QEMU的固件调试工具,可在QEMU内部运行系统固件,同时通过与主机系统的串行连接访问真实硬件。这可以用作硬件ICE的廉价替代品。  WinUAE  WinUAE Amiga仿真器在3.0.0版本中引入了对使用QEMU PPC内核的CyberStorm PPC和Blizzard 603e开发板的支持。
title: 硬件平台模拟.
content: 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控制器

Summary: QEMU(quick emulator)是一款由法布里斯·贝拉(Fabrice Bellard)等人编写的免费的可执行硬件虚拟化的(hardware virtualization)开源托管虚拟机(VMM)。

QEMU: QEMU est un logiciel libre de machine virtuelle, pouvant émuler un processeur et, plus généralement, une architecture différente si besoin. Il permet d'exécuter un ou plusieurs systèmes d'exploitation via les hyperviseurs KVM et Xen, ou seulement des binaires, dans l'environnement d'un système d'exploitation déjà installé sur la machine.