首页 > 代码库 > kvm 简介
kvm 简介
1. 基础概念
1.1 kvm整合入linux 内核;
1.2 kvm模型中,每一个虚拟机对于linux而言都是一个标准进程;
1.3 普通的linux进程有用户和内核两个空间,在kvm模型中定义了客户模式,该模式具备自身的用户和内核空间;
1.4 kvm 通过将Linux内核转换成一个管理程序:
1.4.1 内核模块中导出一个dev/kvm的字符设备,能够启动客户模式;
1.4.2 每个vm(打开dev/kvm的进程)的地址空间是独立的;
1.4.3 所有的进程通用dev设备树,但映射是独立的;
1.5 与QEMU的关系
1.5.1 一个KVM下载包,包含了QEMU、KVM等,其中QEMU本身也是个独立的虚拟机,在KVM中用了其中基于X86的部分功能,主要作为虚拟机用户空间的管理界面;
2. 工作原理
2.1 Guest OS的调度
当Guest OS遇到一些特权指令或外部事件时,如I/O访问,物理CPU产生vm exit,停止运行Guest OS。处理器获取root操作权限,
KVM取得控制权,通过读取VMCS中VM_EXIT_REASON值,调用kvm_exit_handler。
2.2 内存管理
影子页表,随着客户机页表的更新而更新,通过键值表示是否有对应的物理页面。理解原有X86系列的页表功能是将线性地址 转换到 物理地址,可以利用缺页异常进行局部载入。
而在虚拟化之后,原来的线性地址编程了虚拟化的“物理地址”,影子页表做了这个功能。而之前的物理地址现在则成为“机器地址”。
2.3 设备管理
KVM通过移植QEMU中的设备模型实现设备管理。