- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
KVM基本工作原理
KVM源代码分析1:基本工作原理
下了很大决心挖这个坑,虽然之前对kvm有些了解,但纸上得来终觉浅,只有深入到代码层面,才能摈弃皮毛,看到血肉,看到真相。作为挖坑的奠基石,准备写上几篇:kvm基本工作原理、 HYPERLINK /rwsem-realtime-task-hung \o 读写信号量与实时进程阻塞挂死问题 \t _blank CPU调度原理、KVM内存管理、KVM存储管理、KVM设备管理。挖好之后进入正题。
所有的虚拟化都是两部分组成:虚拟机和宿主(HOST),虚拟机内运行正常的业务程序,HOST则正常运行虚拟机,此处的虚拟机则是KVM,负责在HOST里面虚拟化出独立的OS环境。 KVM属于完全虚拟化,功能组件上由两部分组成,KVM?Driver(内核态)和Qemu(用户态)。KVM?Driver负责模拟虚拟机的CPU运行, HYPERLINK /kernel-program-exec \o 从一次内存泄露看程序在内核中的执行过程 \t _blank 内存管理,设备管理等;Qemu则模拟虚拟机的IO设备接口以及用户态控制接口。
kvm-oenhan
如上图所示,Qemu在最上层,将虚拟机的整体呈现到host用户上,可以理解成客户模式;Qemu通过中间层libkvm或者ioctl等控制/dev/kvm设备接口,从而掌握内核态中kvm驱动进行的资源分配,即用户态模式;kvm驱动接收用户态操作指令,控制虚拟机在内核态的资源分配,称之为内核模式。在HOST里面,客户模式的体现就是一个虚拟机内部环境,用户态则是虚拟机进程。
oenhan_kvm
上图是一个执行过程图,首先启动一个虚拟化管理软件,开始启动一个虚拟机,通过ioctl等系统调用向内核中申请指定的资源,搭建好虚拟环境,启动虚拟机内的系统,虚拟机内的系统向内核反馈相关资源申请处理,如果是io请求,则提交给用户模式下的qemu处理,非io请求则将处理结果反馈给客户模式。
libkvm是qemu自己使用的用户态接口,可以把qemu源代码解开,里面有libkvm的函数库,不过并不对外呈现,虚拟机编程接口一般使用libvirt。
KVM的思想是在Linux内个的基础上添加虚拟机管理模块,重用Linux内核中已经完善的进程调度,内存管理,IO管理等部分,因此KVM并不是一个完整的模拟器,而只是一个提供虚拟化功能的内核插件,具体的模拟器工作是借助QEMU来完成的.?? 在Xen的体系结构中,Xen Hypervisor运行于硬件之上,并且将系统资源进行了虚拟化,将虚拟化的资源分配给上层的虚拟机(VM),然后通过虚拟机VM来运行相应的客户机操作系统.
? 在KVM中,一个虚拟机就是一个传统的Linux中的线程,拥有自己的PID号,也可以被kill系统调用直接杀死(在这种情况下,虚拟机的行为表现为突然断电).在一个Linux系统中,有多少个VM,就有多少个进程.如:
? 以上VM进程信息是通过qemu-kvm来进行的,相关的控制开关作为命名行参数输入,如虚拟映像对应的磁盘,虚拟网卡,VNC设置,显卡设置和IO设置等.
? KVM的API是通过/dev/kvm设备进行访问的./dev/kvm是一个字符型设备.
1root@ubuntu:~# ls -l /dev/kvm2crw-rw---- 1 root kvm 10, 232 Mar 14 14:20 /dev/kvm
? kvm仅仅是Linux内核的一个模块,管理和创建完整的KVM虚拟机,需要更多的辅助工具.1.qemu-Kvm:仅有KVM模块是远远不够的,因为用户无法直接控制内核模块去做事情,还必须有一个用户空间的工具。关于用户空间的工具,KVM 的开发者选择了已经成型的开源虚拟化软件 QEMU.QEMU 是一个强大的虚拟化软件,它可以虚拟不同的 CPU 构架.?运行在内核态的KVM模块通过/dev/kvm字符设备文件向外提供操作接口.KVM通过提供libkvm这个操作库,将/dev/kvm这一层面的ioctl类型的API转化成为通常意义上的函数API调用,提供给QEMU的相应适配层.??比如说在x86 的CPU上虚拟一个Power的CPU,并利用它编译出可运行在 Power上的程序.KVM使用了QEMU的基于x86的部分,并稍加改造,形成可控制KVM内核模块的用户空间工具QEMU-KVM.所以Linux发行版中分为kernel部分的KVM内核模块和QEMU-KVM工具.这就是KVM和QEMU 的关系.2.Libvirt,virsh,virt-manager:尽管QEMU-KVM工具可以创建和管理KVM虚拟机,RedHat为KVM开发了更多的辅助工具,比如 libvirt、libguestfs 等
您可能关注的文档
最近下载
- 《中国共产党纪律处分条例》六大纪律内容提纲(二).pdf VIP
- 电梯安全管理培训感想课件.pptx VIP
- 大载荷无人机应急救援系统技术要求.docx VIP
- 高考语文阅读专题散文阅读练习-(精品·课件).ppt VIP
- sap hanna studio自总结_hana创建用户.pdf VIP
- 系统性红斑狼疮疾病活动度评分表(SLEDAI-2000).docx VIP
- 豪恩汽电首次覆盖报告:智驾感知层国产龙头,新能源与出海打开成长空间.pdf
- 《机井井管标准》SL154-2013.pdf VIP
- 高考语文阅读专题:散文阅读.doc VIP
- 新教科版一年级上册科学《我们知道的植物》ppt教学课件.pptx VIP
文档评论(0)