联系电话
天下新闻

KVM,QEMU和KQemu有什么区别?

来源:小编 浏览次数: 日期:2019-01-16 13:46
展开全部
QEMU:它可以被用来模拟机,完整和独立软件非常灵活的便携性。
它使用特殊的重新编译器将一个处理器的二进制代码转换为另一个处理器。
(即,在执行中的PPCmac MIPS代码或X86PC执行ARM代码。)KQEMU:如果具有源和目的地码是相同的体系结构(最常见的情况下在86运行86也)。您需要解析代码退出所有特权指令并替换为上下文更改。
为了使这个过程尽可能有效,有一个KQemu内核模块来处理这个问题。
作为内核模块,KQemu仅替换最低的单环0指令。
在这种情况下,QEMU是仍分配所有的内存,并加载模拟机的代码。
区别在于KQemu不需要重新编译代码,它只是调用KQemu来调用scan / patch / execute。
所有外围硬件仿真都在Qemu中执行。
由于大多数代码都没有翻译,KQemu仍然需要翻译代码环0(VM核心中的大部分代码)。结果,表现还不好。
KVM:KVM将包含许多组件。首先,它是用于在处理器转换到新的guset模式(当前被包括在主线)一个Linux内核模块。
用户模式具有自己的呼叫状态,但具有特权环0的命令进入管理程序代码。
这是一种新的处理器执行模型,因此您无需更改代码。
在除了处理器核心的状态转换中,芯模块,如MMU注册表(虚拟机管理)和PCI仿真硬件,和一小部分的部分中的低级仿真还处理。
与此同时,Qemu团队将专注于硬件仿真和可移植性,KVM团队将专注于内核模块(如果某些部分的性能得到改善,KVM将移动一小部分代码)用户空间代码的交互
可执行文件kvm-qemu类似于普通的Qemu。与编译和调用KQemu,RAM分配,代码加载,线程创建(这很重要)不同。该线程调用KVM内核模块,更改为用户模式,并执行虚拟机代码。
如果找到特权指令,请再次更改KVM内核模块。如有必要,它会通知大多数硬件仿真,例如Qemu线程。
这种架构的聪明之处在于客户端代码是在posix子流程中模拟的。有了这个,您可以使用普通的Linux工具进行管理。
如果需要虚拟机的两个或四个核,KVM-QEMU创建两个或四个子过程,每个子过程将通过调用KVM内核模块开始执行。
并发(如果有足够数量的实芯的)或编程(如果不是关键的)是一种通用的Linux程序员非常小的KVM代码一起工作时,KVM访问CPU和MEMQEMU模拟硬件资源(硬盘,声卡,USB等)QEMU在单独运行QEMU时模拟CPU和硬件。