- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
KVM 虚拟机源代码分析
1 , KVM 结构及工作原理
1.1KVM 结构
KVM 基本结构有两部分组成。一个是 KVM Driver ,已经成为 Linux 内核的一个模块。
负责虚拟机的创建,虚拟内存的分配,虚拟 CPU 寄存器的读写以及虚拟 CPU 的运行等。另
外一个是稍微修改过的 Qemu ,用于模拟 PC 硬件的用户空间组件,提供 I/O 设备模型以及
访问外设的途径。
用户模式
客户模式
内核模式
Qemu
LibKvm
Linux 用户 ioctl
模式
KVM fd
/dev/kvm Kvm-vm fd Kvm-vcpu fd
Linux 内核
VMM(Linux 内核+ KVM Driver)
模式
图 1 KVM 基本结构
KVM 基本结构如图 1 所示。 其中 KVM 加入到标准的 Linux 内核中, 被组织成 Linux 中标准的
字符设备 (/dev/kvm) 。Qemu 通 KVM 提供的 LibKvm 应用程序接口,通过 ioctl 系统调用创建
和运行虚拟机。 KVM Driver 使得整个 Linux 成为一个虚拟机监控器。并且在原有的 Linux 两
种执行模式 ( 内核模式和用户模式 )的基础上,新增加了客户模式,客户模式拥有自己的内核
模式和用户模式。在虚拟机运行下,三种模式的分工如下:
客户模式:执行非 I/O 的客户代码。虚拟机运行在客户模式下。
内核模式:实现到客户模式的切换。处理因为 I/O 或者其它指令引起的从客户模式的退出。
KVM Driver 工作在这种模式下。
用户模式:代表客户执行 I/O 指令 Qemu 运行在这种模式下。
精选文库
在 KVM 模型中,每一个 Guest OS 都作为一个标准的 Linux 进程,可以使用 Linux 的进程管
理指令管理。
在图 1 中./dev/kvm 在内核中创建的标准字符设备, 通过 ioctl 系统调用来访问内核虚拟
机,进行虚拟机的创建和初始化; kvm_vm fd 是创建的指向特定虚拟机实例的文件描述符,
通过这个文件描述符对特定虚拟机进行访问控制; kvm_vcpu fd 指向为虚拟机创建的虚拟处
理器的文件描述符,通过该描述符使用 ioctl 系统调用设置和调度虚拟处理器的运行。
1.2KVM 工作原理
KVM 的基本工作原理:用户模式的 Qemu 利用接口 libkvm 通过 ioctl 系统调用进入内核
模式。 KVM Driver 为虚拟机创建虚拟内存和虚拟 CPU后执行 VMLAUCH 指令进入客户模式。
装载 Guest OS执行。 如果 Guest OS 发生外部中断或者影子页表缺页之类的事件, 暂停 Guest
OS 的执行,退出客户模式进行一些必要的处理。然后重新
文档评论(0)