qemu是用python写的吗

一、QEMU简介
QEMU是法布里斯·贝拉在Linux内核上写的CPU模拟器。这个开源模拟器软件和Bochs、PearPC相似,但具有后两者所不具备的高速和跨平台特性。QEMU可以在不同的机器上运行独立开发的操作系统和软件,通过开源加速器KQEMU可以模拟到接近真实计算机的速度。QEMU构思巧妙, 效率极高, 在核心态KQEMU加速器的帮助下,模拟代码的执行速度甚至可以接近真实机器。QEMU已成为目前使用最广泛的模拟器,KVM和Google 基于QEMU的Android模拟器。
QEMU是一种开源模拟器和虚拟机监管器(Virtual Machine Monitor, VMM)。QEMU主要为用户提供两个功能。首先,作为一个用户模拟器,动态代码翻译机制用于执行不同于主机架构的代码。第二,作为虚拟机监管器,模拟整个系统,使用其他VMM(Xen, KVM, etc)利用硬件提供的虚拟化支持,创建接近主机性能的虚拟机。
用户可以通过不同Linux发行版本的软件包管理器安装QEMU。例如,以下命令可以安装在Debian系列的发行版本中:
sudoapt-getinstallqemu
或在红帽系列发行版上使用以下命令:
sudoyuminstallqemu-y
此外,还可以选择从源码安装。
获取QEMU源码
QEMU源码的tar包可以从QEMU官网下载,以命令行下载2.0版QEMU为例:
$wgethttp://wiki.qemu-project.org/download/qemu-2.0.0.tar.bz2 $tarxjvfqemu-2.0.0.tar.bz2
若需要参与QEMU的开发,最好使用Git获取源代码:
$gitclonegit://git.qemu-project.org/qemu.git
编译及安装
获取源代码后,可根据需要配置和编译QEMU。
$cdqemu-2.0.0///如果使用git下载的源代码,执行cdqemu $./configure--enable-kvm--enable-debug--enable-vnc--enable-werror--target-list="x86_64-softmmu" $make-j8 $sudomakeinstall
用于生成Makefile的configure脚本,其选项可以使用./configure --help查看。此处使用的选项含义如下:
--enable-kvm:使用KVM访问硬件提供的虚拟化服务,编译KVM模块。 --enable-vnc:启用VNC。 --enalbe-werror:在编译过程中,将所有警告视为错误。 --target-list:选择目标机器的架构。默认情况下,所有的架构都是编译的,但为了更快地完成编译,可以指定所需的架构。
二、基本原理
当QEMU作为系统模拟器时,它会模拟一个可以独立操作系统的虚拟机。如下图所示,每台虚拟机对应主机(Host)QEMU进程之一,虚拟机的VCPU对应QEMU进程的线程。

QEMU结构图
虚拟化系统最重要的是虚拟化CPU、内存和I/O设备。虚拟CPU称为VCPU,QEMU借用KVMM提高效率、XEN等虚拟化技术直接利用硬件支持虚拟化,在主机上安全运行虚拟机代码(需要硬件支持)。虚拟机VCPU调用KVM接口执行任务的过程如下(代码来自QEMU开发者Stefan的技术博客):
open("/dev/kvm")
ioctl(KVM_CREATE_VM)
ioctl(KVM_CREATE_VCPU)
for(;;){
ioctl(KVM_RUN)
switch(exit_reason){
caseKVM_EXIT_IO:/*...*/
caseKVM_EXIT_HLT:/*...*/
}
}QEMU启动ioctrl调用KVM接口,KVM利用硬件扩展直接在主机上运行虚拟机代码。一旦VCPU需要操作设备寄存器,VCPU将停止并返回QEMU,QEMU将模拟操作结果。
虚拟机内存将在启动时映射到QEMU的过程地址空间。在虚拟机看来,QEMU分配的主机上的虚拟地址空间是虚拟机的物理地址空间。
QEMU在主机用户模拟虚拟机的硬件设备中,VCPU在用户模拟硬件的操作结果。如果虚拟机需要将数据写入硬盘,实际结果是将数据写入主机的镜像文件中。
python学习网,大量免费python视频教程,欢迎在线学习!
