微软虚拟化技术构建高效开发与测试环境(四)

这篇文章可能有一点技术难度,大家要是阅读有困难可以直接联系我,我会讲得更加详细一些。我写这一章节的主要原因是我被很多人问道为什么Hyper-V需要处理器必须支持AMD-V或者Intel VT技术。这个是不是说明Hyper-V有缺陷或者其他的问题。这里我讲一下,这个恰恰是Hyper-V强大的根本原理。

这里我分两个部分来解释,一个是现在流行的虚拟化解决原理,一个是Hyper-V的解决技术原理。

随着虚拟化技术的发展,虚拟化由早期的纯软件发展到了处理器级、平台级、输入/输出级虚拟化。代表就是Intel Virtualization Technology for Directed I/O,也是就Intel VT-d。20070830232015642

纯软件化的主要的问题是性能和隔离性。其主要原因是传统的X86的处理器架构为了保护指令的运行,提供了指令的4个不同Privilege特权级别,Ring0~Ring3,Ring0最高Ring3最低。这个和我们通常认识的操作系统中进程的优先级并不同。举例,GDT,IDT,LDT,TSS等这些指令是运行于Privilege0(Ring0)的。Ring0对应的是KERNAL,Ring1对应的SYSTEM SERVICES ,Ring2对应的是CUSTOM EXTENSIONS,Ring3对应的是APPLICATIONS,右图是一个操作系统的实现的示意图,极大多数的操作系统都只用到了Ring0和Ring3。这就带来了一个问题,x86操作系统内核是运行在Ring0,而对于VMM来说,他们在Ring3,如何在Ring0以外运行操作系统是一个大问题。当然了方法总是比问题多,现在比较流行的解决方式是Ring Deprivileging,有两种方式可以选择,客户OS运行于Privilege 1(0/1/3模型),或者Privilege 3(0/3/3模型)。如果有问题,大家可以去查阅一些相关的文档或给我email,这里我没有时间继续讲下去了。

至少到这里,我们知道为什么现在的虚拟机为什么在效率上有这么明显的问题。客户OS都无法真正的运行在Privilege0,GDT,IDT,LDT,TSS等这些只能运行于Privilege0的指令必须通过模拟的方式来运行,这消耗了大量的资源。性能还是可以忍受的问题,安全性就是一个致命的问题。由于我们在Ring3上模拟了Ring0的一些指令,如果我们隔离不当,他所影响的不仅仅是其他的客户OS,对主机操作系统都一种强大的威胁。

本来我努力的想使这篇文章简单和好理解,但是解释起来不断的在引入新的概念和名词,在这里希望大家谅解。接下来我们有谈到了隔离性的问题,Ring Deprivileging是使用IA32架构的Segment Limit(限制分段)和Paging(分页)来隔离的,但是64位操作系统却不支持Segment Limit,需要使用Paging模式,更可怕的是Paging模式不能区分Privilege0/1/2,他只能区分在Privilege3还是非Privilege3。为了把主操作系统和客户操作系统区分开来,我们只能把客户机运行到Privilege3。这样当我有多个客户虚拟机的时候,他们会在同一个Privilege3,Privileg是无法保护他们。这个就是传说中的Ring Compression——IA32带来的隔离性问题。

好了,讲到这里我们讲到一些传统技术的缺陷,大家估计看的也头晕了,我后面在继续好了。

原文地址:https://www.cnblogs.com/zouyuntao/p/1430377.html