-- linux爱好者,业余时间热衷于分析linux内核源码 -- 目前主要研究云计算和虚拟化相关的技术,主要包括libvirt/qemu,openstack,opennebula架构和源码分析。 -- 第五届云计算大会演讲嘉宾 微博:@Marshal-Liu
分类: LINUX
2011-10-11 22:14:26
1. 明确guest和host
对于qemu而言,被仿真的平台成为guest或者说target;很明显,运行qemu的平台就称为host。
2. 了解qemu动态翻译技术的发展
qemu运用动态翻译的技术将guest binary instructions动态翻译成host binary instructions,之后由host运行翻译后的指令。在qemu-0.9之前的版本都采用dyngen的动态翻译技术,而从qemu-0.10开始的版本开始采用TCG(Tiny Code Generator)的翻译技术。
采用dyngen 动态翻译技术的资料主要有以下两篇文章,是了解动态翻译技术入门的好文章(在后续的分析中,会简单介绍dyngen技术):
介绍TCG技术的文章则相对较少,主要是阅读qemu源码和qemu官网上的相关资料。
3. dyngen简单介绍
图1简单说明了qemu采用dyngen动态翻译技术将目标平台指令翻译成主机平台指令的简单过程。
假设target为PowerPC,host为x86,说明整个翻译过程:
4. TCG简单介绍
TCG是qemu的核心,主要实现了以下翻译流程:
guest binary instructions -> TCG IR -> host binary instructions TCG 定义了一组IR(intermediate representation),这些IR大致可以分为以下几类: - Mov类操作: mov, movi, ... - 逻辑操作: and, or, xor, shl, shr, ... - 算术操作: add, sub, mul, div, ... - 分支跳转操作: jmp, br, brcond - 函数调用: call - 内存操作: ld, st - QEMU的特殊操作: tb_exit, goto_tb, qemu_ld/qemu_st