【发布时间】:2023-03-29 18:40:01
【问题描述】:
当请求具有不同硬件架构(或-accel=tcg)的来宾完全虚拟化时,QEMU 使用 TCG“加速器”。
TCG 是一个 JIT 编译器,它通过翻译指令并在运行时立即调用它们来模拟客户架构集。可移植性取决于 TCG 支持的架构列表。
现实地说,是否有可能将操作系统编译成一些高效的 IR(类似于 Java 字节码)并完全用软件为该字节码实现虚拟机?
【问题讨论】:
-
考虑到操作系统通常具有低级别的硬件特定代码,您需要拥有支持这些代码的虚拟机(这基本上是 TCG JIT 所做的)或将操作系统重写为使用一台特定的虚拟机。所以理论上是可能的,但我不确定我是否看到了用例
-
@UnholySheep 但大多数设备驱动程序都在 QEMU 软件中完全模拟,大多数硬件特定代码都由 CPU 指令组成,这些指令显然可以在完整的软件 VM 中“执行”,例如JVM。
-
是的,您可能会编写一个编译器来输出 Java 字节码而不是机器指令,并且还能够将特定于硬件的代码转换为可移植的东西。但是 QEMU 的 TCG 还没有提供什么?
-
@UnholySheep 这可能会提供更好的可移植性,例如,如果使用虚拟机实现,生成的字节码可以在 QEMU 的任何版本和底层硬件上运行,而使用 JIT 编译,你仍然有一个TCG 和底层硬件之间的一对一耦合,为您需要的每个新架构提供支持
标签: virtual-machine emulation virtualization qemu