免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2680 | 回复: 9
打印 上一主题 下一主题

[内核模块] 对虚拟化技术(KVM)的一些理解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-15 22:14 |只看该作者 |倒序浏览
本帖最后由 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之间的状态切换。

论坛徽章:
0
2 [报告]
发表于 2013-02-01 11:39 |只看该作者
突然出现的Qemu是什么? 和kvm什么关系?

论坛徽章:
4
酉鸡
日期:2014-03-21 23:19:50狮子座
日期:2014-08-01 22:11:40酉鸡
日期:2015-01-10 21:31:442015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2013-02-03 11:26 |只看该作者

没研究过。。。

奇怪,本版没有虚拟化的子板块?

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
4 [报告]
发表于 2013-02-03 16:04 |只看该作者
回复 2# thomasnew


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


   

论坛徽章:
0
5 [报告]
发表于 2013-02-04 10:06 |只看该作者
回复 4# embeddedlwp
呵呵,我意思是文中描述突然出现了这个词,看的人有点突然,应该稍微解释一下。

   

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
6 [报告]
发表于 2013-02-04 10:26 |只看该作者
虚拟就是概念的抽象。

论坛徽章:
0
7 [报告]
发表于 2013-02-20 05:00 |只看该作者
回复 3# chishanmingshen


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

    qemu是模拟器。运行在用户空间。他可以不需要kvm就可以启动虚拟机。

论坛徽章:
0
8 [报告]
发表于 2013-04-01 23:27 |只看该作者
比如产生缺页错误,或者设备I/O,则guest OS产生VM Exit退出到KVM中,然后KVM再根据退出的原因,决定是由自己来处理还是交给Qemu。
----------------------------------------------
我看了一个图,QEMU是用户态的一段程序(KVM-QEMU结构中,KVM在用户态实际上是QEMU代码的一个子集)。KVM发现用了特权指令是敏感指令,那由CPU处理;如果这些敏感指令不是敏感指令,就要使用陷入等方法了。

论坛徽章:
0
9 [报告]
发表于 2013-04-02 11:38 |只看该作者
QEMU 应该是完整的实现了吧。

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

论坛徽章:
0
10 [报告]
发表于 2013-04-13 11:20 |只看该作者
qemu的主要作用应该是提供KVM的I/O子系统虚拟化的功能。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP