23.2  虚拟机架构

  1: VMX为处理器上的虚拟机定义了处理器级的支持。VMX主要支持两类,VMM和VM

  2:  VMM作为HOST可以完全控制处理器和其他平台硬件。 每个VM都支持一个栈,并且由OS和普通程序组成

23.3  VMX操作的介绍

  1: 处理器虚拟化是由VMX操作提供的,主要有两类VMX操作,VMX-ROOT操作和VMX-NON-ROOT操作,通常VMM运行在VMX-ROOT操作,VM运行在VMX-NON-ROOT操作

  2:  VMX-ROOT操作下与VMX操作外有很大不同,主要是在VMX-ROOT操作下,一组新的指令:VMX指令是有效的,并且可以加载进特定的控制器中

  3:  VMX-NON-ROOT模式下处理器行为受了限制,而且某些行为与原来的不同。因为特定的指令和事件会造成VM-EXIT,而且VM-EXIT替换了原来的行为

  4:  并没有软件标志位标识逻辑处理器是否运行在VMX-NON-ROOT模式下,因此这种情况下VMM可以不让客户机软件知道它运行在虚拟机中

  5:  因为VMM运行在R0上,客户机软件在原始特权级上运行,所以这有助于VMM的开发

23.4  VMM软件的生命周期

  1:  软件通过VMXON指令进入VMX操作

  2:  使用VMLAUNCH和VMRESUME指令,VMM可以进入到客户机 中,使用VM-EXIT恢复

  3:  VM-EXIT会转移到VMM指定的入口

  4:  VMM可以通过执行VMXOFF指令关闭它自己

23.5  虚拟机控制结构

  1:  VMX-NON-ROOT操作和VMX转移都由VMCS控制

  2:  处理器状态中的VMCS指针是用来控制对VMCS访问的,VMCS指针是个64位的地址,对VMCS指针的读写可以使用VMPTRST和VMPTRLD。 VMM通过VMREAD, VMWRITE和VMCLEAR来配置VMCS

  3:  一个VMM可以使用不同的VMCS针对每个虚拟机,对于有多个虚拟处理器的虚拟机,VMM可以使用不同的VMCS针对每个虚拟处理器

23.6  检查是否支持VMX

  1:  在进入VMX操作之前,必须检查处理器是否支持VMX,可以通过CPUID.1:ECX.VMX[BIT5] 来检测,如果为1,则代表支持

  2:  VMX结构设计为可扩展,以便于未来的处理器可以支持在第一代处理器架构中不存在的功能,软件可以使用VMX-MSR寄存器来得知扩展后VMX中新的功能  (see Appendix A, “VMX Capability Reporting Facility”)  
  

23.7  开启并且进入VMX操作

  1:  在软件进入VMX操作前,它开启VMX通过设置CR4.VMXE[bit13] = 1,然后通过VMXON指令进入

  2:  如果执行的时候,CR4.VMXE=0,则会发生UD异常(无效的操作码),一旦进入VMX操作中,就不能清除CR4.VMXE。只有执行VMXON指令离开VMX操作后,才能清除

  3:  VMXON指令也受IA32_FEATURE_CONTROL_MSR (3AH) 控制,虚拟处理器被重置的时候,这个MSR会被清零

  4:  Bit0是lock位,如果这个位为0,那么VMXON指令则会发生GP异常,如果这个位是1,对这个MSR进行WRMSR也会造成GP异常,这个MSR不会被修改,直到电源重启

  5:  系统BIOS可以使用这个位禁止对VMX的支持,为了开启对VMX的支持,BIOS必须设置Bit1   Bit2,或者这两个都置一

  6:  Bit1代表在SMX操作下执行VMXON,Bit2代表在SMX操作外执行VMXON,如果这两位是0,那么执行VMXON则会造成都会造成GP异常,在为0的情况下,强制这两个位为1,也会造成GP异常

  7:  在执行VMXON之前,软件应该分配一个4KB大小的内存用来支持VMX操作,这个区域被叫做VMXON区域,这个区域的地址就是VMXON指令的操作数

23.8  VMX操作中的限制

  1:  在VMX操作下,处理器可以将 CR0 和 CR4 中的某些位固定到特定的值, 而不支持其他的值。如果这些位中包含了不受支持的值,则VMXON失败 (看Chapter 30)

  2:  在VMX操作下,任何设置这些位到不受支持的值,都会造成GP异常,比如CLTS, LMSW, MOV CR指令

  3:  软件应该通过IA32_VMX_CR0_FIXED0和1    以及IA32_VMX_CR4_FIXD0和4来查询可以设置哪些只 (看附录A.7)

  4:  支持 VMX 操作的第一个处理器要求以下位在 VMX 操作中为 1: CR0.PE  CR0.NE  CR0.PG  CR4.VMXE

  5:  对CR0.PE和CR0.PG的限制,主要代表了VMX操作只能在分页保护模式下进行(保护IA3-2e),因此客户机不能允许在非分页保护模式或者实地址模式下

  6:  如果虚拟处理器在A20M模式下,VMXON也会失败。如果处理器在VMX操作下,A20中断将会被阻塞,因此,不可能既在A20M模式下,又在VMX模式下

  7:  无论什么时候,VMX-ROOT操作都会阻塞INIT信号,只有在VMX-NON-ROOT操作下才不会被阻塞,而且INIT还会造成VM-EXIT

