(word完整版)Linux-KVM虚拟化源代码分析文档.doc 立即下载
2024-09-09
约1.5万字
约19页
0
2.4MB
举报 版权申诉
预览加载中,请您耐心等待几秒...

(word完整版)Linux-KVM虚拟化源代码分析文档.doc

(word完整版)Linux-KVM虚拟化源代码分析文档.doc

预览

免费试读已结束,剩余 14 页请下载文档后查看

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

(word完整版)LinuxKVM虚拟化源代码分析文档
(word完整版)LinuxKVM虚拟化源代码分析文档
(word完整版)LinuxKVM虚拟化源代码分析文档
KVM虚拟机源代码分析
KVM结构及工作原理
KVM结构
KVM基本结构有两部分组成。一个是KVMDriver,已经成为Linux内核的一个模块。负责虚拟机的创建,虚拟内存的分配,虚拟CPU寄存器的读写以及虚拟CPU的运行等.另外一个是稍微修改过的Qemu,用于模拟PC硬件的用户空间组件,提供I/O设备模型以及访问外设的途径。

图1KVM基本结构
KVM基本结构如图1所示。其中KVM加入到标准的Linux内核中,被组织成Linux中标准的字符设备(/dev/kvm)。Qemu通KVM提供的LibKvm应用程序接口,通过ioctl系统调用创建和运行虚拟机。KVMDriver使得整个Linux成为一个虚拟机监控器。并且在原有的Linux两种执行模式(内核模式和用户模式)的基础上,新增加了客户模式,客户模式拥有自己的内核模式和用户模式.在虚拟机运行下,三种模式的分工如下:
客户模式:执行非I/O的客户代码.虚拟机运行在客户模式下。
内核模式:实现到客户模式的切换。处理因为I/O或者其它指令引起的从客户模式的退出.KVMDriver工作在这种模式下.
用户模式:代表客户执行I/O指令Qemu运行在这种模式下.
在KVM模型中,每一个GuestOS都作为一个标准的Linux进程,可以使用Linux的进程管理指令管理.
在图1中。/dev/kvm在内核中创建的标准字符设备,通过ioctl系统调用来访问内核虚拟机,进行虚拟机的创建和初始化;kvm_vmfd是创建的指向特定虚拟机实例的文件描述符,通过这个文件描述符对特定虚拟机进行访问控制;kvm_vcpufd指向为虚拟机创建的虚拟处理器的文件描述符,通过该描述符使用ioctl系统调用设置和调度虚拟处理器的运行。
KVM工作原理
KVM的基本工作原理:用户模式的Qemu利用接口libkvm通过ioctl系统调用进入内核模式。KVMDriver为虚拟机创建虚拟内存和虚拟CPU后执行VMLAUCH指令进入客户模式。装载GuestOS执行.如果GuestOS发生外部中断或者影子页表缺页之类的事件,暂停GuestOS的执行,退出客户模式进行一些必要的处理。然后重新进入客户模式,执行客户代码。如果发生I/O事件或者信号队列中有信号到达,就会进入用户模式处理。KVM采用全虚拟化技术。客户机不用修改就可以运行。

图2KVM工作基本原理




,相关技术—处理器管理和硬件辅助虚拟化技术
Intel在2006年发布了硬件虚拟化技术.其中支持X86体系结构的称为IntelVT—x技术。ADM称为SVM技术。
VT-x引入了一种新的处理器操作,叫做VMX(VirtualMachineExtension),提供了两种处理器的工作环境。VMCS结构实现两种环境之间的切换。VMEntry使虚拟机进去客户模式,VMExit使虚拟机退出客户模式。
KVM中GuestOS的调度执行
VMM调度GuestOS执行时,Qemu通过ioctl系统调用进入内核模式,在KVMDriver中通过get_cpu获得当前物理CPU的引用。之后将Guest状态从VMCS中读出.并装入物理CPU中。执行VMLAUCH指令使得物理处理器进入非根操作环境,运行客户代码.
当GuestOS执行一些特权指令或者外部事件时,比如I/O访问,对控制寄存器的操作,MSR的读写数据包到达等.都会导致物理CPU发生VMExit,停止运行GuestOS.将GuestOS保存到VMCS中,Host状态装入物理处理器中,处理器进入根操作环境,KVM取得控制权,通过读取VMCS中VM_EXIT_REASON字段得到引起VMExit的原因。从而调用kvm_exit_handler处理函数。如果由于I/O获得信号到达,则退出到用户模式的Qemu处理。处理完毕后,重新进入客户模式运行虚拟CPU。如果是因为外部中断,则在LibKVM中做一些必要的处理,重新进入客户模式执行客户代码。
KVM中内存管理
KVM使用影子页表实现客户物理地址到主机物理地址的转换。初始为空,随着虚拟机页访问实效的增加,影子页表被逐渐建立起来,并随着客户机页表的更新而更新.在KVM中提供了一个哈希列表和哈希函数,以客户机页表项中的虚拟页号和该页表项所在页表的级别作为键值,通过该键值查询,如不为空,则表示该对应的影子页表项中的物理页号已经存在并且所指向的影子页表已经生成.如为空,则需新生成一张影子页表,KVM将获取指向该影子页表的主机物理页号填充到相应的影子页表项的内容中,同时以客户机页表虚拟页号和表所在的级别生成键值,在代表该键值的哈希
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

(word完整版)Linux-KVM虚拟化源代码分析文档

文档大小:2.4MB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用