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的问题。


创建于: 2023-09-08T16:21:27, Lastmod: 2024-01-03T23:45:04