Chinaunix

标题: 对虚拟化技术(KVM)的一些理解 [打印本页]

作者: evilhacker    时间: 2012-12-15 22:14
标题: 对虚拟化技术(KVM)的一些理解
本帖最后由 evilhacker 于 2012-12-15 22:16 编辑

LZ是小白,最近在看KVM,顺便写了点学习笔记,不知道理解的对不对,如果有任何错误,欢迎各位不吝赐教,感激不尽~~ :-)

先从虚拟化这个概念说起,其实通常的进程/线程也是一种虚拟化。Intel把CPU的优先级分了4层,ring0完整的暴露了CPU的各个接口,运行在ring0的操作系统可以任意使用CPU提供的所有功能,相比之下,运行在ring3的应用程序只能看到较少的CPU接口。

在这种情况下,操作系统担任的角色就是类似VMM(Virtual Machine Monitor)。运行在ring3的应用程序,自以为自己掌握所有的计算机资源,比如CPU资源,4GB的内存等等。众多傻乎乎的应用程序(用户态进程)在自己的虚拟世界里玩的不亦乐乎,而操作系统默默的在背后处理各个进程CPU相关的数据的保存和恢复,比如修改cr3寄存器,修改页表等等。

所以,操作系统完成了对ring3环境下的CPU的虚拟化,而KVM则是实现了一个完整的CPU虚拟化(所以这种类型的虚拟化,能运行不经任过何修改操作系统)。

kvm是一个内核模块,用kvm虚拟化技术创建的虚拟机,如果guest OS 执行的是与访问全局资源无关的指令,那么这些指令是直接运行在物理CPU上的;当执行到了访问全局资源的指令,比如产生缺页错误,或者设备I/O,则guest OS产生VM Exit退出到KVM中,然后KVM再根据退出的原因,决定是由自己来处理还是交给Qemu。

当发生VM Entry和VM Exit 时必须要有一个结构体来保存当前CPU的上下文,这个结构就是VMCS (Virtual Machine Control Structure),而前面提到的,使用KVM必须要有CPU硬件上的支持,指的就是CPU硬件必须提供一种功能,能自动根据VMCS的内容完成VM和VMM之间的状态切换。
作者: thomasnew    时间: 2013-02-01 11:39
突然出现的Qemu是什么? 和kvm什么关系?
作者: chishanmingshen    时间: 2013-02-03 11:26

没研究过。。。

奇怪,本版没有虚拟化的子板块?
作者: embeddedlwp    时间: 2013-02-03 16:04
回复 2# thomasnew


qemu已经n多年了,怎么叫突然出现?


   
作者: thomasnew    时间: 2013-02-04 10:06
回复 4# embeddedlwp
呵呵,我意思是文中描述突然出现了这个词,看的人有点突然,应该稍微解释一下。

   
作者: smalloc    时间: 2013-02-04 10:26
虚拟就是概念的抽象。
作者: xiongweixie    时间: 2013-02-20 05:00
回复 3# chishanmingshen


    kvm可以说是内核的一个模块。仅仅只有kvm是不能启动虚拟机的。需要跟qemu一起工作。

    qemu是模拟器。运行在用户空间。他可以不需要kvm就可以启动虚拟机。
作者: xuukai    时间: 2013-04-01 23:27
比如产生缺页错误,或者设备I/O,则guest OS产生VM Exit退出到KVM中,然后KVM再根据退出的原因,决定是由自己来处理还是交给Qemu。
----------------------------------------------
我看了一个图,QEMU是用户态的一段程序(KVM-QEMU结构中,KVM在用户态实际上是QEMU代码的一个子集)。KVM发现用了特权指令是敏感指令,那由CPU处理;如果这些敏感指令不是敏感指令,就要使用陷入等方法了。
作者: hmsghnh    时间: 2013-04-02 11:38
QEMU 应该是完整的实现了吧。

KVM 相比较其他虚拟机的特点就是,尽量复用kernel里面已有的功能吧。
比如以前  虚拟机的客户机的内存管理,人家都是自己有一套hypervisor的实现的,自己管理内存分配。
但KVM的观点就是linux内存里面的内存管理已经比较完善了,没必要再搞一套新的,所以这个虚拟机不同客户机内存的管理也由linux内核里面来负责就可以了。 这样linux的内核代码得到最大程度的复用。


作者: almeydifer    时间: 2013-04-13 11:20
qemu的主要作用应该是提供KVM的I/O子系统虚拟化的功能。





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2