QEMU 工作原理
Qemu 的工作方式
Qemu有两种工作方式:全系统模拟(Full-system emulation)和用户模拟(User-mode emulation)。
用户模拟仅仅对目标格式的Elf文件进行指令翻译并执行, 在遇到需要使用系统资源的命令(通过系统调用)时, 就转换成实际host的系统调用来完成,将执行完的结果返回。 Elf就是一个用户态的应用,不能直接操作硬件。 总之,用户模式下Qemu仅仅实现了讲Guest指令翻译为Host指令并执行, 不模拟资源。
全系统模拟的方式下,Qemu在用户态模拟了完整的一套Guest硬件资源, 包括Cpu、内存、外设等,此时Qemu更像是一个虚拟机管理器。 Guest Elf可以直接对硬件进行操作。
指令翻译
在 host 上运行 guest 架构代码的能力由 QEMU TCG 模块提供。
TCG 做指令翻译的思路是 “边翻译边执行”, 并且将翻译工作分为前后端,中间会有一层中间指令, 这样能够方便添加对新指令的支持。这个有点类似于现代编译器,也是由类似间结果的流程,称为 IR。
TCG 执行一次翻译的单位是 Translation Block,以分支跳转、页边界为划分条件。
Qemu 全系统模拟启动内核
–kernel选项后面接一个Elf格式的系统镜像,Qemu内部用seaBios来实现引导Elf, 所以我们可以不关心如何引导Elf的问题。