1. 媒介
捏造化是现代计算机领域不可或缺的一种技能,它让公开的捏造资源即是被捏造化的底层物理资源,通常是使用多路复用、聚合和模拟中的一种或多种根本技能实现。等效性、安全性和性能是衡量捏造化的三个重要尺度。Gerald Popek和Robert Goldberg在1974年就确立了一个指令集架构(ISA)是否支持捏造化的根本要求。直到本日,这个核心头脑仍然明白计算机体系结构和支持捏造机能力的根本原则。
2. 名词表明
在开始正文之前,先复习下几个捏造化相关的重要名词。
2.1 捏造机
英文是Virtual Machine,简称VM。捏造机是对完整计算机情况的抽象,它将处理器、内存(memory)和I/O装备团结捏造化,具有本身独立的处理能力、内存和通讯通道。每个捏造机的内部情况雷同于计算机的硬件,都有本身的底层硬件副本,大概至少有本身的某些底层硬件副本,且可以运行本身的独立客户操作体系(Guest OS)及其应用程序(App),且与别的捏造机和情况别的部门完全隔离,互不影响和感知。捏造机的运行平台可以分为两类:捏造机管理程序(Hypervisor)和呆板模拟器(Machine Simulator)。这两个名词在下面先容。
2.2 捏造机管理程序
英文是Hypervisor,中文也叫超等监督者。Hypervisor是管理和运行捏造机的专用体系软件。当多个捏造机同时存在于同一个计算机体系上时,hypervisor对它们进行调理,使捏造机之间进行多路复用来分配真实物理资源。Hypervisor让捏造机直接在CPU上执行可以得到最大效率,理想情况下根本不影响性能开销。Hypervisor先配置好硬件情况(寄存器等),随后让捏造机指令在CPU上执行。由于捏造机指令序列必须在捏造机的抽象中操作,因此执行更新或依靠体系状态的指令会引起Trap(捕获),hypervisor会处理这个Trap并模拟该指令的功能。Hypervisor筹划的核心就是Trap-and-Emulate范式。
Hypervisor分为type-1和type-2两种范例。Type-1 hypervisor直接控制物理计算机的所有资源。相比之下,type-2 hypervisor要么作为现有主机操作体系(Host OS)的一部门运行,要么直接在现有Host OS之上运行,着实就是扩展Host OS的功能。常见的hypervisor如下图1所示。
图1 常见的hypervisor
最根本的hypervisor使用两种关键捏造化技能:
- 在捏造机之间多路复用物理资源(在空间上,也可能在时间上);
- 模拟别的一切需要的资源,特别是I/O总线和I/O装备;
由于Hypervisor允许捏造CPU直接执行物理处理器的指令,这种调理技能被称为直接执行(Direct Execution)。固然,hypervisor要负责确保捏造机的安全性。因此,hypervisor会确保捏造机总是以更低的特权执行,如许捏造CPU就不能直接执行特权指令等。只要Guest OS试图执行特权指令,捏造机的直接执行就会导致Trap,然后就由hypervisor接管去模拟了。因此,围绕直接执行筹划的hypervisor遵循trap-and-emulate范式,其中大部门执行开销是用于hypervisor代表捏造机模拟trap指令的功能。
2.3 呆板模拟器
英文是Machine Simulator。Machine Simulator通常使用普通的用户级应用程序实现,其目标是提供对捏造架构的准确模拟,取决于模拟细节的级别,它通常会比本机速度慢x5到1000x不等。由于Machine simulators允许对复杂工作负载的详细研究,在计算机体系结构研究中起着重要作用。
实际上,Machine Simulator和Hypervisor之间的主要区别在于,前者模拟捏造机的CPU指令集体系结构,而后者对CPU进行多路复用。CPU的多路复用是一个调理使命,与操作体系调理进程使命非常的雷同。调理实体(这里是hypervisor)设置硬件情况(寄存器等),然后让被调理实体(捏造机)以较低的特权等级直接在硬件上执行。Machine Simulator可以说是Full(soft) virtualization,Hypervisor可以说是Hardware virtualization(HVM, HV)。
除了Hypervisor和Machine Simulator,着实还有一种半捏造化(paravirtualization)。它是由于早期处理器缺乏对捏造化清楚的体系结构支持,因此出现了一系列办理运行与底层硬件相似或兼容相同捏造机问题的方法。这种方法做出了不同的衡量,将简单性和整体效率置于与底层硬件的完全兼容性之上。
在早期没有捏造化体系结构支持的平台上,paravirtualization需要更改与底层硬件不兼容的Guest OS。在具有Full virtualization支持的体系结构的当前使用中,通过平台特定的扩展,paravirtualization仍然用于加强HWM,通常在装备驱动程序中实现,例如管理协作内存或实现高性能前端装备。
2.4 捏造机监控器
英文是Virtual Machine Monitor,简称VMM。VMM是hypervisor中专门用于CPU和内存捏造化的部门。不外有些文献中,VMM和hypervisor是一样。在Type-1 hypervisor中,VMM直接在裸机上运行,type-2 hypervisor中,VMM运行在Host OS之下。Type-1和type-2的hypervisor中,VMM都需要创建捏造机。
Type-1情况中,裸机上的VMM必须执行体系的调理和实际的资源分配,因此,type-1 VMM需要编写额外的资源调理和分配代码。Type-2情况中,Host OS调理所有的体系资源,Host OS像调理进程一样调理hypervisor,只管这种模式需要依靠繁琐的Kernel模式来执行捏造机,但好处就是可移植性强、代码改动量少。
VMM的根本结构如图2所示,每个Processing Element(PE)包括了CPU和物理内存。PE连接到I/O总线上,并附带两个I/O装备:磁盘和网络接口卡。该图也是服务器部署的典范代表。PC的话可能还包括键盘、鼠标、串行接口和USB等附加装备。移动平台可能还需要GPS、加速度计和收音机等。图中有三个捏造机,每个捏造机都有本身的捏造硬件、本身的Guest OS和本身的应用程序。Hypervisor直接运行在真实硬件上,且控制着实际的物理资源。
图2 VMM的根本架构
2.5 内存
英文是Memory。内存有很多种类定义,不外大抵分为两种范例:Virtual memory(捏造内存)和Physical memory(物理内存),捏造内存通太过段或分页的组合转换为物理内存。
捏造内存通常就是处理器执行指令时所使用的地址空间。除了少少数破例,所有指向内存位置的寄存器和指令地址都包含一个捏造地址。在分段体系结构中,捏造地址空间是由基址和偏移限定决定的。基址会被添加到捏造地址中,偏移限定会用于检查以进行掩护地址是否越界。在分页体系结构中,捏造地址空间由内存管理单元(MMU)在逐页的底子上确定,其映射由页表或软件TLB miss处理程序定义。有些体系结构(如x86-32)将分段与分页结合起来,捏造地址起首(通太过段)转换成线性地址,然后(通太过页)转换成物理地址。
物理内存就是处理器的内存层次结构访问所使用的地址空间,通常由DRAM提供支持。在非捏造化的计算机体系中,物理地址空间通常由硬件资源决定,并由处理器的内存控制器定义。在捏造计算机体系中,hypervisor定义捏造机可用物理内存大小。从技能上讲,对捏造机可见的抽象应该称为“virtual physical memory”(捏造物理内存)。然而,为了避免与捏造内存混淆,它通常被称谓guest-physical memory。为了进一步避免歧义,底层资源被称为host-physical memory。不外要留意,一些早期的捏造化论文使用了不同的术语,特别是分别使用physical memory和machine memory来指代guest-physical memory和host-physical memory。
3. 捏造化模型
1974年,Gerald Popek和Robert Goldberg在Communications of the ACM上发表了一篇名为“Formal Requirements for Virtualizable Third-Generation Architectures”的论文,其中定义决定了一个给定的指令集架构(ISA)是否可以被一个使用多路复用的VMM捏造化。对于任何满足定义假设的体系结构,任何可以直接在硬件上运行的操作体系也可以在捏造机中运行,而无需修改操作体系代码。这项工作的动机是办理新架构可能拦阻VMM构建,让架构师在筹划时就思量这个问题。直到本日,这个定理仍然是明白计算机体系结构与其支持捏造机的能力之间的根本关系的起点。详细地说,该定理决定了仅依靠于直接执行的VMM是否能够支持恣意Guest OS。
这个定理假设有一个尺度的计算机体系结构的处理器,处理器有两种执行模式:用户级(user-level)和主管级(supervisor),且支持捏造内存。特别是,操作体系可以将硬件配置为相互隔离地运行多个恣意的应用程序。为了证明,文章定义了一个简单的模型,该模型具有以下特点:
- 计算机有一个拥有两个执行级别的处理器:主管模式(supervisor mode)和用户模式(user mode)。
- 捏造内存是通太过段(而不是分页)实现的,它使用基址B和限定L的单个段(B和L也称作relocation-bound register pair)。分段定义[B, B+L]范围的线性地址空间为有用地捏造地址[0, L]。由于不采用分页,线性地址直接以1:1的比例映射到物理地址。对于所有内存访问,在supervisor和user模式下都是用捏造内存。
- 物理内存是一连的,从地址0开始,物理内存大小(SZ)在处理器复位时是已知的。
- 处理器的体系状态称为处理器状态字(processor status word, PSW),由元组(M, B, L, PC)构成。
- 执行级别(execution level):M={s,u};
- 段寄存器(segment register):(B, L);
- 当出息序计数器(program counter, PC),捏造地址;
- Trap architecture规定起首将PSW内容保存到内存中的一个已知位置(MEM[0]),然后未来自内存中另一个已知位置(MEM[1])的值加载到PSW中。Trap architecture机制用于在体系调用或执行指令时出现非常后进入。
- ISA包括至少一条指令或指令序列,该指令或指令序列可以将元组(M, B, L, PC)从内存的一个位置加载到硬件PSW中。用于在体系调用或Trap处理完成后,恢复到用户模式下执行。
- 为了简化讨论,忽略I/O和停止。
我们起首思量这种体系结构的操作体系是什么样的(在没有VMM的情况下)。
- Kernel将在supervisor模式(M=s)下运行,而应用程序将始终在user模式(M=u)下运行;
- 在初始化过程中,kernel起首设置Trap入口点:MEM[0]←(M:s,B:0,L:SZ,PC:trap_en);
- Kernel将为每个应用程序分配一个一连的物理内存范围;
- 要启动或恢复存储在物理内存[B, B+L]中的应用程序和当前正在执行指令PC,操作体系只需要把(M:u, B, L, PC)加载到PSW中;
- 在Trap入口点(PC=trap_en),kernel起首解码存储在MEM[1].PC中的指令,确定产生Trap的原因,然后采取适当的行动;
这个体系结构比较理想化,特别是缺少寄存器,但与现今所认识的体系结构本质上没有什么不同。对于如许的架构,Popek和Goldberg提出了以下正式的研究问题。
给一台满足这个根本体系结构模型的计算机,在这个模型的准确条件下可以构造VMM,使VMM:
- 可以执行一个或多个捏造机;
- 可以始终完全控制machine;
- 支持为相同的体系结构筹划恣意的、未经修改的或潜伏的恶意操作体系;
- 在最坏的情况下,速度只有较小的下降;
这个问题的答案决定了是否可以为特定的体系结构构造VMM,从而得到的捏造机可以是真实呆板的高效、独立的副本。当条件满足时,定理必须确保符合以下三个尺度:
- Equivalence:捏造机本质上与底层处理器相同,即计算机体系结构的副本。在捏造机中运行的任何程序,即任何Guest OS和应用程序组合,都应该表现出与直接在底层硬件上运行的程序相同的活动,除了可能出现的破例情况,比如由时间依靠关系或资源可用性(如物理内存大小)引起的差别。
- Safety:VMM必须始终完全控制硬件,且不对捏造机内部运行的软件做任何假设。捏造机与底层硬件是隔离的,它的操作就像在一台独立的计算机上运行一样。此外,不同的捏造机之间必须相互隔离。
- Performance:效率要求意味着,与直接在底层硬件上运行相比,在捏造化情况中程序的执行速度即使最坏的情况下也只会有稍微的下降。
4. 捏造化定理
基于上述捏造化模型,Gerald Popek和Robert Goldberg提出了以下定义:对于任何计算机,如果该计算机的敏感指令集(sensitive instructions)是特权指令集(privileged instructions)的子集,则可以构造捏造机监督器(virtual machine monitor, VMM),也称hypervisor。
Popek和Goldberg研究的问题的答案取决于ISA指令的分类。如果一条指令可以更新体系状态,那么他就是控制敏感指令(control-sensitive);如果一条指令的语义依靠于体系状态中设置的实际值,那么它就是活动敏感指令(behavior-sensitive);否则,就是无害指令(innocuous instruction)。如果一条指令只能在supervisor模式下执行,并且实验从user模式下执行时会产生Trap,那么它具有特权(privileged)。当所有control-sensitive和behavior-sensitive指令都具有特权时,则可以构造VMM。如:
control-sensitive || behavior-sensitive ≤ privileged
图3(a)描述了三种主要情势的内存之间的关系:host-physical memory, guest-physical memory和virtual memory。图3也表述了在三种不同情况下,处理器的PSW,以及执行级别M和relocation-bound pair(B, L)是怎样配置的。
(a) host-physical memory, guest-physical memory和virtual memory
(b) 执行应用程序、Guest OS和VMM时的硬件配置
图3 VMM的构造
如果满足定理的条件,则VMM的操作如下:
- VMM是唯一实际运行在supervisor模式下的软件。VMM为本身的代码和数据结构保存了一部门物理内存,这些内存永远不会映射到任何捏造机的任何捏造地址空间。
- VMM在host-physical地址空间中为每个捏造机一连分配guest-physical memory,每个捏造机都有固定的内存大小。这些参数如图3中的addr0和memsize。
- VMM在内存中保存每个捏造机的体系状态的副本:vPSW。与硬件雷同,vPSW由捏造机的执行层、段寄存器(B, L)和PC构成。
- 捏造机通过从内存加载元组(M’, B’, L’, PC’)恢复PSW 来执行:
- M’←u:捏造机始终以用户模式执行;
- B’←addr0+vPSW.B:将guest-physical偏移量添加到捏造机的段基址中;
- L’←min(vPSW.L, vPSW.memsize-vPSW.B):一般情况下,是直接使用捏造机的段限定。然而,恶意Guest OS可能会实验允许其应用程序读取超出guest-physical memory末端的内容。如许min()是放置了这种情况,以确保安全性;
- PC’←vPSW.PC:恢复捏造机的执行;
- 在每次Trap时,VMM更新PC值(vPSW.PC←PSW.PC)。vPSW的别的域段即使在恣意长的直接执行周期之后也不需要更新。实际上,任何可以更新PSW的B/L/M的指令都是control-sensitive的。VMM假定所有control-sensitive的指令都是privileged,并依靠于捏造机始终使用PSW.M==u来执行。
- VMM模拟引起Trap的指令。如果guest OS正在运行(vPSW.M==u),VMM起首对指令进行解码,然后根据ISA模拟特权指令的语义。例如,根据Guest OS设置的新值,VMM通过更新vPSW.B和vPSW.L来模拟更改segment register pair。在乐成模拟后,VMM增加PC(vPSW.PC++),然后根据步骤4恢复捏造机的执行。
- 然而,VMM可能得出结论,根据ISA,指令的模拟实际上是一个Trap。例如,思量捏造机处于user模式的情况(vPSW.M==u),恶意应用程序试图发出特权指令,大概如果应用程序访问内存超出了Guest OS在段描述符(B)中设置的限定。根据架构,VMM会模拟Trap,即:
- MEM[addr0]←vPSW:根据体系结构将捏造机的vPSW存储到Guest-physical memory的第一个字;
- vPSW←MEM[addr0+1]根据体系结构将Guest-physical memory中的第二个字复制到vPSW中。根据Guest OS设置的配置更新捏造机的状态;
- 按照步骤4恢复执行;
- 如果满足定理的假设,所有更新体系状态的指令(程序计数器除外)是control-sensitive,且具有privileged。在user模式下执行这些指令将会造成Trap。它将包括任何改变定义捏造地址空间的base-bound registers指令、或在user和supervisor模式之间转换的指令。VMM根据体系结构规范模拟这些指令。
- 如果这个假设得到满足,那么任何behavior-sensitive指令都将拥有特权,在user模式下执行将会导致Trap。VMM也会模拟这些指令,例如,思量一条指令需要读取执行层(PSW.M)或段基址(PSW.B),这种指令的活动直接依靠于处理器状态的实际值,而处理器状态的实际值会在捏造化过程中发生变化。这些指令必须具有特权,以确保正确的值返回给程序。
5. 递归捏造化
实际上,满足定理尺度的理想化架构也可以支持递归捏造机。在这个场景中,捏造机可以在Guest-supervisor模式下运行VMM,而不是在操作体系模式下运行VMM。固然,VMM可以运行多个捏造机、它们的Guest OS和各自的应用程序。在递归捏造化中,VMM本身必须在捏造机中运行。
6. 总结
本文旨在用最简单的方式描述捏造化的本质和根本实现框架,任何复杂的捏造机都是基于此根本原理上增补功能来的。只要各人内心有个捏造机原理框架,我相信学习任何捏造机都能很快入手,摆脱只见树木,不见森林的状态。
本文从名词表明,在使用一个根本简单的模型,引出了Popek和Goldberg研究的捏造化定理,根据这个定理,可比较快判断一个处理器体系结构是否好支持Hypervisor。Hypervisor实际上也是一个OS,两者都必须确保保持控制,并且必须正确配置硬件以实现其目标。不同之处在于,OS运行应用程序,而hypervisor运行整个捏造机(包括Guest OS和应用程序)。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |