linux-如何在kvm中完成设备仿真

我知道qemu-kvm在KVM中进行设备仿真. qemu-kvm是否在主机的用户空间中执行?因此,当遇到踢动功能时,它会通过对系统管理程序的超级调用退出虚拟机,然后系统管理程序移交给
主机用户空间中的qemu-kvm.做完所需的下一步
事情,qemu-kvm过渡到管理程序,然后
系统管理程序返回到VM.所以这意味着有两个系统调用
从VM->超级管理程序和qemu-kvm->超级管理程序?这些步骤是
那发生了还是我错了?是否有关于的文件
这些东西,请给我链接.非常感谢你…

谢谢,
巴拉

解决方法:

我对KVM在x86架构上工作的部分更为熟悉,因此请尝试在KVM的x86实现中对此进行解释.

在x86架构中,KVM利用CPU的功能来分隔虚拟机管理程序和访客模式.用英特尔的术语来说,它们分别是VMX根模式和非根模式.

KVM使用VMLAUNCH指令触发VM条目(管理程序-> VM),所有来宾需要的信息均以内核模式填充在CPU的VMCS中.从qemu-kvm到kvm内核模块仅调用系统调用.

当来宾操作系统正在处理超出其权限的操作(例如访问物理硬件或发生中断)时,VM退出.之后,发出VM条目,CPU再次更改为非root用户模式以执行来宾代码.总之,VM退出(VM→管理程序)由硬件自动完成,并且相应的退出原因和信息将在VMCS中重新记录.然后,KVM检查VMCS以确定下一步.没有针对VM的系统调用->管理程序.

大多数设备仿真都基于用户空间,其中qemu-kvm可以利用现有的qemu代码.但是,某些设备直通技术(例如Intel VT-d)允许来宾直接通过IOMMU或其他设备访问硬件.这可以带来更强大的性能,尤其是在高速网络设备上.

如果要挖掘源代码,建议您首先关注位于linux / arch / x86 / kvm / vmx.c中的CPU虚拟化(Intel VT-x).英特尔软件开发人员指南也对VT进行了全面介绍.

上一篇:linux-构建嵌入Qt的最小系统并在Qemu for x86上运行


下一篇:模拟器上的Android 4.3