
一、QEMU简介
QEMU是法布里斯·贝拉在Linux内核上写的一个CPU模拟器,这套开放源码的模拟器软件与Bochs、PearPC近似,但具有后两者所不具备的高速度及跨平台等特性。QEMU可以在不同的机器上运行独自开发的操作系统与软件,经由KQEMU这个开源的加速器,能模拟至接近真实电脑的速度。QEMU构思巧妙, 效率极高, 在借助核心态的KQEMU加速器之后,模拟代码的执行速度甚至能够接近真实机器。QEMU已成为目前使用最广泛的模拟器,KVM和Google Android的模拟器都是基于QEMU的。
QEMU是一款开源的模拟器及虚拟机监管器(Virtual Machine Monitor, VMM)。QEMU主要提供两种功能给用户使用。一是作为用户态模拟器,利用动态代码翻译机制来执行不同于主机架构的代码。二是作为虚拟机监管器,模拟全系统,利用其他VMM(Xen, KVM, etc)来使用硬件提供的虚拟化支持,创建接近于主机性能的虚拟机。
用户可以通过不同Linux发行版所带有的软件包管理器来安装QEMU。如在Debian系列的发行版上可以使用下面的命令来安装:
1 |
|
或者在红帽系列的发行版上使用如下命令安装:
1 |
|
除此之外,也可以选择从源码安装。
获取QEMU源码
可以从QEMU官网上下载QEMU源码的tar包,以命令行下载2.0版本的QEMU为例:
1 2 |
|
如果需要参与到QEMU的开发中,最好使用Git获取源码:
1 |
|
编译及安装
获取源码后,可以根据需求来配置和编译QEMU。
1 2 3 4 |
|
configure脚本用于生成Makefile,其选项可以用./configure --help查看。这里使用到的选项含义如下:
1 2 3 4 |
|
二、基本原理
QEMU作为系统模拟器时,会模拟出一台能够独立运行操作系统的虚拟机。如下图所示,每个虚拟机对应主机(Host)中的一个QEMU进程,而虚拟机的vCPU对应QEMU进程的一个线程。
QEMU结构图
系统虚拟化最主要是虚拟出CPU、内存及I/O设备。虚拟出的CPU称之为vCPU,QEMU为了提升效率,借用KVM、XEN等虚拟化技术,直接利用硬件对虚拟化的支持,在主机上安全地运行虚拟机代码(需要硬件支持)。虚拟机vCPU调用KVM的接口来执行任务的流程如下(代码源自QEMU开发者Stefan的技术博客):
1 2 3 4 5 6 7 8 9 10 |
|
QEMU发起ioctrl来调用KVM接口,KVM则利用硬件扩展直接将虚拟机代码运行于主机之上,一旦vCPU需要操作设备寄存器,vCPU将会停止并退回到QEMU,QEMU去模拟出操作结果。
虚拟机内存会被映射到QEMU的进程地址空间,在启动时分配。在虚拟机看来,QEMU所分配的主机上的虚拟地址空间为虚拟机的物理地址空间。
QEMU在主机用户态模拟虚拟机的硬件设备,vCPU对硬件的操作结果会在用户态进行模拟,如虚拟机需要将数据写入硬盘,实际结果是将数据写入到了主机中的一个镜像文件中。
python学习网,大量的免费python视频教程,欢迎在线学习!