我正在构建一个项目,其中我必须提取运行在 qemu-kvm 之上的虚拟机的脏页面。我下载了 qemu 源代码但无法正确理解它,因为源代码非常大。所以请给我关于处理源代码和获取脏页的指导方针。
我同意 QEMU 源代码太大且耗时,难以理解。下面的链接简要介绍了 QEMU 如何运行以及 QEMU 的基本块是什么。
\n\n在这个链接中,该人对QEMU功能、QEMU结构、流程做了详细的研究。附有详细说明的 PDF 文件。他谈到了vl.c(主文件)、目标代码、TCG、动态翻译、代码库、执行开始等。非常有见地。
\n\n\n\n编辑:文档中的一些要点:
\n\n执行开始: \n/ 中对研究很重要的主要 C 文件是;/vl.c、/cpus.c、/execall.c、/exec.c、/cpu-exec.c。开始执行的 \xe2\x80\x98main\xe2\x80\x99 函数在 /vl.c 中定义。此文件中的函数根据给定的虚拟机规格设置虚拟机环境,例如 ram 大小、可用设备、CPU 数量等。从主函数开始,在虚拟机设置之后,执行分支通过 /cpus.c、/exec-all.c、/exec.c、\n/cpu-exec.c 等文件输出。
\n\n模拟硬件: \n模拟虚拟机中所有虚拟硬件的代码可以在\n/hw/中找到。QEMU 模拟相当多的硬件,但在本研究中不需要详细\n了解如何模拟硬件。
\n\n特定于来宾(目标): \n当前在 QEMU 中模拟的处理器架构是:Alpha、ARM、Cris、\ni386、M68K、PPC、Sparc、Mips、MicroBlaze、S390X 和 SH4。将 TB 转换为 TCG 操作所需的特定于这些架构的代码可在 /target-xyz/ 中找到,其中 xyz 可以是上述给定架构名称中的任何一个。因此\n特定于 i386 的代码可以在 /target-i386/ 中找到。这部分可以称为TCG的前端。
\n\n主机 (TCG) 特定: \n用于从 TCG 操作生成主机代码的主机特定代码放置在\nin /tcg/ 中。在 TCG 内部可以找到 /xyz/,其中 xyz 可以是 i386、sparc 等,其中包含将 TCG 操作转换为特定于架构的代码的代码。这部分可以称为TCG的后端。
\n\n/vl.c :主模拟器循环,设置虚拟机并执行 CPU。
\n\n/target-xyz/translate.c :提取的访客代码(特定于访客的\nISA)转换为架构\独立的 TCG 操作
\n\n/tcg/tcg.c : TCG的主要代码。
\n\n/tcg/*/tcg-target.c :将 TCG 操作转换为主机代码(主机特定 ISA)的代码。
\n\n/cpu-exec.c : /cpu-exec.c 中的函数 cpu-exec() 查找\n下一个转换块 (TB),如果未找到\n则调用生成下一个 TB 并\n最终执行生成的代码。
\n