VMX(Virtual Machine Extension)是Intel 64和IA-32架构处理器级别的功能,用于支持虚拟化。VMX支持两种类型的软件:

  1. Virtual-machine monitor(VMM),VMM对处理器和平台硬件具有完全的控制权限。VMM为客户软件提供虚拟处理器的抽象,从而让客户软件能够直接在逻辑CPU上跑。
  2. 客户软件(Guest software)。每个虚拟机(VM)就是一个客户软件运行环境。

系统软件可以通过CPUID指令来判断处理器是否支持VMX,如果CPUID.1.ECX.VMX[bit5] = 1,那么当前处理器支持VMX,否则,当前处理器不支持VMX功能。

VMX包括两种VMX操作操作模式:

  1. VMX根操作(VMX root operation)模式,通常VMM将会在这种模式下运行;
  2. VMX非根操作(VMX non-root operation),通常客户软件(虚拟机)将在这种环境下运行。

两种类型的操作之间的转换称作VMX转换,从根操作模式转换到非根操作模式称作VMX进入(VMX Entry),相反从非根操作模式转换到根操作模式称作VMX退出(VMX Exit)。

当处理器运行于VMX根操作模式的时候,它类似于运行在没有打开VMX功能的环境下,跟不打开VMX功能的主要区别是,在VMX根操作模式中,可以执行VMX相关指令,并且有某些制寄存器的写被限制了

当处理器运行于VMX非根操作模式的时候,处理器的某些行为被限制住或者被更改以便实现虚拟化,即某些指令或者事件会引起VM exits,从而让处理器从VMX非操作模式退出到根操作模式的VMM里,最终让VMM去模拟这些指令的行为从而实现虚拟化。

另外,VMX的两种操作模式和处理器的运行级别是正交的,即在VMX根操作模式或者VMX非根操作模式中,都有相应的从ring0 ~ ring3的运行级别,而且两种模式下的各种运行级别是相互独立的。

VMX功能尽量让软件不能从某个控制寄存器中得知当前自己正运行在VMX非特权模式下,这样就可以防止软件知道自己是否运行在一个虚拟机中。但是VMM其实是可以通过对某些指令的模拟,绕过这个机制的,比如在KVM中,KVM模块对CPUID指令的模拟,让虚拟机中执行CPUID指令的时候返回KVM相关的信息。

从最高层次来看处理器使用VMX的步骤如下:

  1. 通过CPUID指令判断VMX功能是否被当前处理器支持;
  2. 如果当前处理器支持VMX功能,那么通过设置CR4.VMXE[bit13] = 1来打开VMX功能;
  3. 通过VMXON指令开启VMX功能,并且激活VMM;
  4. 在VMX中可以通过VM Entry和VM Exit来进入客户虚拟机或者返回到VMM中,即切换到VMX非根操作模式或者切换到VMX根操作模式,也可以利用此操作来切换运行的客户虚拟机;
  5. 通过VMXOFF来关闭VMX功能,从而终止VMX的操作。

VMX非根操作模式和VMX转换都由位于内存的VMCS(Virtual Machine Control Structure)数据结构控制,每个逻辑CPU都有一个包含指向VMCS指针的寄存器。VMCS指针通过VMPTRST和VMPTRLD指令来读和写,并且VMM可以通过VMREAD、VMWRITE和VMCLEAR指令来配置VMCS。

同时也欢迎关注同名微信公众号“河马虚拟化”第一时间获取最新文章。

VMX(1) -- 简介相关推荐

  1. 虚拟机扩展(VMX)简介

    20.1    概述 这个章节描述虚拟机的基础架构和VMX支持处理器硬件虚拟化的多个软件环境的概述. 有关 VMX 指示的信息在 Intel(R) 64 和 IA-32 架构软件开发人员手册VMX的其 ...

  2. vSphere 7简介:混合云的功能和技术

    vSphere 7简介:混合云的功能和技术 2020年3月10日,VMware 发布了vSphere 7,我很高兴终于能够描述为什么它是真正适用于混合云的技术! 正在上传-重新上传取消 带Kubern ...

  3. 转:vSphere 7简介:混合云的功能和技术

    vSphere 7简介:混合云的功能和技术 2020年3月10日,VMware 发布了vSphere 7,我很高兴终于能够描述为什么它是真正适用于混合云的技术! 带Kubernetes的vSphere ...

  4. Linux简介与安装

    文章目录 Linux简介 Linux简介 开源软件简介 Linux应用领域 Linux与Windows的不同 Linxu字符界面的优势 Linux系统安装 虚拟机安装 VMware的特点: 建议配置 ...

  5. 虚拟化技术的演变过程和KVM虚拟化的简介

    主要介绍虚拟化技术的历史演进过程和KVM虚拟化的一些特点. 0.简介 虚拟化技术的演变过程可以分为软件模拟.虚拟化层翻译.容器虚拟化三个大的阶段.其中,虚拟化层翻译又可以分为:软件捕获翻译(软件全虚拟 ...

  6. KVM虚拟化工具简介及安装

    1. KVM简介 Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux2.6.20之后集成在Linux的各个主要发行版本中.它使用Linux自身的调 ...

  7. 《服务器(CentOS7.7)深度学习环境搭建、配置及使用》之一:服务器情况简介

    Author kangzhiheng E-mail kangzhiheng@sjtu.edu.cn 本文链接 Github:https://github.com/kangzhiheng/GitLoca ...

  8. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  9. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

最新文章

  1. SQL Server游标的使用【转】
  2. Ubuntu11.10配置Eclipse下Android开发环境
  3. 腾讯旗下网站的很多URL都包含“cgi-bin”,是什么意思?他们后台用什么语言?...
  4. 音频光端机简单故障处理
  5. 前端学习(2608):vuex的介绍
  6. LeetCode 1338. 数组大小减半
  7. Ubuntu下libvirt kvm配置
  8. NBA球队球员介绍1
  9. 多伦多大学计算机专音乐专业,多伦多大学音乐专业有哪些申请要求?
  10. 拓端tecdat|R语言、SAS潜类别(分类)轨迹模型LCTM分析体重指数 (BMI)数据可视化
  11. 12-8下午 php语法
  12. oracle11g教程视频教程,最新oracle11g DBA 开发和应用数据库视频教程_IT教程网
  13. 常用的开源3D游戏引擎(转)
  14. ssr的pac中加入学校图书馆数据库访问pac
  15. python万能装饰器_python装饰器万能模板
  16. 如何在SSH项目中布置多个定时任务?
  17. 解决windows server 2012R2操作系统激活报错0xc000022
  18. wps和office哪个好用 wps和office兼容吗
  19. Stata:时变Granger因果检验
  20. 微信小程序源代码_移动端商城(微信小程序)

热门文章

  1. 深度学习(Python)-- 神经网络的数学构建块
  2. JackHttp -- 浅谈编码、加密(对称加密,非对称加密,Hash算法)
  3. CAD常见问题之创建一个新的键盘快捷方式
  4. 微信的营销策略你了解多少?
  5. edge浏览器 路径获得
  6. UPC 2020年夏混合个人训练第五十场【DEG】
  7. echarts的学习(六)调色盘的学习
  8. bestCoder 百度之星程序设计资格赛 1005下棋
  9. day2-运算符和分支
  10. PyQt5实战之二维码生成器(一):基本界面设计