KVM 虚拟机源代码分析1,KVM 结构及工作原理1
1 KVM 结构KVM 基本结构有两部分组成
一个是 KVM Driver ,已经成为 Linux 内核的一个模块
负责虚拟机的创建,虚拟内存的分配,虚拟 CPU 寄存器的读写以及虚拟 CPU 的运行等
另外一个是略微修改过的 Qemu,用于模拟 PC 硬件的用户空间组件,提供 I/O 设备模型以及访问外设的途径
图 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 系统调用设置和调度虚拟处理器