当前位置: 主页 > 365bet手机 >

KVM,QEMU和KQemu有什么区别?

发布者:小编
来源:admin 日期:2019-02-07 10:33 浏览()
展开全部
Qemu:一种非常灵活,便携的完整独立软件,可用于模拟机器。
它使用特殊的重新编译器将一个处理器的二进制代码转换为另一个处理器。
(换句话说,你想运行在PPCmac的MIPS代码,或运行X86PC的ARM代码)你换成上下文由最终所有的,你将需要对代码进行分析的特权指令的变化。
为了有效尽可能这个过程中,有一个KQEMU内核模块来处理这个问题。
作为内核模块,KQemu仅替换最低的单环0指令。
在这种情况下,Qemu仍然分配所有RAM并加载模拟的机器代码。
区别在于KQemu不需要重新编译代码,它只是调用KQemu来调用scan / patch / execute。
所有外围硬件仿真都在Qemu中执行。
由于大多数代码都没有翻译,KQemu仍然需要翻译代码环0(VM核心中的大部分代码)。结果,表现还不好。
KVM:KVM包含许多组件。首先是Linux内核模块(现在包含在主线中),用于将处理器转换为新的guset模式。
用户模式具有自己的呼叫状态,但具有特权环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和硬件。