Intel手册 Chapter23 VMX的简单介绍
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的简单介绍的更多相关文章
- windows集群简单介绍
windows集群简单介绍仔细看过以前网友发表的一些文章,总觉得对windows集群没有详细介绍,我也是借花献佛,引用了一些技术性文档.目前应用最为广泛的集群计算技术可以分为三大类:高可用性集群技术. ...
- MPI编程简单介绍
第三章MPI编程 3.1 MPI简单介绍 多线程是一种便捷的模型,当中每一个线程都能够訪问其他线程的存储空间.因此,这样的模型仅仅能在共享存储系统之间移植.一般来讲,并行机不一定在各处理器之间共享存储 ...
- [freemarker篇]04.简单介绍-基本数据类型
好几天没有更新博客了,最近一顿乱七八糟的忙!今天简单更新第四章,这里只能说是简单介绍,因为权威的还是需要看Freemarker的官方中文手册! 好几天没有更新博客了,最近一顿乱七八糟的忙!今天简单更新 ...
- Android发展简单介绍
Android一词的本义指“机器人”,同一时候也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统.中间件.用户界面和应用软件组成,号称是首个为移动 ...
- OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)
PS. 因为csdn博客文章长度有限制,本文有部分内容被截掉了.在OpenCV中文站点的wiki上有可读性更好.而且是完整的版本号,欢迎浏览. OpenCV Wiki :<OpenCV 编程简单 ...
- 【浅墨著作】《OpenCV3编程入门》内容简单介绍&勘误&配套源码下载
经过近一年的沉淀和总结,<OpenCV3编程入门>一书最终和大家见面了. 近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容.事实上近 ...
- Docker系列之原理简单介绍
目录 1.1.Docker架构简介 1.2.Docker 两个主要部件 1.3.虚拟机和Docker对比: 1.4.Docker内部结构 Docker系列之原理简单介绍 @ Docker是一个开源的应 ...
- [原创]关于mybatis中一级缓存和二级缓存的简单介绍
关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...
随机推荐
- 百度地图API--信息窗口
信息窗口 -----纯文本信息窗口 为了更方便的提示用户,在地图的指定的地方添加文本信息的窗口,给用户直观展示信息,下面是如何添加一个纯文本的信息窗口. 下面是添加一个文本窗口: /* * 添加纯文本 ...
- 使用masonry手写约束
在iOS开发过程中,手写contraints是非常痛苦的一件事情,往往那么一丢丢功能要写大量的代码,非常容易发生错误,并且非常不方便调试.所以只有在不得以的情况下才采用手工方式写contraints, ...
- Flask app.config 的配置
原理如下: image.png 1.通过调用自定义config.py文件中config字典,可以得到一个类, 这个类里面定义的都是类变量,这些变量就是自定义的一些配置项. 如下config.py ...
- python3练习题四
循环 题目: 答案: #!/usr/bin/env python3 #-*- coding:utf-8 -*- L = ['Bart', 'Lisa', 'Adam'] for i in L: pri ...
- Hibernate 4.3.7 可编程方式+注解
1.复制jar文件到lib antlr-2.7.7.jardbmysql.jardboracle.jardbsqljdbc2005.jardom4j-1.6.1.jarhibernate-common ...
- 3、HTML的body内标签1
一.特殊符号的表示 #代指空格 < #代指,< > #代指,> ...... #这玩意有很多,记也记不完,用的时候查一下即可: 二.p和br标签 <p>< ...
- CentOS Linux自动备份MySQL数据库到远程FTP服务器并删除指定日期前的备份Shell脚本
说明: 我这里要把MySQL数据库存放目录/var/lib/mysql下面的pw85数据库备份到/home/mysql_data里面,并且保存为mysqldata_bak_2011_11_03.tar ...
- 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时2
课时2 计算机视觉历史回顾与介绍中 1966年是计算机视觉的诞生年. 视觉处理流程的第一步,是对简单的形状结构处理,边缘排列. 边缘决定了结构. David Marr写了一本非常有影响力的书,视觉是分 ...
- 所读STL文章摘要集结
在网上看了一些STL相关文章,这里将它们的摘要进行集结,方便以后查找. 1.黄常标,林俊义,江开勇.快速成形中STL文件拓扑信息的快速建立.2004 摘要:在分析现有建立拓扑信息方法的基础上,提出基于 ...
- (水题)Codeforces - 327C - Magic Five
https://codeforces.com/problemset/problem/327/C 因为答案可以有前导零,所以0和5一视同仁.每个小节内,以排在第 $i$ 个的5为结尾的序列即为在前面 $ ...