【airbus-seclab/qemu_blog加工翻译 01】前言

本文系列介绍了QEMU的内部结构,包括内存管理、设备控制器、中断处理和虚拟化技术。文章重点讲解了QEMU的系统和用户模式,以及QEMUAPI中的QOM、qdev和VMState。同时提到了不同架构和操作系统下的加速器使用情况。
摘要由CSDN通过智能技术生成

简介

这是一系列有关 QEMU 内部结构的文章。它不会涵盖有关 QEMU 的所有内容,但应该帮助您了解它的工作原理,以及最重要的是如何侵入它以获取乐趣和利润。

我们不会解释用法和其他可以在官方文档中找到的内容。将讨论以下主题:

  • 创建新机器
  • 控制内存区域
  • 创建新设备
  • 中断控制器
  • 计时器
  • PCI 控制器
  • PCI 设备
  • 选项
  • 执行循环
  • 断点
  • 处理 VM 运行状态
  • TCG 内部第 1 部分、第 2 部分和第 3 部分
  • 快照

官方代码和文档可以在这里找到:

  • https://github.com/qemu/qemu
  • https://www.qemu.org/documentation/

术语

主机端和目标端

主机是QEMU运行的平台和架构。通常是 x86 机器。
目标是 QEMU 模拟的架构。您可以在构建时选择您所需要的架构:
./configure --target-list=ppc-softmmu ...
这样,在源代码组织中,您将在 target/ 目录中找到所有支持的架构:
在这里插入图片描述
qemu-system- 二进制文件内置于各自的 -softmmu 目录中:(这个我在我的目录中没有找到)

(qemu-git) ls -ld *-softmmu
drwxr-xr-x 9 xxx xxx 4096 i386-softmmu
drwxrwxr-x 11 xxx xxx 4096 ppc-softmmu
drwxr-xr-x 9 xxx xxx 4096 x86_64-softmmu

系统和用户模式

QEMU 是一个系统模拟器。它提供了许多架构的仿真,并且可以在许多架构上运行。

它能够通过 qemu-system- 命令行工具模拟完整的系统(CPU、设备、内核和应用程序)。这就是我们将深入探讨的模式。

它还通过 qemu- 命令行工具提供用户态模拟模式。

这允许在 Linux 主机上直接运行 架构的 Linux 二进制文件。它主要模拟指令集并将系统调用转发到主机Linux内核。仿真仅与用户级 CPU 指令相关,与系统指令无关,没有设备也没有低级内存处理。

在本博客文章系列中,我们不会介绍 qemu 用户模式。

仿真、JIT 和虚拟化

最初,QEMU 是一个带有即时编译器 (TCG) 的仿真引擎。 TCG 用于将目标指令集架构 (ISA) 动态转换为主机 ISA。

稍后我们将看到,在 TCG 的上下文中,tcg 目标成为 TCG 必须生成要在其上运行的最终汇编代码的体系结构(即主机 ISA)。

存在目标和主机架构相同的情况。例如,当用户想要在 Linux 上运行 Windows 时,典型的虚拟化环境(VMware、VirtualBox 等)就是这种情况。术语通常是Host和Guest(Target)。

如今,QEMU 通过不同的加速器提供虚拟化。虚拟化被认为是一种加速器,因为当主机和目标共享相同的架构时,它可以防止不必要的指令模拟。只有系统级(又名supervisor/ring0)指令可以被模拟/拦截。

当然,QEMU 虚拟化功能与主机操作系统和架构相关。 x86 架构提供硬件虚拟化扩展(Intel VMX/AMD SVM)。但主机操作系统必须允许 QEMU 才能利用它们。

在 x86-64 Linux 主机下,我们发现了以下加速器:

$ qemu-system-x86_64 -accel ?
Possible accelerators: kvm, xen, hax, tcg

在 x86-64 MacOS 主机上:

$ qemu-system-x86_64 -accel ?
Possible accelerators: tcg, hax, hvf

支持的加速器可以在 qemu_init_vcpu() 中找到:
在这里插入图片描述
简而言之:

  • kvm 是基于 Linux 内核的虚拟机加速器;
  • hvf是MacOS Hypervisor.framework加速器;
  • hax 是跨平台英特尔 HAXM 加速器;
  • whp 是 Windows Hypervisor 平台加速器。

您可以在三大操作系统下受益于 x86 硬件虚拟化的速度。请注意,TCG 也被视为加速器。我们可以在这里就术语进行长时间的辩论……

QEMU APIs

QEMU 中存在很多 API,其中一些已经过时并且没有很好的文档记录。阅读源代码仍然是您的最佳选择。有一个很好的概述

该系列文章将主要讨论 QOM、qdev 和 VMState。 QOM 是更抽象的一种。虽然 QEMU 是用 C 语言开发的,但开发人员选择实现 QEMU 对象模型来提供一个框架,用于注册用户可创建类型并实例化这些类型的对象:设备、机器、cpu……习惯 OPP 概念的人会发现他们的在 QOM 中标记。

我们将简要说明如何使用它,但不会详细说明其底层实现。保持务实!有兴趣的读者可以看看include/qom/object.h

免责声明

值得注意的是,Airbus并不承诺本博客文章系列的详尽性和完整性。此处提供的信息源自作者对 QEMU v4.2.0 的知识和理解。

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值