VMX(1) -- 简介
VMX(Virtual Machine Extension)是Intel 64和IA-32架构处理器级别的功能,用于支持虚拟化。VMX支持两种类型的软件:
- Virtual-machine monitor(VMM),VMM对处理器和平台硬件具有完全的控制权限。VMM为客户软件提供虚拟处理器的抽象,从而让客户软件能够直接在逻辑CPU上跑。
- 客户软件(Guest software)。每个虚拟机(VM)就是一个客户软件运行环境。
系统软件可以通过CPUID指令来判断处理器是否支持VMX,如果CPUID.1.ECX.VMX[bit5] = 1,那么当前处理器支持VMX,否则,当前处理器不支持VMX功能。
VMX包括两种VMX操作操作模式:
- VMX根操作(VMX root operation)模式,通常VMM将会在这种模式下运行;
- 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的步骤如下:
- 通过CPUID指令判断VMX功能是否被当前处理器支持;
- 如果当前处理器支持VMX功能,那么通过设置CR4.VMXE[bit13] = 1来打开VMX功能;
- 通过VMXON指令开启VMX功能,并且激活VMM;
- 在VMX中可以通过VM Entry和VM Exit来进入客户虚拟机或者返回到VMM中,即切换到VMX非根操作模式或者切换到VMX根操作模式,也可以利用此操作来切换运行的客户虚拟机;
- 通过VMXOFF来关闭VMX功能,从而终止VMX的操作。
VMX非根操作模式和VMX转换都由位于内存的VMCS(Virtual Machine Control Structure)数据结构控制,每个逻辑CPU都有一个包含指向VMCS指针的寄存器。VMCS指针通过VMPTRST和VMPTRLD指令来读和写,并且VMM可以通过VMREAD、VMWRITE和VMCLEAR指令来配置VMCS。
同时也欢迎关注同名微信公众号“河马虚拟化”第一时间获取最新文章。
VMX(1) -- 简介相关推荐
- 虚拟机扩展(VMX)简介
20.1 概述 这个章节描述虚拟机的基础架构和VMX支持处理器硬件虚拟化的多个软件环境的概述. 有关 VMX 指示的信息在 Intel(R) 64 和 IA-32 架构软件开发人员手册VMX的其 ...
- vSphere 7简介:混合云的功能和技术
vSphere 7简介:混合云的功能和技术 2020年3月10日,VMware 发布了vSphere 7,我很高兴终于能够描述为什么它是真正适用于混合云的技术! 正在上传-重新上传取消 带Kubern ...
- 转:vSphere 7简介:混合云的功能和技术
vSphere 7简介:混合云的功能和技术 2020年3月10日,VMware 发布了vSphere 7,我很高兴终于能够描述为什么它是真正适用于混合云的技术! 带Kubernetes的vSphere ...
- Linux简介与安装
文章目录 Linux简介 Linux简介 开源软件简介 Linux应用领域 Linux与Windows的不同 Linxu字符界面的优势 Linux系统安装 虚拟机安装 VMware的特点: 建议配置 ...
- 虚拟化技术的演变过程和KVM虚拟化的简介
主要介绍虚拟化技术的历史演进过程和KVM虚拟化的一些特点. 0.简介 虚拟化技术的演变过程可以分为软件模拟.虚拟化层翻译.容器虚拟化三个大的阶段.其中,虚拟化层翻译又可以分为:软件捕获翻译(软件全虚拟 ...
- KVM虚拟化工具简介及安装
1. KVM简介 Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux2.6.20之后集成在Linux的各个主要发行版本中.它使用Linux自身的调 ...
- 《服务器(CentOS7.7)深度学习环境搭建、配置及使用》之一:服务器情况简介
Author kangzhiheng E-mail kangzhiheng@sjtu.edu.cn 本文链接 Github:https://github.com/kangzhiheng/GitLoca ...
- etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理
1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...
- Docker学习(一)-----Docker简介与安装
一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...
最新文章
- SQL Server游标的使用【转】
- Ubuntu11.10配置Eclipse下Android开发环境
- 腾讯旗下网站的很多URL都包含“cgi-bin”,是什么意思?他们后台用什么语言?...
- 音频光端机简单故障处理
- 前端学习(2608):vuex的介绍
- LeetCode 1338. 数组大小减半
- Ubuntu下libvirt kvm配置
- NBA球队球员介绍1
- 多伦多大学计算机专音乐专业,多伦多大学音乐专业有哪些申请要求?
- 拓端tecdat|R语言、SAS潜类别(分类)轨迹模型LCTM分析体重指数 (BMI)数据可视化
- 12-8下午 php语法
- oracle11g教程视频教程,最新oracle11g DBA 开发和应用数据库视频教程_IT教程网
- 常用的开源3D游戏引擎(转)
- ssr的pac中加入学校图书馆数据库访问pac
- python万能装饰器_python装饰器万能模板
- 如何在SSH项目中布置多个定时任务?
- 解决windows server 2012R2操作系统激活报错0xc000022
- wps和office哪个好用 wps和office兼容吗
- Stata:时变Granger因果检验
- 微信小程序源代码_移动端商城(微信小程序)