zoukankan      html  css  js  c++  java
  • 微软虚拟化技术构建高效开发与测试环境(四)

    这篇文章可能有一点技术难度,大家要是阅读有困难可以直接联系我,我会讲得更加详细一些。我写这一章节的主要原因是我被很多人问道为什么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带来的隔离性问题。

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

  • 相关阅读:
    c语言结构体数组引用
    c语言结构体数组定义的三种方式
    如何为SAP WebIDE开发扩展(Extension),并部署到SAP云平台上
    SAP SRM ABAP Webdynpro和CFCA usb key集成的一个原型开发
    使用SAP API portal进行SAP SuccessFactors的API测试
    SAP UI5应用里的页面路由处理
    在SAP WebIDE Database Explorer里操作hdi实例
    如何使用SAP事务码SAT进行UI应用的性能分析
    使用SAP WebIDE进行SAP Cloud Platform Business Application开发
    SAP CRM WebClient UI ON_NEW_FOCUS的用途
  • 原文地址:https://www.cnblogs.com/zouyuntao/p/1430377.html
Copyright © 2011-2022 走看看