什么是“计算虚拟化” CPU虚拟化简介.doc

上传人:白大夫 文档编号:3373831 上传时间:2019-08-19 格式:DOC 页数:4 大小:20.50KB
返回 下载 相关 举报
什么是“计算虚拟化” CPU虚拟化简介.doc_第1页
第1页 / 共4页
亲,该文档总共4页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《什么是“计算虚拟化” CPU虚拟化简介.doc》由会员分享,可在线阅读,更多相关《什么是“计算虚拟化” CPU虚拟化简介.doc(4页珍藏版)》请在三一文库上搜索。

1、什么是“计算虚拟化” CPU虚拟化简介针对不同的资源,虚拟化主要包含三个方面的内容:计算虚拟化、存储虚拟化和网络虚拟化,接下来咱们就分别详细介绍这三类资源的虚拟化手段和技术。今天主要聊虚拟化中的计算虚拟化,也就是主要针对 CPU 的虚拟化。(3)模式转换 VM exit,运行 VMMGuest OS 运行过程中遇到需要 VMM 处理的事件,例如外部中断或缺页异常,或者主动调用 VMCALL 指令调用 VMM 的服务的时候(与系统调用类似),硬件自动挂起 Guest OS,切换到 VMX root operation 模式,恢复 VMM 的运行,这种转换称为 VM exit。VMX root o

2、peration 模式下,软件的行为与在没有 VT-x 技术的处理器上的行为基本一致;而 VMX non-root operation 模式则有很大不同,最主要的区别是此时运行某些指令或遇到某些事件时,发生 VM exit。(4) VMM 的生命周期VMM 开始于 VMXON 指令,结束与 VMXOFF 指令。第一次启动 Guest,通过 VMLAUNCH 指令加载 Guest,这时候一切都是新的,比如说起始的 rip 寄存器等。后续 Guest exit 后再 entry,是通过 VMRESUME 指令,此指令会将VMCS(后面会介绍到)所指向的内容加载到当前 Guest 的上下文,以便 G

3、uest 继续执行。(5)虚拟机控制块 VMCS(Virtual-Machine control structure)VMCS 是一个 64 位的指针,指向一个真实的内存地址,VMCS 是以 vCPU 为单位的,就是说当前有多少个 vCPU,就有多少个 VMCS 指针。VMM 和 Guest OS 共享底层的处理器资源,因此硬件需要一个物理内存区域来自动保存或恢复彼此执行的上下文。这个区域称为虚拟机控制块(VMCS),包括客户机状态区(Guest State Area),主机状态区(Host State Area)和执行控制区。VM entry 时,硬件自动从客户机状态区加载 Guest OS

4、 的上下文。并不需要保存 VMM 的上下文,原因与中断处理程序类似,因为 VMM 如果开始运行,就不会受到 Guest OS的干扰,只有 VMM 将工作彻底处理完毕才可能自行切换到 Guest OS。而 VMM 的下次运行必然是处理一个新的事件,因此每次 VMM entry 时, VMM 都从一个通用事件处理函数开始执行;VM exit 时,硬件自动将 Guest OS 的上下文保存在客户机状态区,从主机状态区中加载 VMM 的通用事件处理函数的地址,VMM 开始执行。而执行控制区存放的则是可以操控 VM entry 和 exit 的标志位,例如标记哪些事件可以导致 VM exit,VM en

5、try 时准备自动给 Guest OS 塞入哪种中断等等。(6)VMCS 中的客户机状态区和主机状态区客户机状态区和主机状态区都应该包含部分物理寄存器的信息,例如控制寄存器 CR0,CR3,CR4;ESP(ESP 寄存器里存储的是在调用函数 fun() 之后,栈的栈顶。并且始终指向栈顶,还有一个 EBP 寄存器,存储的是栈的栈底指针,通常叫栈基址,这个是一开始进行 fun() 函数调用之前,由 ESP 传递给 EBP 的) 和 EIP(EIP寄存器里存储的是 CPU 下次要执行的指令的地址)(如果处理器支持 64 位扩展,则为 RSP,RIP);CS,SS,DS,ES,FS,GS 等段寄存器及

