vmx是x86硬件虚拟化层,从代码看,qemu用户态是一层,kernel中KVM通用代码是一层,类似kvm_x86_ops是一层,针对各个不同的硬件架构,而vcpu_vmx则是具体架构的虚拟化方案一层。
 
在执行vm entry时候将vmm状态保存到vmcs的host area,并加载对应vm的vmcs guest area信息到CPU中,vm exit时候则反之,vmcs具体结构分配由硬件实现,程序员只需要通过VMWRITE和VMREAD指令去访问
 
在kvm_main.c文件中
创建VM,涉及函数kvm_dev_ioctl_create_vm
该函数中的kvm_create_vm主要有两个函数kvm_arch_init_vm和hardware_enable_all用于初始化虚拟机和对硬件配置的检测(个人理解)
kvm_arch_init_vm:初始化KVM_arch,更新kvmclock
 
结构体kvm_x86_ops定义在kvm_host.h头文件中,在头文件中定义了关于x86体系结构的kvm相关接口,结构体kvm_x86_ops的成员是一些函数指针变量,这些指针变量在svm.c中被赋值
 
debugfs是一种用于内核调试的虚拟文件系统,通过其与用户空间交换数据
 
由于GPA不能直接用于MMU寻址,需要将其转换为HVA,在kvm中利用kvm_memory_slot数据结构记录每一个地址区间(Guest中的物理地址区间)中GPA与HVA的映射关系

kvm内核模块是作为一个设备驱动程序安装的,名称为/dev/kvm,要使用kvm,需要先用open打开/dev/kvm设备 ,得到kvm设备文件描述符fd,然后利用此fd调用ioctl向设备驱动发送命令,kvm驱动解析此种请求的函数是kvm_dev_ioctl(kvm_main.c),如KVM_CREATE_VM。其次是具体的VM。通过KVM_CREATE_VM创建了一个VM后,用户程序需要发送一些命令给VM,如KVM_CREATE_VCPU。这些命令当然也是要通过ioctl来发送,所以VM也需要对应一个文件描述符才行。用户程序中用ioctl发送KVM_CREATE_VM得到的返回值就是新创建VM对应的fd,之后利用此fd发送命令给此VM。kvm驱动解析此种请求的函数是kvm_vm_ioctl。

kvm源代码分析的更多相关文章

  1. android-plugmgr源代码分析

    android-plugmgr是一个Android插件加载框架,它最大的特点就是对插件不需要进行任何约束.关于这个类库的介绍见作者博客,市面上也有一些插件加载框架,但是感觉没有这个好.在这篇文章中,我 ...

  2. Twitter Storm源代码分析之ZooKeeper中的目录结构

    徐明明博客:Twitter Storm源代码分析之ZooKeeper中的目录结构 我们知道Twitter Storm的所有的状态信息都是保存在Zookeeper里面,nimbus通过在zookeepe ...

  3. 转:SDL2源代码分析

    1:初始化(SDL_Init()) SDL简介 有关SDL的简介在<最简单的视音频播放示例7:SDL2播放RGB/YUV>以及<最简单的视音频播放示例9:SDL2播放PCM>中 ...

  4. 转:RTMPDump源代码分析

    0: 主要函数调用分析 rtmpdump 是一个用来处理 RTMP 流媒体的开源工具包,支持 rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://. ...

  5. 转:ffdshow 源代码分析

    ffdshow神奇的功能:视频播放时显示运动矢量和QP FFDShow可以称得上是全能的解码.编码器.最初FFDShow只是mpeg视频解码器,不过现在他能做到的远不止于此.它能够解码的视频格式已经远 ...

  6. UiAutomator源代码分析之UiAutomatorBridge框架

    上一篇文章<UIAutomator源代码分析之启动和执行>我们描写叙述了uitautomator从命令行执行到载入測试用例执行測试的整个流程.过程中我们也描写叙述了UiAutomatorB ...

  7. MyBatis架构设计及源代码分析系列(一):MyBatis架构

    如果不太熟悉MyBatis使用的请先参见MyBatis官方文档,这对理解其架构设计和源码分析有很大好处. 一.概述 MyBatis并不是一个完整的ORM框架,其官方首页是这么介绍自己 The MyBa ...

  8. hostapd源代码分析(三):管理帧的收发和处理

    hostapd源代码分析(三):管理帧的收发和处理 原文链接:http://blog.csdn.net/qq_21949217/article/details/46004379 这篇文章我来讲解一下h ...

  9. hostapd源代码分析(二):hostapd的工作机制

    [转]hostapd源代码分析(二):hostapd的工作机制 原文链接:http://blog.csdn.net/qq_21949217/article/details/46004433 在我的上一 ...

随机推荐

  1. QSS 的选择器

    本文连接地址:http://www.qtdebug.com/QSS-Selector.html 选择器决定了 style sheet 作用于哪些 Widget,QSS 支持 CSS2 定义的所有选择器 ...

  2. 在阿里云上遇见更好的Oracle(三)

    鬼扯完“去IOE”,继续回来说说这个系列文章的主角Oracle. 在DB-Engine的数据库排行榜中,Oracle已经占据了多年的第一(最新排名可以点击“阅读原文”).当然因为互联网行业的兴起,My ...

  3. TensorFlow 调用预训练好的模型—— Python 实现

    1. 准备预训练好的模型 TensorFlow 预训练好的模型被保存为以下四个文件 data 文件是训练好的参数值,meta 文件是定义的神经网络图,checkpoint 文件是所有模型的保存路径,如 ...

  4. POJ 2168 Joke with Turtles(DP)

    Description There is a famous joke-riddle for children: Three turtles are crawling along a road. One ...

  5. Linux---CentOS 定时执行脚本配置

    非常多时候我们有希望server定时去运行一个脚本来触发一个操作.比方使用七牛的工具上传,假设同步文件中面有新添加一个文件,这个时候我们能够提供定时脚本去完毕我们须要的同步命令(七牛的qrsbox工具 ...

  6. JavaSE复习(三)异常与多线程

    异常 分类 编译时期异常:checked异常. 在编译时期,就会检查,如果没有处理异常,则编译失败.(如日期格式化异常) 运行时期异常:runtime异常. 在运行时期,检查异常.在编译时期,运行异常 ...

  7. JavaSE复习(二)集合

    Collection List(存取有序,有索引,可以重复) ArrayList 底层是数组实现的,线程不安全,查找和修改快,增和删比较慢 LinkedList 底层是链表实现的,线程不安全,增和删比 ...

  8. Good Time 冲刺 三

    第三天 日期:2018.6.16 一.今日完成任务情况及遇到的问题 王怡镔:继续在学习微信小程序的设计,完善设计发现页面,开始编写发现页面 于鑫宇:配合黄鹤的工作,学习端口相关知 胡雅馨:继续改进优化 ...

  9. jetty maven插件

    <plugins>   <plugin>    <groupId>org.eclipse.jetty</groupId>    <artifact ...

  10. 【历史】- 一段关于 Unix、Linux 和 Windows 的暗黑史

    “SCO在言语上变得越来越好斗,而且还拒绝展示有关诉讼的任何证据,一切都似乎在表明,SCO只不过是在那里拉虎皮做大旗地狂言乱语.但是,微软决不会轻易放弃这么可以一个利用这些狂言乱语的好机会.”2003 ...