OpenStack设计与实现(⼀)虚拟化云计算的⼀个核⼼思想就是在服务器端提供集中的物理计算资源,这些计算资源可以被分解成更⼩的单位去独⽴地服务于不同的⽤户,也就是在共享物理资源的同时,为每个⽤户提供隔离、安全、可信的虚拟⼯作环境,⽽这⼀切不可避免地要依赖于虚拟化技术。
⼀、虚拟化技术的概述
虚拟化技术对⼤家来说都不陌⽣,⽐如虚拟内存和虚拟服务器等,为了更好的理解虚拟化我们应该⾸先来了解⼀下计算机系统的层次结构。
每⼀层都向上层提供⼀个抽象,并且每⼀层只需要知道下层抽象的接⼝,⽽并不需要了解其内部运作机制。例如,操作系统看到的是⼀个硬件抽象层,它并不知道硬件中布线和电器特征。即使硬件层发⽣变化,只要硬件抽象层不变,那么操作系统层将察觉不到任何的变化。
这种分层有⼀定的优点。⾸先,每⼀层只需要考虑本层的设计以及相邻层间的交互接⼝,从⽽⼤⼤的降低了系统设计的复杂性,提⾼了软件的移植性。另外,这样的设计也是给下⼀层软件模块为上⼀层软件模块创造“虚拟世界”提供了条件。
所谓的虚拟化就是有位于下层的软件模块,根据上⼀层软件模块的期待,抽象出⼀个虚拟的软件或硬件接⼝,使上⼀层软件可以直接运⾏在与⾃⼰所期待的运⾏环境完全⼀致的虚拟环境上。
虚拟化可以发⽣在上图中的每⼀个层次上,硬件的虚拟化,操作系统的虚拟化等等,但是对于IaaS(基础架构即服务)的云计算,更关⼼的是硬件抽象层上的虚拟化。硬件抽象层上的虚拟化是指通过虚拟硬件抽象层来实现虚拟机,为客户机操作系统呈现出与物理硬件相同或相近的硬件抽象层。
如上图所⽰,系统虚拟化在硬件和操作系统之间引⼊了⼀个虚拟化层,虚拟化层提供⼀个操作系统期望的接⼝,统⼀处理操作系统的请求,使得操作系统层感觉不到虚拟化层的存在,任然认为⾃⼰在享有整个硬件。每个虚拟计算机系统(虚拟机)都拥有⾃⼰的虚拟硬件,并提供⼀个独⽴的虚拟运⾏环境,通过虚拟机监控器(VMM)的模拟,虚拟机中的操作系统认为⾃⼰仍然是独占⼀个系统在运⾏。
⼆、虚拟化实现⽅式
1、按照实现⽅式分
按照实现⽅式虚拟化可以分为两种:
VMM直接运⾏在硬件平台上,控制所有硬件并管理客户操作系统。客户操作系统运⾏在⽐VMM更⾼的级别上,Xen就是采⽤的这个模型。
VMM运⾏在⼀个传统的操作系统⾥(第⼀层软件),可以看做是第⼆层软件,⽽客户机操作系统则是第三层了。KVM和VirtualBox就是这种实现。
2、按照VMM所提供的虚拟平台类型分:
按照VMM所提供的虚拟平台类型可以分为两类
(1)完全虚拟化
VMM虚拟的是现实存在的平台,并且在客户机操作系统看来,虚拟平台和现实平台是⼀样的,客户机操作系统感觉不到运⾏在⼀个虚拟平台上,现有的操作系统⽆需进⾏任何修改就可以在这样的虚拟平台上运⾏,因此这种⽅式被称为完全虚拟化。
完全虚拟化中,VMM需要能够正确处理客户机操作系统所有可能的⾏为,或者说正确处理所有可能的指令,完全虚拟化经历了两个阶段:软件辅助的完全虚拟化与硬件辅助的完全虚拟化。
在x86虚拟技术的早期,x86体系中没有在硬件层次对虚拟化提供⽀持,因此完全虚拟只能靠软件来实现,典型的做法就是优先级压缩和⼆进制代码翻译相结合。
优先级压缩的原理是:将VMM和客户机的优先级放到同⼀个CPU中来运⾏,对应于x86架构,通常VMM在ring0,客户机操作系统内核在ring1,客户机操作系统应⽤程序在ring3。当客户机操作系统内核执⾏特权指令时,由于处在⾮特权的ring1,通常会触发异
linux内核设计与实现 pdf常,VMM截获后就可以进⾏特权指令的虚拟化。但是x86指令体系结构在设计之初并没有考虑到虚拟化,⼀⼩部分特权指令在ring1中没有触发异常,VMM也就不能进⾏截获进⾏虚拟化,所以就需要⽤⼆进制代码翻译来处理这些不友好的指令。
⼆进制代码翻译的原理:VMM通常会对操作系统的⼆进制代码进⾏扫描,⼀旦发现虚拟化不友好的指令,就将其替换成⽀持虚拟化的指令块。
Intel的VTx技术是硬件辅助虚拟化的代表。VTx技术在处理器上引⼊了⼀个新的执⾏模式⽤于运⾏虚拟机。当虚拟机运⾏在这个特殊模式中时,他仍然⾯对⼀套完整的处理器寄存器和执⾏环境,只是任何特权操作都会被处理器截获并报告给VMM。VMM本省就运⾏在正常模式下,在接收到处理器的报告后,通过对⽬标指令的解码,到相应的虚拟化模块进⾏模拟,并把最终的效果反映在特殊的环境中。
(2)类虚拟化
类虚拟化虚拟出的平台在现实中是不存在的,⽽是经过VMM重新定义的。这样的虚拟平台需要对所运⾏的客户机操作系统进⾏或多或少的修改使之能够适应虚拟环境,客户机操作系统也就知道⾃⼰运⾏在虚拟平台上,并且会主动去适应。
类虚拟化是通过在源代码级别修改指令以回避虚拟漏洞的⽅式来使VMM能够对物理资源实现虚拟化。对于x86中难以虚拟化的指令,类虚拟化采取的⽅式是修改操作系统内核代码,使得操作系统内核完全避免这些难以虚拟化的指令。
三、虚拟机动态迁移
动态迁移是虚拟化特有的新特性,它将虚拟机从⼀个物理机快速迁移到另⼀个物理机,但是虚拟机⾥⾯的程序和⽹络都保持连接。从⽤户的⾓度来看,动态迁移对虚拟机的可⽤性没有任何影响,⽤户不会察觉任何的服务被中断。
动态迁移实现的⽅法是在⽬的服务器上建⽴⼀台同样配置的新虚拟机,然后不断地在两个虚拟机之间同步各种内部状态,⽐如内存、外设、CPU等。等状态同步完成后,关掉⽼的虚拟机,启动新的虚拟机。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论