虚拟化技术(中)
3.2虚拟技术原理
1)原理:虚拟机(Virtual Machine, VM) 是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。简单地说,虚拟机就是通过软件在宿主机上虚拟出一台计算机。虚拟机技术是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部分是不受现有资源的架设方式、地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和数据存储。在实际的生产环境中,虚拟机技术主要用来解决云数据中心和高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化地利用物理硬件。即将多个操作系统整合到一台高性能服务器上,最大化利用硬件平台的所有资源,用更少的投入实现更多的应用,还可以简化 IT 架构,降低管理资源的难度,避免IT 架构的非必要扩张。而且虚拟机的真正硬件无关性还可以实现虚拟机运行时迁移,实现真正的不间断运行,从而最大化保持业务的持续性,不用为购买超高可用性平台而付出高昂的代价。
虚拟机技术实现了一台计算机同时运行多个操作系统,而且每个操作系统中都有多个程
序运行,每个操作系统都运行在一个虚拟的CPU或虚拟主机上。虚拟机技术需要 CPU、主板芯片组、BIOS和软件的支持,如VMM软件或者某些操作系统本身。
虚拟机技术的核心是虚拟机监视器 VMM (Virtual Machine Monitor) , VMM也称为Hypervisor.VMM的作用是向底层分配访问宿主机的硬件资源,向上管理虚拟机的操作系统
和应用程序。它是一个宿主程序,该程序是一层位于操作系统和计算机硬件之间的代码,用来将硬件平台分割成多个虚拟机,实现一台计算机支持多个完全相同的执行环境。每个用户都会咸觉到自己在一台独立的、与其他用户相隔离的计算机上进行操作,尽管事实上为每个用户提供服务的都是同一台机器。在此种情况下,一台虚拟机就是由一个潜在的控制程序管理的操作系统,VMM 为每个客户操作系统虚拟一套独立于实际硬件的虚拟硬件环境(包括处理器、内左、 I/Q 设备等)。VMM采用某种调度算法在谷个虚拟机之间共享 CPU, 如采用时间片轮桂调度算法。
专划机系统与实际的计算机操作系统没有区别,也会感染病毒,但是由于虚拟机是封闭
的虚拟环境,如果虚拟机不与宿主机连接,则不会受宿主机病毒的影响。
2)CPU虚拟化原理
CPU的工作原理是:
1、取指令:CPU的控制器从内存读取一条指令并放入指令寄存器。指令的格式一般是:操作码就是汇编语言里的mov,add,jmp等符号码;操作数地址说明该指令需要的操作数所在的地方,是在内存里还是在CPU的内部寄存器里。
2、指令译码(解码):指令寄存器中的指令经过译码,决定该指令应进行何种操作(就是指令里的操作码)、操作数在哪里(操作数的地址)。
3、执行指令(写回):以一定格式将执行阶段的结果简单的写回。运算结果经常被写进CPU内部的暂存器,以供随后指令快速存取。4、修改指令计数器,决定下一条指令的地址。
中央处理器(CPU,central processing unit)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。CPU 自产生以来,在逻辑结构、运行效率以及功能外延上取得了巨大发展。中央处理(CPU),是电子计算机的主要设备之一,电脑中的核心配件。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU是计算机中负责读取指令,对指令译码并执行指令的核心部件。中央处理器主要包括两个部分,即控制器、运算器,其中还包括高速缓冲存储器及实现它们之间联系的数据、控制的总线。电子计算机三大核心部件就是CPU、内部存储器、输入/输出设备。中央处理器的功效主要为处理指令、执行操作、控制时间、处理数据。在计算机体系结构中,CPU 是对计算机的所有硬件资源(如存储器、输入输出单元) 进行控制调配、执行通用运算的核心硬件单元。CPU 是计算机的运算和控制核心。计算机系统中所有软件层的操作,最终都将通过指令集映射为CPU的操作。
首先,CPU虚拟化的目的是为了允许让多个虚拟机可以同时运行在VMM中。CPU虚拟化技
术是将单CPU模拟为多CPU, 让所有运行在VMM之上的虚拟机可以同时运行,并且它们相互之间都是独立的,互不影响的,以提高计算机的使用效率。在计算机体系中,CPU是计算机的核心,没有 CPU 就无法正常使用计算机,所以,CPU 能否正常被模拟成为虚拟机能否正常运行的关键。
从CPU设计原理上来说,CPU主要包含三大部分:运算器、控制器以及处理器寄存器。每
根据ISA提供的相应的指令标准进行的。ISA主要包含两种指令集:用户指令集(User ISA) 和种CPU都有自己的指令集架构(Instruction Set Architecture, ISA) , CPU 所执行的每条指令都是系统指令集(System ISA) .用户指令集一般指普通的运算指令,系统指令集一般指系统资源的处理指令。不同的指令需要有不同的权限,指令需要在与其相对应的权限才能体现指令执行效果。
最常用的 CPU 指令权限为0与3: 权限为0的区域的指令一般只能内核可以运行,而权限为3的指令则是普通用户运行。而权限为1、2的区域一般被驱动程序所使用。想要从普通模式(权限为3) 进入权限模式(权限为0) 需要有以下三种情况之一发生:
异步的硬件中断,如磁盘读写等。
系统调用,如int、call等。
。异常,如 page fault 等。
从上面内容可以看出,要实现 CPU 虚拟化,主要是要解决系统ISA 的权限问题。普通的
ISA 不需要模拟,只需保护CPU运行状态,使得每个虚拟机之间的状态分隔即可。而需要权
限的ISA则需要进行捕获与模拟。因此要实现CPU的虚拟化,就需要解决以下几个问题:
所有对虚拟机系统ISA 的访问都要被VMM以软件的方式所模拟。即所有在虚拟机上所产生的指令都需要被VMM所模拟。
所有虚拟机的系统状态都必须通过VMM保存到内存中。
所有的系统指令在VMM处都有相对应的函数或者模块来对其进行模拟。
。CPU指令的捕获与模拟,是解决CPU 权限问题的关键。
CPU 在正常执行指令时,如果是普通指令,不需要进行模拟,直接执行;而如果遇到需
要权限的指令时,则会被VMM捕获到,并且控制权会转交到VMM中,由VMM确定执行这
些需要权限的指令;VMM 在模拟指令时,会产生与此指令相关的一系列指令集,并执行这些指令:在VMM执行完成后,控制权再交回给客户操作系统。当然真实的情况没有那么简单,并不是所有的 CPU 框架都支持类似的捕获,而且捕获这类权限操作所带来的性能负担可能是巨大的。并且,在指令虚拟化的同时,也需要实现 CPU 在物理环境中所存在的权限等级,即虚拟化出 CPU 的执行权限等级因为没有了权限的支撑,指令所执行出来的效果可能就不是想要得到的效果了。
为了提高虚拟化的效率与执行速度,VMM实现了二进制转换器BT (Binary Translator)
与翻译缓存 TC (Translation Cache) .BT负责指令的转换,TC用来储存翻译过后的指令。BT 在进行指令转换一般有以下几种转换形式。
(1) 对于普通指令,直接将普通指令拷贝到TC中。这种方式称为“识别(Ident) ”转换。
(2) 对某些需要权限的指令,通过一些指令替换的方式进行转换,这种方式称为"内联(Inline) ”转换。
3) 对其他需要权限的指令,需要通过模拟器进行模拟,并将模拟后的结果转交给VM才
能达到虚拟化的效果。这种方式称为“呼出” (Call-out) 转换。因为指令需要进行模拟,所以有些操作所消耗的时间比较长,在全虚拟化的情况下,它的执行效果会比较低下,因此,才出现了半虚拟化与硬件辅助虚拟化两种另外的虚拟化技术,用于提高虚拟机运行的效率。
3)内存虚拟化原理
除去CPU的虚拟化以外,另一个关键的虚拟化技术是内存虚拟化。内存虚拟化是让每个虚拟机可以共享物理内存,VMM 可以动态分配与管理这些物理内存,保证每个虚拟机都有自
己独立的内存运行空间。虚拟机的内存虚拟化与操作系统中的虚拟内存管理有点类似。在操作系统中,应用程序所“看”到、用到的内存地址空间与这些地址在物理内存中是否连续是没有联系的。因为操作系统通过页表保存了虚拟地址与物理地址的映射关系,在应用程序请求内存空间时,CPU 会通过内存管理单元(Memory Management Unit, MMU) 与转换检测缓冲器(Translation Lookaside Buffer, TLB) 自动地将请求的虚拟地址转换为与之相对应的物理地址。目前,所有X86体系的CPU都包含有MMU与TLB, 用于提高虚拟地址与物理地址的映射效率。所以内存虚拟化也要将MMU与TLB在虚拟化的过程中一起解决。多个虚拟机运行在同一台物理设备上,真实物理内存只有一个,同时又需要使每个虚拟机独立运行,因此,需要VMM提供虚拟化的物理地址,即添加另外一层物理虚拟地址,则解决方案。
虚拟地址:客户虚拟机应用程序所使用的地址。
物理地址:由VMM提供的物理地址。
机器地址:真实的物理内存地址。
映射关系:包含两部分,客户机中的虚拟地址到 VMM 物理地址的映射;VMM 物理
地址到机器地址的映射。
客户虚拟机不能再通过 MMU 直接访问机器的物理地址,它所访问的物理地址则是由 VMM 所提供。即客户虚拟机以前的操作不变,同样保持了虚拟地址到物理地址的转换,只是在请求到真实的地址之前,需要再多一次地址的转换--VMM物理地址到机器地址的转换。通过两次内存地址的转换,可以实现客户虚拟机之间的相互独立运行,只是它们运行的效率会降低很多。为了提高效率,引入了影子页表,再后来的硬件辅助虚拟化的出现更进一步地提高了地址映射查询的效率。
4)网络虚拟化原理
在网络领域中,虚拟化并不是一项新兴的技术。虚拟网络允许不同需求的用户组访问同一个物理网络,但从逻辑上对它们进行一定程度的隔离,以确保安全。在上世纪 90 年代,2 层交换是园区局域网的标志性特征,虚拟局域网 (VLAN) 是在一个通用基础设施中将局域网划分为不同工作组的标准。除了 VLAN,基础设施虚拟服务还包括虚拟路由器和交换机等。在虚拟路由中,相同物理交换机中的路由进程为每个应用环境单独提供路由功能。在虚拟交换中,两个物理交换机被视为一个设备,从而简化了代码维护与配置管理工作,但更重要的是,通过支持跨越不同物理交换机的端口通道和状态来提供物理冗余。
现在,传统的客户端、服务器连接到网络上;基于 Web 的新型应用的客户端、服务器连接到网络上;多媒体应用也可以连接到网络上;所有的应用都连接到网络上。网络的需求和实现越来越复杂,在 IT 预算紧缩的情况下,网络物理整合的趋势不可避免。因此越来越需要利用虚拟化技术整合和简化网络资源。基于网络的虚拟化适用于多用户组环境,可将各组彼此隔离,并在多层应用环境中将每个层次或整个多层环境彼此隔离。网络虚拟化不但简化了数据和网络管理的复杂性,也进一步提升了数据的安全性。网络虚拟化可以实现以下功能:访问控制:确保能识别合法用户和设备,对其分类,并允许其接入获得访问授权的网络。 路径隔离:确保各用户或设备都能高效地分配到正确、安全的可用资源集。 服务保障:确保合法的用户和设备能访问相应的服务。 凭借网络虚拟化解决方案,企业能在单一物理基础设施上部署多个封闭用户组,并在整个局域网中保持高标准的安全性、可扩展性、可管理性和可用性。凭借其虚拟化特性和对于集中服务的支持,帮助部署了此框架的企业更好、更高效地利用网络资产,即使对设备、系统、服务和应用的需求有所增长,也能实现成本节约。
网络虚拟化提供了以软件的方式实现的虚拟网络设备,虚拟化平台通过这些虚拟网络设备可以实现与其他网络设备进行通信。而通信的对象可以是真实的物理网络设备,也可以是虚拟的网络设备。所以,网络虚拟化是要实现设备与设备之间的与物理连接没有关系的虚拟化连
接。因此,网络虚拟化最主要解决的问题有两个,网络设备与虚拟连接。虚拟化的网络设备可以是单个网络接口,也可以是虚拟的交换机以及虚拟的路由器等。在同一个局域网内,任何两个不同的虚拟设备都可以实现网络的连接;如果不是在同一个网内,则需要借助到网络协议才能实现网络的正常连接与通信,如VLAN (Virtual Local Area Network) 、VPN (Virtual Private Network) 等协议。
以VLAN 为例简单说明网络虚拟化的连接与通信。VLAN将网络结点按需划分成若干个
逻辑工作组,每一个逻辑工作组就对应一个虚拟网络。每一个虚拟网络就像是一个局域网,不同的虚拟网络之间相互独立,无法连接与通信。如果需要通信,则需要路由设备的协助,转发报文才能正常通信。由于这些分组都是逻辑的,所以这些设备不受物理位置的限制,只要网络交换设备支持即可。