【转】虚拟化os in os中ring与vm关系

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://heliy.blog.51cto.com/434250/261416
软件虚拟化主要的问题是性能和隔离性。Full Virtualization完全虚拟化技术可以提供较好的客户操作系统独立性,不过其性能不高,在不同的应用下,可以消耗掉主机10%~30%的资源。而OS Virtualization可以提供良好的性能,然而各个客户操作系统之间的独立性并不强。无论是何种软件方法,隔离性都是由Hypervisor软件提供的,过多的隔离必然会导致性能的下降。
这些问题主要跟x86设计时就没有考虑虚拟化有关。我们先来看看x86处理器的Privilege特权等级设计。
*


x86架构为了保护指令的运行,提供了指令的4个不同Privilege特权级别,术语称为Ring,从Ring 0~Ring 3。Ring 0的优先级最高,Ring 3最低。各个级别对可以运行的指令有所限制,例如,GDT,IDT,LDT,TSS等这些指令就只能运行于Privilege 0,也就是Ring 0。要注意Ring/Privilege级别和我们通常认知的进程在操作系统中的优先级并不同。

操作系统必须要运行一些Privilege 0的特权指令,因此Ring 0是被用于运行操作系统内核,Ring 1和Ring 2是用于操作系统服务,Ring 3则是用于应用程序。然而实际上并没有必要用完4个不同的等级,一般的操作系统实现都仅仅使用了两个等级,即Ring 0和Ring 3,如图所示:

*


也就是说,在一个常规的x86操作系统中,系统内核必须运行于Ring 0,而VMM软件以及其管理下的Guest OS却不能运行于Ring 0——因为那样就无法对所有虚拟机进行有效的管理,就像以往的协同式多任务操作系统(如,Windows 3.1)无法保证系统的稳健运行一样。在没有处理器辅助的虚拟化情况下,挑战就是采用Ring 0之外的等级来运行VMM (Virtual Machine Monitor,虚拟机监视器)或Hypervisor,以及Guest OS。

现在流行的解决方法是Ring Deprivileging(暂时译为特权等级下降),并具有两种选择:客户OS运行于Privilege 1(0/1/3模型),或者Privilege 3(0/3/3模型)。

无论是哪一种模型,客户OS都无法运行于Privilege 0,这样,如GDT,IDT,LDT,TSS这些特权指令就必须通过模拟的方式来运行,这会带来很明显的性能问题。特别是在负荷沉重、这些指令被大量执行的时候。

同时,这些特权指令是真正的“特权”,隔离不当可以严重威胁到其他客户OS,甚至主机OS。Ring Deprivileging技术使用IA32架构的Segment Limit(限制分段)和Paging(分页)来隔离VMM和Guest OS,不幸的是EM64T的64bit模式并不支持Segment Limit模式,要想运行64bit操作系统,就必须使用Paging模式。

对于虚拟化而言,使用Paging模式的一个致命之处是它不区分Privileg 0/1/2模式,因此客户机运行于Privileg 3就成为了必然(0/3/3模型),这样Paging模式才可以将主机OS和客户OS隔离开来,然而在同一个Privileg模式下的不同应用程序(如, 不同的虚拟机)是无法受到Privileg机构保护的,这就是目前IA32带来的隔离性问题,这个问题被称为Ring Compression

*


IA32不支持VT,就无法虚拟64-bit客户操作系统

这个问题的实际表现是:VMware在不支持Intel VT的IA32架构CPU上无法虚拟64-bit客户操作系统,因为无法在客户OS之间安全地隔离。

为了解决IA32架构采用Ring等级带来的虚拟化难题,Intel VT就是为此而生!

作为一个芯片辅助(Chip-Assisted)的虚拟化技术,VT可以同时提升虚拟化效率和虚拟机的安全性。IA32上的VT技术,一般称之为VT-x,而在Itanium平台上的VT技术,被称之为VT-i。

VT-x介绍:

VT-x将IA32的CU操作扩展为两个forms(窗体):VMX root operation(根虚拟化操作)和VMX non-root operation(非根虚拟化操作),VMX root operation设计来供给VMM/Hypervisor使用,其行为跟传统的IA32并无特别不同,而VMX non-root operation则是另一个处在VMM控制之下的IA32环境。所有的forms都能支持所有的四个Privileges levels,这样在VMX non-root operation环境下运行的虚拟机就能完全地利用Privilege 0等级。

*


两个世界:VMX non-root和VMX root

和一些文章认为的很不相同,VT同时为VMM和Guest OS提供了所有的Privilege运行等级,而不是只让它们分别占据一个等级:因为VMM和Guest OS运行于不同的两个forms。

由此,GDT、IDT、LDT、TSS等这些指令就能正常地运行于虚拟机内部了,而在以往,这些特权指令需要模拟运行。而VMM也能从模拟运行特权指令当中解放出来,这样既能解决Ring Aliasing问题(软件运行的实际Ring与设计运行的Ring不相同带来的问题),又能解决Ring Compression问题,从而大大地提升运行效率。Ring Compression问题的解决,也就解决了64bit客户操作系统的运行问题。

为了建立这种两个虚拟化窗体的架构,VT-x设计了一个Virtual-Machine Control Structure(VMCS,虚拟机控制结构)的数据结构,包括了Guest-State Area(客户状态区)和Host-State Area(主机状态区),用来保存虚拟机以及主机的各种状态参数,并提供了VM entry和VM exit两种操作在虚拟机与VMM之间切换,用户可以通过在VMCS的VM-execution control fields里面指定在执行何种指令/发生何种事件的时候,VMX non-root operation环境下的虚拟机就执行VM exit,从而让VMM获得控制权,因此VT-x解决了虚拟机的隔离问题,又解决了性能问题。



Total views.

© 2013 - 2018. All rights reserved.

Powered by Hydejack v6.6.1