我正在建设一个项目,其中我必须提取的页面是脏的虚拟机运行在qemu-kvm.I之上。我下载了qemu的源代码,但无法正确地理解这一点,因为源代码是非常big.So请给我关于处理源代码和获得脏页面的指南。
发布于 2014-01-08 23:53:00
发布于 2019-03-14 20:31:16
我同意QEMU源代码太庞大,理解起来也太耗时。下面的链接简要介绍了QEMU是如何运行的,以及QEMU的基本模块是什么。
在这个环节中,作者对QEMU的功能、QEMU结构、流程做了详细的研究。附件中有一份PDF,其中有详细的解释。他谈到了vl.c (主文件),目标代码,TCG,动态翻译,代码库,开始执行等,非常有洞察力。
Documentation on QEMU
编辑:文档中的一些要点:
开始执行:/中对研究很重要的主要C文件是: /vl.c、/cpus.c、/execall.c、/exec.c、/cpu-exec.c。在/vl.c中定义了开始执行的‘main’函数。该文件中的函数根据给定的虚拟机规范(如ram的大小、可用设备、cpu的数量等)设置虚拟机环境。在主函数中,在设置虚拟机之后,通过诸如/cpus.c、/exec-all.c、/exec.c、/cpu-exec.c等文件进行分支执行。
模拟硬件:可以在/hw/中找到模拟虚拟机中所有虚拟硬件的代码。QEMU模拟了相当多的硬件,但在本研究中没有必要详细了解硬件是如何模拟的。
访客(目标)特定:目前在QEMU中仿真的处理器体系结构有: Alpha、ARM、Cris、i386、M68K、PPC、Sparc、Mips、MicroBlaze、S390X和SH4。将TBs转换为TCG操作所需的特定于这些体系结构的代码可以在/target- xyz /中找到,其中xyz可以是上述任何给定的体系结构名称。因此,特定于目标的代码可以在/ i386 -i386/中找到。这部分可以称为TCG的前端。
特定于主机( TCG ):用于从tcg操作生成主机代码的特定于主机的代码放在/tcg/中。在TCG中,可以找到/ xyz /,其中xyz可以是i386、sparc等,其中包含将TCG操作转换为体系结构特定代码的代码。这部分可以称为TCG的后端。
/vl.c :主模拟器循环,设置虚拟机并执行CPU。
C :将提取的客户代码(客户特定的ISA)转换为独立于体系结构的操作
/tcg/tcg.c : TCG的主要代码。
/ TCG /*/tcg-target.c :将TCG操作转换为主机代码的代码(主机特定的ISA)。
/cpu-exec.c : /cpu-exec.c中的函数cpu-exec()查找下一个转换块( TB ),如果没有找到,则调用以生成下一个TB,最后执行生成的代码。
https://stackoverflow.com/questions/15485257
复制相似问题