总结:

  1: 本章所说的VMX操作模式是指VMX-ROOT和VMX-NON-ROOT模式下

  2:  Bios中的MSR.3A[Bit0]为0,CPUID.ECX:VMX[Bit5]为0, CR4.VMXE[Bit13]为0,都会造成VMXON失败,如果这三个条件都通过,VMXON仍然失败,此时就去Chapter30 查看VMXON指令的伪码

  

Intel手册 Chapter23 VMX的简单介绍的更多相关文章

  1. windows集群简单介绍

    windows集群简单介绍仔细看过以前网友发表的一些文章,总觉得对windows集群没有详细介绍,我也是借花献佛,引用了一些技术性文档.目前应用最为广泛的集群计算技术可以分为三大类:高可用性集群技术. ...

  2. MPI编程简单介绍

    第三章MPI编程 3.1 MPI简单介绍 多线程是一种便捷的模型,当中每一个线程都能够訪问其他线程的存储空间.因此,这样的模型仅仅能在共享存储系统之间移植.一般来讲,并行机不一定在各处理器之间共享存储 ...

  3. [freemarker篇]04.简单介绍-基本数据类型

    好几天没有更新博客了,最近一顿乱七八糟的忙!今天简单更新第四章,这里只能说是简单介绍,因为权威的还是需要看Freemarker的官方中文手册! 好几天没有更新博客了,最近一顿乱七八糟的忙!今天简单更新 ...

  4. Android发展简单介绍

    Android一词的本义指“机器人”,同一时候也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统.中间件.用户界面和应用软件组成,号称是首个为移动 ...

  5. OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)

    PS. 因为csdn博客文章长度有限制,本文有部分内容被截掉了.在OpenCV中文站点的wiki上有可读性更好.而且是完整的版本号,欢迎浏览. OpenCV Wiki :<OpenCV 编程简单 ...

  6. 【浅墨著作】《OpenCV3编程入门》内容简单介绍&amp;勘误&amp;配套源码下载

    经过近一年的沉淀和总结,<OpenCV3编程入门>一书最终和大家见面了. 近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容.事实上近 ...

  7. Docker系列之原理简单介绍

    目录 1.1.Docker架构简介 1.2.Docker 两个主要部件 1.3.虚拟机和Docker对比: 1.4.Docker内部结构 Docker系列之原理简单介绍 @ Docker是一个开源的应 ...

  8. [原创]关于mybatis中一级缓存和二级缓存的简单介绍

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

  9. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

随机推荐

  1. 利用百度地图API制作房产酒店地图

    摘要: 想亲手制作一张酷讯.去哪儿.安居客.链接地产那样的房产.酒店地图麼?那赶快来学习吧.(以酷讯为例,如下图) 更多成功案例请点击:http://dev.baidu.com/wiki/map/in ...

  2. 深入理解dispatch_sync

    关于GCD的基础知识,之前写过一篇博客,详见GCD基础知识.虽然之前已经梳理过了,但对很多知识点的理解仍然不够透彻…写这篇博客的原因是在阅读AFNetworking代码时遇到一些奇怪的代码. 如下: ...

  3. BZOJ_2443_[Usaco2011 Open]奇数度数 _并查集+树形DP

    BZOJ_2443_[Usaco2011 Open]奇数度数 _并查集. Description 奶牛们遭到了进攻!在他们的共和国里,有N(1 <= N <=50,000)个城市,由M(1 ...

  4. 【HDU 3613】Best Reward

    [题目链接] 点击打开链接 [算法] 正反两遍EXKMP,即可 [代码] #include<bits/stdc++.h> using namespace std; #define MAXC ...

  5. MYSQL数据库学习----MYSQL函数

    MYSQL函数分为几种 数学函数 字符串函数 日期和时间函数 条件判断函数 系统信息函数 加密函数 格式化函数 一:数学函数 主要使用的几个数学函数 1 ABS()----绝对值函数 eg. SELE ...

  6. 微信公众号开发及时获取当前用户Openid及注意事项

    目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 (四)微信公众号开发之网页授权获取用户基本信息 (五)微信公众号开发之网页中及 ...

  7. POJ1861 kruskal.

    #include <iostream> #include <stdio.h> #include <string.h> #include <stack> ...

  8. bzoj 1488: [HNOI2009]图的同构【polya定理+dfs】

    把连边和不连边看成黑白染色,然后就变成了 https://www.cnblogs.com/lokiii/p/10055629.html 这篇讲得好!https://blog.csdn.net/wzq_ ...

  9. 2.while循环 编码的初识,逻辑运算符 格式化输出

    while循环 循环 while True: # while 是关键字 条件 print('精忠报国') print('团结就是力量') print('北京欢迎你') print('葫芦爷爷救娃娃') ...

  10. 删除一个ppa

    https://itsfoss.com/how-to-remove-or-delete-ppas-quick-tip/ 总结如下: 1: 桌面删除,进入software & update,然后 ...