进程级模拟 vs 系统级模拟

qemu的模拟粒度可以分为进程级和系统级。在进程级模拟下,qemu只负责运行一个为其他架构编译的 普通程序,这个程序与当前系统中运行的程序的唯一区别是它所使用的指令集不同,qemu会负责将它 所使用的指令集翻译为当前机器可以执行的指令。除此之外,该程序相当于当前系统中的一个普通进 程,它仍然通过当前系统的内核来访问操作系统提供的功能。默认情况下, qemu 命令执行进程级模 拟。例如,我们提供的炸弹程序就只需要使用进程级模拟,它本质上就是一个普通的用户态程序,只是 编译到了aarch64指令集而非x86指令集。除此之外,它的输入/输出等功能,仍然是调用当前操作系统 提供的syscall。

qemu-system 命令可以用于系统级模拟。在系统级模拟下,QEMU会模拟一整套硬件,包括CPU、内 存、磁盘以及多种可选硬件设备,此时QEMU的功能类似于虚拟机。在系统级模拟下,QEMU不能直接 运行普通的用户态程序,而是需要运行完整的操作系统,由操作系统来管理QEMU模拟出的硬件资源。 系统级模拟与是否使用KVM等硬件虚拟化进行加速是正交的。如果不使用KVM,QEMU仍然通过动态指 令集翻译来运行被模拟的操作系统,此时它可以运行为其他架构编译的操作系统。否则,使用硬件虚拟 化可以增强性能,但QEMU不再可以运行为其他架构编译的操作系统。

Last change: 2024-08-17, commit: 5b84259