首页 > 代码库 > 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中的设备模型实现设备管理。