我更熟悉x86架構上的KVM部分,所以試着在KVM的x86實現中解釋一下。
在x86架構中,KVM利用CPU的功能來分離管理程序和訪客模式。在英特爾方面,它們分別是VMX根和非根模式。
虛擬機入口(虛擬機管理程序 - >虛擬機)由KVM使用VMLAUNCH指令觸發,並在內核模式下將所有訪客需要的信息填充到CPU的VMCS中。從qemu-kvm到kvm內核模塊僅調用系統調用。
虛擬機退出發生在客戶操作系統正在處理超出其權限的事情時,例如訪問物理硬件或發生中斷。之後,發出VM條目並且CPU再次變爲非根模式以執行客人代碼。總之,虛擬機退出(虛擬機 - >虛擬機管理程序)由硬件自動完成,相應的退出原因和信息將在VMCS中記錄。 KVM然後檢查VMCS以確定其下一步。沒有系統調用VM - >管理程序。
大多數設備仿真都基於qemu-kvm可以利用現有qemu代碼的用戶空間。然而,某些設備直通技術(如英特爾VT-d)允許訪客通過IOMMU或其他方式直接訪問硬件。這可以爲高速網絡設備帶來更強大的性能。
如果您想挖掘源代碼,我建議首先關注CPU虛擬化(Intel VT-x),它位於linux/arch/x86/kvm/vmx.c
。英特爾軟件開發人員指南也對VT進行了全面介紹。
@Lekensteyn感謝您的編輯....真的很驚訝於有些人關心整潔,希望我會保持我的答案從現在開始。 – Deepthought 2014-03-10 19:25:19