虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。
物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)

KVM属于完全虚拟化,功能组件上由两部分组成,KVM Driver(内核态)和Qemu(用户态)。KVM Driver负责模拟虚拟机的CPU运行,内存管理,设备管理等;Qemu则模拟虚拟机的IO设备接口以及用户态控制接口。

Qemu在最上层,将虚拟机的整体呈现到host用户上,可以理解成客户模式;Qemu通过中间层libkvm或者ioctl等控制/dev/kvm设备接口,从而掌握内核态中kvm驱动进行的资源分配,即用户态模式;

kvm驱动接收用户态操作指令,控制虚拟机在内核态的资源分配,称之为内核模式。在HOST里面,客户模式的体现就是一个虚拟机内部环境,用户态则是虚拟机进程。

KVM工作原理:用户模式的QEMU通过ioctl进入内核模式,kvm模块为虚拟机创建虚拟内存,虚拟CPU后执行VMLAUCH指令进入客户模式。加载Guest OS并执行。如果Guest OS发生外部中断或者影子页表却也之类的情况,会暂停Guest OS的执行,退出客户模式进行异常处理,执行客户代码。如果发生I/O事件或者信号队列有信号到达,就会进入用户模式处理。

KVM 由处于内核态的 KVM 模块和用户态的 QEMU 两部分构成。内核模块实现了 CPU 和内存虚拟化等决定关键性能和核心安全的功能并向用户空间提供了使用这些功能的接口,QEMU 利用 KVM 模块提供的接口来实现设备模拟、 IO 虚拟化和网络虚拟化等。单个虚拟机是宿主机上的一个普通 QEMU 进程,虚拟机中的 CPU 核(vCPU)是 QEMU 的一个线程,VM 的物理地址空间是 QEMU 的虚拟地址空间

因此在虚拟机运行时,有三种模式:

客户模式:执行非I/O的客户代码,虚拟机运行在这个模式下。

用户模式:代表用户执行I/O指令,QEMU运行在这个模式下。

内核模式:实现客户模式的切换,处理因为I/O或者其他指令引起的从客户模式退出(VM_EXIT)。kvm模块运行在这个模式下。

kvm模型中,每一个Guest OS都是作为一个标准的Linux进程,都可以使用Linux进程管理命令管理。

最新文章

  1. Lambert(朗伯)光照模型 和Half Lambert的区别
  2. Opencv算法学习二
  3. mysql日期格式化
  4. WEB界面onload前的加载流程❤❤
  5. PB中用oracle的存储过程返回记录集做数据源来生成数据窗口,PB会找不到此存储过程及不能正常识别存储过程的参数问题(转)
  6. jmap命令详解(转)
  7. iOS学习之Object-C语言简单的通讯录管理系统
  8. YTU 2609: A改错题--学生信息的输入和输出
  9. 使用U盘安装win7系统,遇到“无法定位现有系统分区”问题
  10. 硬盘被误格式化或Ghost还原后的数据恢复
  11. html postMessage 创建聊天应用
  12. Gentoo安装详解(三)-- 配置系统
  13. JSON错误
  14. C# Excel导入数据
  15. 八皇后问题动态演示_Qt5实现
  16. 通过Groovy来消除代码噪声
  17. linux vi模式下基本命令和快捷键
  18. Hadoop运维手记
  19. 结对编程——Java实现黄金分割点游戏
  20. MySQL数据库备份与还原

热门文章

  1. [no code][scrum meeting] Alpha 15
  2. skywalking实现分布式系统链路追踪
  3. Python:Ubuntu上使用pip安装opencv-python出现错误
  4. (总结)Linux下su与su -命令的本质(转)
  5. Git 极速上手(超简单)
  6. ADB WIFI无线调试真正摆脱usb数据线连接,一次也不用!
  7. BugKu之备份是个好习惯
  8. Spark记录(二):Spark程序的生命周期
  9. elementUI下拉框select组件change事件用法
  10. easypoi导出动态表头excel