6、其描述项;TR,GDTR,IDTR 寄存器;IA32_SYSENTER_CS,IA32_SYSENTER_ESP,IA32_SYSENTER_EIP 和 IA32_PERF_GLOBAL_CTRL 等 MSR 寄存器。客户机状态区并不包括通用寄存器的内容,VMM 自行决定是否在 VM exit 的时候保存它们,从而提高了系统性能。客户机状态区还包括非物理寄存器的内容,比如一个 32 位的 Active State 值表明 Guest OS 执行时处理器所处的活跃状态,如果正常执行指令就是处于 Active 状态,如果触发了三重故障(Triple Fault)或其它严重错误就处于 Shutdow

7、n 状态,等等。前文已经提过,执行控制区用于存放可以操控 VM entry 和 VM exit 的标志位,包括:External-interrupt exiting:用于设置是否外部中断可以触发 VM exit,而不论 Guest OS 是否屏蔽了中断。(7)Interrupt-window exiting:如果设置,当 Guest OS 解除中断屏蔽时,触发 VM exit。(8)Use TPR shadow:通过 CR8 访问 Task Priority Register(TPR 任务优先级寄存器)的时候,使用 VMCS 中的影子 TPR,可以避免触发 VM exit。同时执行控制区还有一

8、个 TPR 阈值的设置,只有当 Guest OS 设置的 TR 值小于该阈值时,才触发 VM exit。(9)CR masks and shadows:每个控制寄存器的每一位都有对应的掩码,控制 Guest OS 是否可以直接写相应的位,或是触发 VM exit。同时 VMCS 中包括影子控制寄存器,Guest OS 读取控制寄存器时,硬件将影子控制寄存器的值返回给 Guest OS。(10)位图 bitmap:VMCS 还包括一组位图以提供更好的适应性:Exception bitmap:选择哪些异常可以触发 VM exit,I/O bitmap:对哪些 16 位的 I/O 端口的访问触发 V

9、M exit。MSR bitmaps:与控制寄存器掩码相似,每个 MSR 寄存器都有一组读的位图掩码和一组写的位图掩码。每次发生 VM exit 时,硬件自动在 VMCS 中存入丰富的信息,方便 VMM 甄别事件的种类和原因。VM entry 时,VMM 可以方便地为 Guest OS 注入事件(中断和异常),因为 VMCS 中存有 Guest OS 的中断描述表(IDT)的地址,因此硬件能够自动地调用 Guest OS 的处理程序。硬件辅助技术的出现,使得 VMM 和 Guest OS 的执行通过硬件,自动隔离开来,任何关键的事件都可以将系统控制权自动转移到 VMM,因此 VMM 能够完全控

10、制系统的全部资源。Guest OS 不但可以运行在它所期望的最高特权级别,因此特权级压缩和特权级别名的问题迎刃而解,而且 Guest OS 中的系统调用也不会触发 VM exit。硬件使用物理地址访问虚拟机控制块(VMCS),而 VMCS 保存了 VMM 和 Guest OS 各自的 IDTR 和 CR3 寄存器,因此 VMM 可以拥有独立的地址空间,Guest OS 能够完全控制自己的地址空间,地址空间压缩的问题也不存在了。中断和异常虚拟化的问题也得到了很好的解决。VMM 只用简单地设置需要转发的虚拟中断或异常,在 VM entry 时,硬件自动调用 Guest OS 的中断和异常处理程序,

11、大大简化 VMM 的设计。同时,Guest OS 对中断的屏蔽及解除可以不触发 VM exit,从而提高了性能。而且 VMM 还可以设置当 Guest OS 解除中断屏蔽时触发 VM exit,因此能够及时地转发积累的虚拟中断和异常。CPU 硬件辅助虚拟化其实又分成初代和二代,二代新增了 MMU(memory management unit)虚拟化,也就是 Intel EPT 和 AMD RVI,如果各位小伙伴有兴趣,可以登录到VMware、Citrix、Intel 与 AMD 网站查询更详细的相关信息。有了 CPU 硬件支持虚拟化技术之后,最大的好处就是不再需要以前 BinaryTranslation 或ParaVirtualization 的操作,虚拟化厂商再也不用费心在这里想办法解决问题,全虚拟化厂商的性能追上了半虚拟化厂商,半虚拟化厂商也可支持不修改内核的操作系统了(例如Windows 或绝大多数的 Linux )。CPU 虚拟化可以说是计算虚拟化最关键的核心,弄清楚了 VM Exit 和 VM Entry。后续的I/O 虚拟化,内存虚拟化都是建立在这个基础上。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1