linux_KVM虚拟化源代码结构详解整理.pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
Linux KVM虚拟化源代码结构详解整理 KVM(Kernel-based Virtual Machine)是Linux操作系统中的虚拟机监控器,它可以运行多个虚拟机,每个虚拟机可以运行不同的操作系统。KVM的虚拟化源代码结构可以分为两个部分:KVM Driver和Qemu。 KVM Driver是Linux内核的一个模块,负责虚拟机的创建、虚拟内存的分配、虚拟CPU的寄存器的读写以及虚拟CPU的运行等。KVM Driver将Linux内核变成了一个虚拟机监控器。 Qemu是KVM的用户空间组件,提供了I/O设备模型和访问外设的途径。Qemu通过LibKvm应用程序接口与KVM Driver进行交互,并使用ioctl系统调用创建和运行虚拟机。 KVM的基本结构如图1所示。KVM Driver将Linux内核变成了一个虚拟机监控器,并新增加了客户模式、内核模式和用户模式。客户模式执行非I/O的客户代码,虚拟机运行在客户模式下。内核模式实现到客户模式的切换,处理因为I/O或者其它指令引起的从客户模式的退出。用户模式代表客户执行I/O指令,Qemu运行在这种模式下。 KVM的工作原理如图2所示。用户模式的Qemu利用接口libkvm通过ioctl系统调用进入内核模式。KVM Driver为虚拟机创建虚拟内存和虚拟CPU后执行VMLAUCH指令进入客户模式。装载Guest OS执行。如果Guest OS发生外部中断或者影子页表缺页之类的事件,暂停Guest OS的执行,退出客户模式进行一些必要的处理。然后重新进入客户模式,执行客户代码。如果发生I/O事件或者信号队列中有信号到达,就会进入用户模式处理。 KVM采用全虚拟化技术,客户机不用修改就可以运行。KVM Driver工作在内核模式下,负责虚拟机的创建和管理。Qemu工作在用户模式下,负责I/O设备的模拟和访问外设。 KVM还支持Intel VT-x和AMD SVM硬件虚拟化技术。VT-x技术引入了一种新的处理器操作,叫做VMX(Virtual Machine Extension),提供了两种处理器的工作环境。VMCS结构实现了两种环境之间的切换。VM Entry使虚拟机进去客户模式,VM Exit使虚拟机退出客户模式。 在KVM中,Guest OS的调度执行需要通过ioctl系统调用进入内核模式,在KVM Driver中获取当前物理CPU的引用。之后将Guest状态从VMCS中读出,并装入物理CPU中。执行VMLAUCH指令使得物理处理器进入非根操作环境,运行客户代码。当Guest OS执行一些特权指令或者外部事件时,比如I/O访问,对控制寄存器的操作,MSR的读写数据包到达等。都会导致物理CPU发生VMExit,停止运行Guest OS。将Guest OS保存到VMCS中,Host状态装入物理处理器中,处理器进入根操作环境,KVM取得控制权,通过读取VMCS中的VM_EXIT_REASON字段得到引起VM Exit的原因。然后调用kvm_exit_handler处理函数。如果由于I/O获得信号到达,则退出到用户模式的Qemu处理。处理完毕后,重新进入客户模式运行虚拟CPU。
剩余19页未读,继续阅读
- 粉丝: 2
- 资源: 9万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0