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. poj 2406 Power Strings(kmp求一个串的重复子串)

    题意:重复子串次数 思路:kmp #include<iostream> #include<stdio.h> #include<string.h> using nam ...

  2. Python机器视觉编程常用数据结构与示例

    本文总结了使用Python进行机器视觉(图像处理)编程时常用的数据结构,主要包括以下内容: 数据结构 通用序列操作:索引(indexing).分片(slicing).加(adding).乘(multi ...

  3. 使用GAC加速 解决CSP问题 Kakuro - Cross Sums

    Kakuro - Cross Sums 问题如下 一个简单的例子 可以看出限制条件是某行或某列的某几个空白格子求和等于某个值,且每一个限制中的格子所填的数必须为1-9且互异. 直接暴力搜索,空白格子太 ...

  4. 如何在单独的窗口中打开 Excel 文件

    如何在单独的窗口中打开 Excel 文件 文章编号:087583     2012/11/1 18:45:29 故障现象: 如何在单独的窗口中打开 Excel 文件? 解决方案: 比较安全的方法就是直 ...

  5. RDA TDT & TOT

    首先看下面的TS PSI分析图: 注意:TOT UTC与TDT是一致的 TDT下的时间为: UTC+手动TIMEZONE TOT下的时间为: UTC+解析的time_offset time_offes ...

  6. 使用slot分发内容

    为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件的模板.这个过程被称为 内容分发 使用特殊的<slot>元素作为原始内容的插槽 除非子组件模板包含至少一个<slot&g ...

  7. 伪元素 first-letter

    ::after, ::before, ::backdrop, ::first-letter,::first-line, ::selection(css3)是伪元素, :active, :focus,  ...

  8. centos7更改远程端口

    centos7更改远程端口 一.创建个普通账户(useradd work),给普通账户创建密码(password work) 二.查看应有的软件是否安装 1.查看semanager是否安装执行下面命令 ...

  9. Python-day-9- RabbitMQ队列

    RabbitMQ队列 安装 http://www.rabbitmq.com/install-standalone-mac.html 安装python rabbitMQ module pip insta ...

  10. eclipse快捷键设置

    文章斋词水电费 55 48 Eclipse中10个最有用的快捷键组合  一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开 ...