系统虚拟化的核心思想,是指用虚拟化技术将一台物理计算机系统虚拟化为一台或多台虚拟计算机系统。
一般来说,虚拟环境由三部分组成:硬件,VMM和虚拟机。在没有虚拟化的情况下,物理机操作系统直接运行在硬件之上,管理着底层物理硬件,构成了一个完整的计算机系统。当系统虚拟化之后,在虚拟环境里,每个虚拟计算机系统都拥有自己的虚拟硬件(如处理器、内存、I/O设备及网络接口等),来提供一个独立的虚拟机执行环境。通过虚拟化层的模拟,虚拟机中的操作系统认为自己独占一个系统在运行。实际上,VMM已经抢占了物理机操作系统的位置,变成了真实物理硬件的管理者,向上层的软件呈现出虚拟的硬件平台。此时,操作系统运行在虚拟平台之上,仍然管理着它认为是“物理硬件”的虚拟硬件。使用虚拟化技术,每个虚拟机中的操作系统可以完全不同,执行环境也可以完全独立的,多个操作系统可以互不影响的在一台物理机上同时运行,如图3-1所示。
图3-1 系统虚拟化
在x86平台虚拟化技术中,这个新引入的虚拟化层被称为虚拟机监控器,也叫作Hypervisor。虚拟机监视器运行的环境,也就是真实的物理机,称之为宿主机,而虚拟出的平台被称之为客户机,客户机里面运行的系统被称之为客户机操作系统。
1974年,Popek和Goldberg定义了虚拟机可以看作是物理机的一种高效隔离的复制,里面蕴涵了三层含义,即同质、高效和资源受控,这也是一个虚拟机所具有的三个典型特征:
(1)同质:虚拟机的运行环境和物理机的运行环境在本质上是相同的,但是在表现上有一些差异。例如,虚拟机所看到的CPU个数可以和物理机上实际的CPU个数不同,CPU主频也可以与物理机的不同,但是虚拟机中看到的CPU必须和物理机上的CPU是同一种基本类型的。
(2)高效:虚拟机中运行的软件必须和直接在物理机上运行的性能接近。为了实现这点,当软件在虚拟机中运行时,大多数的指令需直接在硬件上执行,只有少量指令需要经过VMM处理或模拟。
(3)资源受控:VMM需要对系统资源有完全控制能力和管理权限,包括资源的分配、监控和回收。(www.xing528.com)
判断一个系统的体系结构是否可虚拟化,关键在于看它是否能够在该系统上虚拟化出具有上述三个典型特征的虚拟机。为了进一步研究可虚拟化的条件,从指令着手介绍,引入两个概念——特权指令和敏感指令。
(1)特权指令:系统中操作和管理关键系统资源的指令。在现代计算机体系结构中,都有两个或两个以上的特权级,用来区分系统软件和应用软件。特权指令只能够在最高特权级上正确执行,如果在非最高特权级上执行,特权指令就会引发一个异常,使得处理器陷入最高特权级,交由系统软件来处理。在不同的运行级上,不仅指令的执行效果不同,而且也并不是每个特权指令都能够引发异常。例如,一个x86平台上的用户违反了规范,在用户态修改EFLAGS寄存器的中断开关位,这一修改不会产生任何效果,也不会引起异常陷入,而是会被硬件直接忽略掉。
(2)敏感指令:虚拟化世界里操作特权资源的指令,包括修改虚拟机的运行模式或者物理机的状态,读写敏感的寄存器或者内存。例如时钟、中断寄存器、访问存储保护系统、内存系统,地址重定位系统以及所有的1/O指令。
由此可见,所有的特权指令都是敏感指令,但并非所有的敏感指令都是特权指令。
为了使得VMM可以完全控制系统资源,敏感指令应当设置为必须在VMM的监控审查下进行。如果一个系统上所有敏感指令都是特权指令,就可以按如下步骤实现一个虚拟环境:
将VMM运行在系统的最高特权级上,而将客户机操作系统运行在非最高特权级上。此时,当客户机操作系统因执行敏感指令(此时,也就是特权指令)而陷入到VMM时,VMM模拟执行引起异常的敏感指令,这种方法被称为“陷入再模拟”。
由上可知,判断一个系统是否可虚拟化,其核心就在于该系统对敏感指令的支持上。如果在系统上所有敏感指令都是特权指令,则它是可虚拟化的。如果它无法支持在所有的敏感指令上触发异常,则不是一个可虚拟化的结构,我们称其存在“虚拟化漏洞”。
虽然虚拟化漏洞可以采用一些办法来避免,例如将所有虚拟化都采用模拟的方式来实现,保证所有指令(包括敏感指令)的执行都受到VMM的监督审查,但由于它对每条指令不区别对待,因而性能太差。所以既要填补虚拟化漏洞,又要保证虚拟化的性能,只能采取一些辅助的手段,或者直接在硬件层面填补虚拟化漏洞,或者通过软件的办法避免虚拟机中使用到无法陷入的敏感指令,这些方法都不仅保证了敏感指令的执行受到VMM的监督审查,而且保证了非敏感指令可以不经过VMM而直接执行,使得性能大大提高。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。