知行编程网知行编程网  2022-11-18 23:30 知行编程网 隐藏边栏  8 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于qemu是用python写的吗的相关知识,希望可以帮到处于编程学习途中的小伙伴


qemu是用python写的吗?


一、QEMU简介

QEMU 是 Fabrice Bella 在 Linux 内核上编写的 CPU 仿真器。这款开源仿真器软件与 Bochs 和 PearPC 类似,但具有后两者所不具备的高速、跨平台等特点。 QEMU 可以在不同的机器上运行独立开发的操作系统和软件。通过开源加速器KQEMU,可以模拟到接近真机的速度。 QEMU 构思巧妙且高效。借助核心态的KQEMU加速器,模拟代码的执行速度甚至可以接近真机。 QEMU 已成为使用最广泛的仿真器。 KVM 和 Google Android 模拟器都基于 QEMU。

QEMU 是一个开源模拟器和虚拟机监视器(VMM)。 QEMU主要提供两个功能供用户使用。一种是作为用户态模拟器,使用动态代码翻译机制来执行不同于宿主架构的代码。二是充当虚拟机监督者,模拟整个系统,利用其他VMM(Xen、KVM等)利用硬件提供的虚拟化支持,创建性能接近主机的虚拟机。

用户可以通过不同 Linux 发行版附带的包管理器来安装 QEMU。例如,在 Debian 系列发行版上,你可以使用以下命令进行安装:

sudo apt-get install qemu

或者使用以下命令安装在 Red Hat 系列发行版上:

sudo yum install qemu -y

除此之外,也可以选择从源码安装。


获取QEMU源码

你可以从 QEMU 官网下载 QEMU 源代码的 tar 包。以命令行下载QEMU 2.0版本为例:

$wget http://wiki.qemu-project.org/download/qemu-2.0.0.tar.bz2
$tar xjvf qemu-2.0.0.tar.bz2

如果需要参与到QEMU的开发中,最好使用Git获取源码:

$git clone git://git.qemu-project.org/qemu.git


编译及安装

获取源码后,可以根据需求来配置和编译QEMU。

$cd qemu-2.0.0 //如果使用的是git下载的源码,执行cd qemu
$./configure --enable-kvm --enable-debug --enable-vnc --enable-werror  --target-list="x86_64-softmmu"
$make -j8
$sudo make install

配置脚本用于生成 Makefile,其选项可以通过 ./configure --help 查看。此处使用的选项具有以下含义:

--enable-kvm:编译KVM模块,使QEMU可以利用KVM来访问硬件提供的虚拟化服务。
--enable-vnc:启用VNC。
--enalbe-werror:编译时,将所有的警告当作错误处理。
--target-list:选择目标机器的架构。默认是将所有的架构都编译,但为了更快的完成编译,指定需要的架构即可。


二、基本原理

当 QEMU 作为系统模拟器时,它模拟了一个可以独立运行操作系统的虚拟机。如下图所示,每个虚拟机对应宿主机(Host)中的一个QEMU进程,虚拟机的vCPU对应QEMU进程的一个线程。

qemu是用python写的吗?

QEMU结构图

系统虚拟化主要是虚拟化 CPU、内存和 I/O 设备。虚拟化 CPU 称为 vCPU。为了提高效率,QEMU借用了KVM、XEN等虚拟化技术,直接利用硬件对虚拟化的支持,在宿主机上安全运行虚拟机代码(需要硬件支持)。虚拟机vCPU调用KVM接口执行任务的流程如下(代码来自QEMU开发者Stefan的技术博客):

open("/dev/kvm")
ioctl(KVM_CREATE_VM)
ioctl(KVM_CREATE_VCPU)
for (;;) {
     ioctl(KVM_RUN)
     switch (exit_reason) {
     case KVM_EXIT_IO:  /* ... */
     case KVM_EXIT_HLT: /* ... */
     }
}

QEMU发起ioctrl调用KVM接口,KVM使用硬件扩展直接在宿主机上运行虚拟机代码。一旦vCPU需要对设备寄存器进行操作,vCPU就会停止并返回QEMU,QEMU会模拟操作结果。

虚拟机内存映射到 QEMU 的进程地址空间并在启动时分配。从虚拟机的角度来看,QEMU分配的主机上的虚拟地址空间就是虚拟机的物理地址空间。

QEMU在宿主机的用户态模拟虚拟机的硬件设备,硬件上的vCPU的运行结果会在用户态模拟。例如,如果虚拟机需要将数据写入硬盘,实际的结果是将数据写入主机中的映像文件。 .

python学习网,大量的免费
,欢迎在线学习!

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享