云计算虚拟化技术与开发(txt+pdf+epub+mobi电子书下载)


发布时间:2020-10-13 23:50:27

点击下载

作者:张炜,聂萌瑶,熊晶

出版社:中国铁道出版社有限公司

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

云计算虚拟化技术与开发

云计算虚拟化技术与开发试读:

前言

信息技术的发展,尤其是计算机和互联网技术的进步极大地改变了人们的工作和生活方式。进入新世纪后,大量企业开始采用以数据中心为业务运营平台的信息服务模式,数据中心变得空前重要和复杂,这对管理工作提出了全新的挑战,一系列问题接踵而来。企业如何通过数据中心快速地创建服务并高效地管理业务?怎样根据需求动态调整资源以降低运营成本?如何更加灵活、高效、安全地使用和管理各种资源?如何共享已有的计算平台而不是重复创建自己的数据中心?业内人士普遍认为,信息产业本身需要更加彻底地进行技术变革和商业模式转型,虚拟化和云计算正是在这样的背景下应运而生。

虚拟化技术已经在信息化产业领域产生了深刻的影响,被认为是支持云计算发展炙手可热的关键技术。虚拟化是满足多样化用户需求,并挖掘计算机潜力和优化的首选途径。

虚拟化实现了IT资源的逻辑抽象和统一表示,在大规模数据中心管理和解决方案交付方面发挥着巨大的作用,是支撑云计算伟大构想的最重要的技术基石。

本书对云计算的虚拟化技术由浅到深逐步展开,理论和实践相结合,教师演示和学生操作相结合,遵循“教、学、做”一体化教学模式,以培养实践能力为目标,在保证虚拟化技术基本理论的认知基础上,注重工程实践中的配置、安装及虚拟化技术的使用和理解。

本书共分7章,内容包括虚拟化技术概述、虚拟化实现技术架构、QEMU核心模块配置、构建KVM环境、KVM高级功能详解、虚拟化管理工具和虚拟机服务。全书大致分为四部分:第1、2章介绍虚拟化技术的背景、分类和主流的虚拟化产品,进一步对虚拟化实现技术的基本原理和架构进行全面介绍;第3、4章主要介绍基于Linux内核的QEMU关于处理器、内存、磁盘、网络和图形显示等核心模块的基本原理和详细配置,以及流行的虚拟化技术方案KVM环境的构造方法,同时还介绍一些命令行工具和几个配置脚本;第5、6章更加深入地对KVM的内核模块进行逐步解析,使得读者对KVM内核有进一步的了解,最后介绍较流行的KVM的虚拟化管理工具(如libvirt)和基于libvirt API的带有图形化界面的virt-manager,同时给出各种工具的具体使用方式;第7章介绍虚拟机开发,包括搭建KVM虚拟化环境、建立虚拟机镜像,启动虚拟机等。

本书建议安排64学时,其中第1、2章以基础概念为主,建议安排20学时;第3、4章以实践为主,建议安排20学时;第5、6章为进阶内容,建议安排20学时;第7章为综合开发,建议安排4学时。

本书主要适用于计算机相关专业及云计算自学者对虚拟化技术的理解与认识,在学习理论知识的基础上,培养学员的实践能力,在实践中提高学员对理论的理解与认识,培养初学者的工程部署经验和习惯,使其能够运用云计算技术进行开发与实践。

本书由张炜、聂萌瑶、熊晶任主编,储泽楠、石玉、马巍任副主编,由南京大学徐洁磐主审。其中,第5章由张炜编写,第2、4、6章由聂萌瑶、储泽楠、石玉共同编写,第1章由熊晶编写,第3、7章由马巍编写。本书在编写过程中得到中国铁道出版社的大力支持,同行专家及相关行业人士提出了很多宝贵意见,在此表示感谢。

由于时间仓促,编者水平有限,书中疏漏与不足之处在所难免,恳请读者给予批评和指正。编者2018年1月第1章虚拟化技术概述

当前,虚拟化技术已经在信息化产业领域产生了深刻的影响,被认为是支持云计算发展的炙手可热的关键技术。虚拟化是满足多样化用户需求、挖掘计算机潜力和优化计算机系统的首选途径。1.1虚拟化技术简介1.1.1 虚拟化的基本概念

虚拟化作为一系列先进的技术和产品,在信息科学领域掀起了又一轮新的技术浪潮。那么,什么是虚拟化?虚拟化的目的是什么?“虚”和“实”是相对而言的,在人们认知中,“实”通常是“实实在在”看得见摸得着的事物;在计算机领域范畴内,服务器、CPU、路由器等硬件产品是“实”的,部分可视化的软件等是“实”的。但是,如果使用软件方式和其他“虚”技术手段替代和模拟服务器、硬盘、CPU等使之从效果上得到的像是真实存在的事物,就是虚拟化。

虚拟化(Virtualization)是把物理资源转变为逻辑上可以管理的资源,以打破物理结构之间的壁垒;虚拟化是将各种各样的资源通过逻辑抽象、隔离、再分配、管理的一个过程。通常,对虚拟化的理解有广义与狭义两种:广义的虚拟化意味着将不存在的事物或现象“虚拟”成为存在的事物或现象的方法,计算机科学中的虚拟化包括平台虚拟化、应用程序虚拟化、存储虚拟化、网络虚拟化、设备虚拟化等。狭义的虚拟化专指在计算机上模拟运行多个操作系统平台。

一直以来,对于虚拟化并没有统一的标准定义,但大多数定义都包含这样几个特征:(1)虚拟化的对象是资源(包括CPU、内存、存储、网络等)。(2)虚拟化得到的资源有着统一的逻辑表示,而且这种逻辑表示能够提供给用户与被虚拟的物理资源大部分相同或完全相同的功能。(3)经过一系列的虚拟化过程,使得资源不受物理资源限制约束,由此可以带给人们与传统IT相比更多的优势,包括资源整合、提高资源利用率、动态IT等。

如果从计算机的不同层次入手,给虚拟化做出一个定义,可以首先看一下计算机的服务层级结构:硬件资源层、操作系统层、框架库层、应用程序层和服务层,如图1-1所示。图1-1 计算机的服务层级

事实上,这些不同的层级之间与当前的架构是紧紧依赖的。如果没有应用程序,服务就无法提供给用户;没有框架库,软件就无法运行;没有操作系统,就无法安装各式各样的应用程序和框架库;没有硬件资源,当然就什么都没有了。为了避免层次之间的紧密依赖性,在1960年,就有人引入虚拟化的概念,做法很简单,就是将上一层对下一层的依赖撤销;换句话说,就是将本层的依赖从底层中抽离出来,因此定义“虚拟化”的正规说法,可以为“虚拟化,就是不断抽离依赖的过程”。“虚拟”从字面上看就是“非真实”的,用更通俗的语言表达就是“本来没有这个东西,但要假装让你觉得有,以达到我们使用的目的”。这也是当前虚拟化的实践原则。1.1.2 虚拟化的目的

根据虚拟化技术的特征,其应用价值可以体现在“云”办公、虚拟制造、工业、金融业、政府、教育机构等方面。从近几年将虚拟机大量部署到企业的成功案例可以看出,越来越多的企业开始关注虚拟化技术给企业带来的好处,同时也在不断地审视自己目前的IT基础架构,从而希望改变传统架构。

因此,虚拟化可以精简IT基础设施和优化资源管理方式,达到整合资源、节约成本、减少企业IT资源开销的目的。

虚拟化解决了当今人们遇到的许多问题,主要体现在以下四个方面:(1)可以在一个特定的软硬件环境中去虚拟另一个不同的软硬件环境,并可以打破层级依赖的现状。VMware Workstation就是一款用于虚拟另一个不同的软硬件环境的软件。其运行主界面如图1-2所示。(2)提高计算机设备的利用率。可以在一台物理服务器上同时安装并运行多种操作系统,从而提高物理设备的使用率。而且,当其中一台虚拟机发生故障时,并不会影响其他操作系统,实现了故障隔离。图1-2 VMware Workstation主界面(3)在不同的物理服务器之间会存在兼容性问题。为使不同品牌、不同硬件兼容,虚拟化可以统一虚拟硬件而达到融合的目的。(4)虚拟化可节约潜在成本。在硬件采购、操作系统许可、电力消耗、机房温度控制和服务器机房空间等方面都可体现节约成本的效果,如表1-1所示。表1-1 虚拟化节约潜在的成本

在解决问题的同时,把真实的硬件资源用Hypervisor模拟成虚拟的硬件设备有很多好处:(1)降低成本。将硬件资源虚拟化后,可以有效提高已有硬件的使用率,减少浪费,从而降低硬件的采购成本与运行时的能耗、管理成本。(2)增加可用性。虚拟化之前,一旦某个硬件设备崩溃或者损坏,对所提供的IT服务的影响是巨大的。虚拟化之后,只需对总的硬件资源进行一定的冗余配置,即可避免出现这种情况。类似的,当硬件需要进行更换或者升级时,使用虚拟化可以让IT服务做到无缝对接。(3)增加可扩展性。用户或应用程序对于计算资源以及存储资源的需求更加动态和灵活,将硬件进行虚拟化后可以做到“按需分配,物尽其用”,均衡各个服务器之间的负载。(4)方便管理。在将各个服务器统一到虚拟化平台后,可以有效地提高管理效率,便于发现IT服务中的问题和瓶颈。1.1.3 云计算与虚拟化

云计算最重要的技术实现是虚拟化,云计算的应用必定基于虚拟化。只有在虚拟化的环境下“云”才有可能,从这个角度来讲虚拟化是云计算的基石。从虚拟化到云计算的过程实现了跨系统的资源动态调度,将大量的计算资源组成IT资源池。(1)从技术上看二者之间的关系:虚拟化是云计算的核心组成部分之一,是云计算和云存储服务得以实现的关键技术之一。(2)从软硬件分离的角度看二者之间的关系:云计算在某种意义上剥离了软件与硬件之间的联系。虚拟化就是有效分离软件和硬件的方法。(3)从网络服务的角度看二者之间的关系:云计算是一种“一切皆服务”的模式,通过该模式在网络或云上提供服务。虚拟化层的虚拟机提供云计算服务,虚拟化层的网络提供存储服务。1.1.4 虚拟化历史沿革与未来趋势

虚拟化的发展经历了4个阶段:

第一个阶段是大型机上的虚拟化,即简单地、硬性地划分硬件资源。

第二个阶段是大型机技术开始向UNIX系统或类UNIX系统迁移,例如,IBM的AIX、Oracle的Solaris等操作系统都带有虚拟化的功能特性。

第三个阶段主要是基于x86平台的虚拟化技术的研究工作,包括VMware以及Connectix虚拟机的研究开发,开源的XEN与VMware等基本类似,主要不同之处是需要改动内核,但都是通过软件模拟硬件层,然后在模拟出来的硬件层上安装完整的操作系统,在操作系统上应用。其核心思想可以用“模拟”两个字来概括,即用软的模拟硬的,并能实现异构操作系统的互操作。

第四个阶段是近几年开始出现或者被人注意的虚拟化技术,主要有芯片级的虚拟化、操作系统的虚拟化和应用层的虚拟化。

虚拟化是迅速变化的领域,以下几点可能会成为未来的发展趋势:(1)虚拟框架扩展化:扩展更高级别的应用框架将会极大简化开发者构建功能更强大的任务流。(2)虚拟平台开放化和标准化:封闭和不兼容无法支持异构虚拟机系统,虚拟平台开放化可以支撑产业链合作需求,形成良性产业链结构。(3)公有云私有化:在公有云上动态数据中心铺平了私有云的道路,私有云增加了云服务的功能及IT的灵活性,使其能够迅速响应用户请求。私有云很可能成为未来IT基础设施的建设标准。(4)高度集成:高度集成实现完全的整合将会逐渐代替传统方式,成为以后的主流模式。(5)虚拟机自动化呈上升趋势:虚拟机不断增多,对虚拟化管理高效和简化的要求,促使虚拟机实现自动化将是一个重要趋势。(6)未来虚拟化的发展多元化:未来虚拟化将会在大型企业的IT基础设施和日常运营中发挥主导作用,给企业的IT基础设施安装、运营和管理带来巨大的变革。1.2虚拟化分类

虚拟化技术经过数年的发展,已经成为一个庞大的技术家族,其技术形式种类繁多,实现的应用也有其自身体系。下面从多个不同研究角度说明虚拟化的分类:(1)从虚拟化支持的层次划分,主要分为软件辅助的虚拟化和硬件支持的虚拟化。

● 软件辅助的虚拟化是指通过软件的方法,让客户机的特权指令陷入异常,从而触发宿主机进行虚拟化处理。主要使用的技术是优先级压缩和二进制代码翻译。

● 硬件辅助虚拟化是指在CPU中加入了新的指令集和处理器运行模式,完成虚拟操作系统对硬件资源的直接调用。典型技术是Intel VT、AMD-V。(2)从虚拟平台的角度来划分,主要分为全虚拟化和半虚拟化。

● 全虚拟化是指虚拟操作系统与底层硬件完全隔离,由中间的Hypervisor层转化虚拟客户操作系统对底层硬件的调用代码。全虚拟化无须更改客户端操作系统,兼容性好。典型代表是VMware Workstation、ESX Server早期版本、Microsoft Virtual Server。

● 半虚拟化是指在虚拟客户操作系统中加入特定的虚拟化指令,通过这些指令可以直接通过Hypervisor层调用硬件资源,免除由Hypervisor层转换指令的性能开销。半虚拟化的典型代表是Microsoft Hyper-V、VMware的vSphere。(3)从虚拟化的实现结构来看,主要分为Hypervisor型虚拟化、宿主模型虚拟化、混合模型虚拟化。

● Hypervisor型虚拟化是指硬件资源之上没有操作系统,而是直接由虚拟机监控器(Virtual Machine Monitor,VMM)作为Hypervisor(可看作虚拟环境中的操作系统)接管,Hypervisor负责管理所有资源和虚拟环境。这种结构的主要问题是硬件设备多种多样,VMM不可能把每种设备的驱动都一一实现,所以此模型支持的设备有限。

● 宿主模型(Hosted模式)虚拟化是在硬件资源之上有个普通的操作系统,负责管理硬件设备,然后VMM作为一个应用搭建在宿主操作系统上负责虚拟环境的支持,在VMM之上再加载的是客户机。此方式由底层操作系统对设备进行管理,不用担心实现设备驱动。它的主要缺点是VMM对硬件资源的调用依赖于宿主机,因此效率和功能受宿主机影响较大。

● 混合模型虚拟化是综合了以上两种实现模型的虚拟化技术。VMM直接管理硬件,但是它会让出一部分对设备的控制权,交给运行在特权虚拟机中的特权操作系统来管理。这种技术还具有一些缺点,由于在需要特权操作系统提供服务时,就会出现上下文切换,这部分开销会造成性能下降。(4)从虚拟化在云计算中被应用的领域来划分,主要分为服务器虚拟化、存储虚拟化、应用程序虚拟化、平台虚拟化、桌面虚拟化。

● 服务器虚拟化可以将一个物理服务器虚拟成若干服务器使用,它是“基础设施服务”(Infrastructure as a Service,SaaS)的基础。

● 存储虚拟化的方式是将整个云系统的存储资源进行统一整合管理,为用户提供一个统一的存储空间。

● 应用程序虚拟化是把应用程序对底层系统和硬件的依赖抽象出来,从而解除应用程序与操作系统和硬件的耦合关系。应用程序运行在本地应用虚拟化环境中时,这个环境为应用程序屏蔽了底层可能与其他应用产生冲突的内容。应用程序虚拟化是“软件服务”(Software as a Service,SaaS)的基础。

● 平台虚拟化是集成各种开发资源虚拟出的一个面向开发人员的统一接口,软件开发人员可以方便地在这个虚拟平台中开发各种应用并嵌入到云计算系统中,使其成为新的云服务供用户使用,平台虚拟化是“平台服务”(Platform as a Service,PaaS)的基础。

● 桌面虚拟化是将用户的桌面环境与其使用的终端设备解耦。服务器上存放的是每个用户的完整桌面环境。用户可以使用具有足够处理和显示功能的不同终端设备通过网络访问该桌面环境。1.2.1 硬件虚拟化

硬件虚拟化产生的主要原因是由于在技术层面上用软件手段达到全虚拟化非常麻烦,而且效率较低,因此Intel等处理器厂商发现了商机,直接在芯片上提供了对虚拟化的支持。硬件直接可以对敏感指令进行虚拟化执行,比如Intel的VT-x和AMD的AMD-V技术。

相比于软件虚拟化,硬件虚拟化就是在物理平台本身提供了特殊指令,以实现对真实物理资源的截获与模拟的硬件支持。简单地说,就是其并不依赖于操作系统,即不在应用程序层面进行部署。

现在比较流行的CPU虚拟化技术就是硬件虚拟化解决方案中的一个比较典型的代表,通常情况下支持虚拟化技术的CPU带有特别优化过的指令集来控制整个虚拟的过程。同样以x86平台的虚拟化为例,支持虚拟化技术的x86 CPU带有特别优化过的指令集来控制虚拟过程,通过这些指令集,Hypervisor可以很容易地将客户机置于一种受限制的模式下运行,一旦客户机需要访问真实的物理资源,硬件会暂停客户机的运行,将控制权重新交给Hypervisor进行处理。

由于虚拟化硬件可以提供全新的架构,支持操作系统直接在其上运行,无须进行二进制翻译转换,减少了相关的性能开销,简化了Hypervisor的设计,从而能够使Hypervisor性能更加强大。

相比纯软件解决方案,硬件虚拟化具有如下优势:(1)性能上的优势。例如,基于CPU的虚拟化解决方案,虚拟化监控器提供了一个全新的虚拟化架构,支持虚拟化的操作系统直接在CPU上运行,从而不需要进行额外的二进制转换,减少了相关的性能开销。此外,支持虚拟化技术的CPU还带有特别优化过的指令集来控制虚拟化过程,通过这些技术,虚拟化监控器就比较容易提高服务器的性能。(2)可以提供对64位操作系统的支持。在纯软件解决方案中,相关应用仍然受到主机硬件的限制。随着64位处理器的不断普及,这个缺陷造成的不利影响也日益突出。而CPU等基于硬件的虚拟化解决方案,除了能够支持32位的操作系统之外,还能够支持64位的操作系统。

鉴于虚拟化的巨大需求和硬件虚拟化产品的广阔前景,支持硬件虚拟化的厂商(Intel和AMD公司)一直都在努力完善和加强自己的硬件虚拟化产品线。自2005年末,Intel公司便开始在其处理器产品线中推广应用Intel Virtualization Technology(Intel VT)虚拟化技术,发布了具有Intel VT虚拟化技术的一系列处理器产品,包括桌面的Pentium和Core系列,以及服务器的Xeon(至强)和Itanium(安腾)。Intel一直保持在每一代新的处理器架构中优化硬件虚拟化的性能和增加新的虚拟化技术。现在市面上从桌面的Core i3/i5/i7,到服务器端的E3/E5/E7/E9,几乎全部都支持Intel VT技术。可以说在不远的将来,Intel VT很可能会成为所有Intel处理器的标准配置。

通常,一个完善的硬件虚拟化解决方案,往往需要得到CPU、主板芯片组、BIOS以及软件的支持,包括VMM软件或者某些操作系统本身。1.2.2 软件虚拟化

软件虚拟化是指通过软件的方法,让客户机的特权指令陷入异常,从而触发宿主机进行虚拟化处理。主要使用的技术是优先级压缩和二进制代码翻译。

优先级压缩是指让客户机运行在Ring 1级别,由于处于非特权级别,所以客户机的指令基本上都会触发异常,然后宿主机进行接管。

但是,有些指令并不能触发异常,因此就需要二进制代码翻译技术来对客户机中无法触发异常的指令进行转换,转换之后仍然由宿主机进行接管。

实现虚拟化过程中重要的一步在于,虚拟化层能够将计算元件对真实的物理资源的直接访问加以拦截,将其重新定位到虚拟的资源中进行访问。那么,对于软件虚拟化和硬件虚拟化的划分在于,虚拟化层是通过软件的方式,还是通过硬件辅助的方式,将对真实的物理资源的访问进行“拦截并重定向”。

软件虚拟化解决方案,即使用软件的方法实现对真实物理资源的截获与模拟,通常所说的虚拟机就是一种纯软件的解决方案。在软件虚拟化解决方案中,客户操作系统在大部分情况下都是通过虚拟机监控器(VMM)与硬件通信,然后由虚拟机监控器决定是否对系统上的所有虚拟机进行访问。

常见的软件虚拟机如QEMU,它是通过软件的方式来仿真x86平台处理器的取指、解码和执行。客户机的执行并不在物理平台上直接执行。由于所有的处理器指令都是由软件模拟而来,所以性能通常比较差,但是可以在同一平台上模拟不同架构平台的虚拟机。

另外一个软件虚拟化的工具为VMware,它采用了动态二进制代码翻译技术。Hypervisor运行在可控的范围内,客户机的指令在真实的物理平台上直接运行。当然,客户机指令在运行前会被Hypervisor扫描,如果有超出Hypervisor限制的指令,那么这些指令会被动态替换为可在真实的物理平台上直接运行的安全指令,或者替换为对Hypervisor的软件调用。

使用软件虚拟机的解决方案优势比较明显,如成本比较低廉、部署方便、管理维护简单等。但是,这种解决方案也有缺陷,在部署时会受到比较多的限制。

第一个缺陷是会增加额外的开销。在软件虚拟化解决方案中,虚拟机监控器是部署在操作系统上的。也就是说,此时对于宿主机操作系统来说,虚拟机监控器跟普通的应用程序是一样的。在这种情况下,在虚拟机监控器上再安装一个操作系统,那么软件与硬件的通信会怎么处理呢?举一个简单的例子,在一台主机上安装的操作系统是Linux,然后部署了一个虚拟机监控器,在虚拟机监控器上又安装了一个Windows 7的操作系统,然后用户使用Windows 7操作系统的记事本编辑文本文件。在这种情况下,Windows 7操作系统的数据要转发给虚拟机监控器,然后虚拟机监控器再将数据转发给Linux操作系统。显然,在这个转发的过程中,多了一道额外的二进制转换过程。而这个转换过程必然会增加系统的负载性和硬件资源的额外开销,从而降低了使用性能。

第二个缺陷是客户操作系统受到虚拟机环境的限制。例如,现在有两个操作系统,分别是32位的与64位的。假设64位的操作系统必须安装在支持64位操作系统的硬件上,那么在32位的操作系统上,此时即使采用虚拟化技术,也不能够安装64位的操作系统,因为硬件不支持。可见,在软件虚拟化解决方案中,其相关应用并不能够突破系统本身的硬件设置。在实际工作中,这是很致命的一个缺陷。例如,现在管理员需要测试某个应用程序在64位操作系统上的稳定性,但是硬件本身不支持64位操作系统,此时虚拟化技术将无能为力。管理员可能需要重新购买一台主机来进行测试。

另外,在软件虚拟化解决方案中,Hypervisor在物理平台上的位置为传统意义上的操作系统所处的位置,虚拟化操作系统的位置为传统意义上的应用程序所处的位置,系统复杂性的增加和软件堆栈复杂性的增加意味着软件虚拟化解决方案难于管理,会增大系统的可靠性和安全性。1.2.3 半虚拟化

半虚拟化又称准虚拟化、类虚拟化,是指通过对客户机进行源码级的修改,让客户机可以使用虚拟化的资源。由于需要修改客户机内核,因此半虚拟化一般都会被顺便用来优化I/O。客户机的操作系统通过高度优化的I/O协议,可以和VMM紧密结合达到近似于物理机的速度。

软件虚拟化可以在缺乏硬件虚拟化支持的平台上完全通过Hypervisor来实现对各个客户虚拟机的监控,从而保证它们之间彼此独立和隔离。但是软件虚拟化付出的代价是软件复杂度的增加和性能上的损失。降低这种损失的一种方法是修改客户机操作系统,让客户机操作系统知道自己运行在虚拟化环境下,且能够让客户机操作系统和虚拟机监控器协同工作,这也是半虚拟化由来。

半虚拟化使用Hypervisor分享存取底层的硬件,也利用Hypervisor来实现对底层硬件的共享访问。由于通过这种方法无须重新编译或捕获特权指令,使其性能非常接近物理机。

在半虚拟化解决方案中,客户机操作系统集成了虚拟化方面的代码,这些代码无须重新编译,这就使得客户机操作系统能够非常好地配合Hypervisor来实现虚拟化,因此宿主机操作系统能够与虚拟进程进行很好的协作。

半虚拟化解决方案中最经典的产品就是Xen,Xen是开源半虚拟化技术的一个例子。客户机操作系统在Xen的Hypervisor上运行之前,必须在内核层面进行某些改变,因此,Xen适用于BSD、Linux、Solaris以及其他开源操作系统,但不太适合Windows系列的专用操作系统。因为Windows系列不公开源代码,无法修改其内核。微软的Hyper-V所采用的技术和Xen类似,因此也可以把Hyper-V归属于半虚拟化的范畴。

半虚拟化需要客户机操作系统做一些修改来配合Hypervisor,这是一个不足之处,但是半虚拟化提供了与原始系统相近的性能,同时还能支持多个不同操作系统的虚拟化。图1-3所示在半虚拟化环境中,各客户操作系统运行的虚拟平台,以及修改后的客户机操作系统在虚拟平台上分享进程。图1-3 半虚拟化通过修改后的客户机操作系统分享进程

总而言之,半虚拟化的优点为:与全虚拟化相比,架构更精简,在整体速度上有一定的优势。其缺点为:需要对客户机操作系统进行修改,在用户体验方面比较麻烦。例如,对于Xen而言,如果需要虚拟Linux操作系统作为客户机操作系统,就需要将Linux操作系统修改成Xen支持的内核才能使用。1.2.4 全虚拟化

全虚拟化又称完全虚拟化、原始虚拟化,是不同于半虚拟化的另一种虚拟化方法。

全虚拟化是指VMM虚拟出来的平台是现实中存在的平台,因此对于客户机操作系统来说,并不知道是运行在虚拟的平台上。正因如此,全虚拟化中的客户机操作系统是不需要做任何修改的。

与半虚拟化技术不同,全虚拟化为客户机提供了完整的虚拟x86平台,包括处理器、内存和外设,理论上支持运行任何可在真实物理平台上运行的操作系统。全虚拟化为虚拟机的配置提供了最大限度的灵活性,不需要对客户机操作系统做任何修改,即可正常运行任何非虚拟化环境中已存在的基于x86平台的操作系统和软件,这是全虚拟化无可比拟的优势。

全虚拟化的重要工作是在客户机操作系统和硬件之间捕捉和处理那些对虚拟化敏感的特权指令,使客户机操作系统无须修改就能运行。当然,速度会根据不同的实现而不同,但大致能满足用户的需求。这种虚拟方式是业界现今最成熟和最常见的,在Hosted模式和Hypervisor模式中都有这种虚拟方式。知名的产品有IBM CP/CMS、Virtual Box、KVM、VMware Workstation和VMware ESX(在其4.0版本后,被改名为VMware vSphere)。另外,Xen的3.0以上版本也开始支持全虚拟化。

随着硬件虚拟化技术的逐代演化,运行于Intel平台的全虚拟化的性能已经超过了半虚拟化产品的性能,这一点在64位的操作系统上表现得更为明显。此外,全虚拟化有不需要对客户机操作系统做任何修改的固有优势,可以预言,基于硬件的全虚拟化产品将是未来虚拟化技术的核心。

总之,全虚拟化的优点是客户机操作系统不用修改直接就可以使用。缺点是会损失一部分性能,这些性能消耗在VMM捕获处理特权指令上。全虚拟化的唯一限制就是操作系统必须能够支持底层硬件。图1-4所示为在全虚拟化环境中,各客户操作系统使用Hypervisor分享底层硬件。图1-4 全虚拟化使用Hypervisor分享底层硬件

到目前为止,Intel的VT-x硬件虚拟化技术已经能将CPU和内存的性能提高到真机的水平,但是设备(如磁盘、网卡)是有数目限制的。虽然VT-d技术已经可以做到一部分的硬件隔离,但是大部分情况下还是需要软件来对其进行模拟。在全虚拟化的情况下,是通过QEMU进行设备模拟的,而半虚拟化技术则可以通过虚拟机之间共享内存的方式利用特权级虚拟机的设备驱动直接访问硬件,从而达到更高效的性能水平。1.3操作系统与虚拟化

操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境的程序集合。操作系统虚拟化,可以理解为将用户的桌面操作系统进行虚拟化,属于桌面虚拟化。1.3.1 系统级虚拟化

系统级虚拟化的核心思想是使用虚拟化软件在一台物理机上,虚拟出一台或多台虚拟机。虚拟机是指使用系统虚拟化技术,运行在一个隔离环境中、具有完整硬件功能的逻辑计算机系统,包括客户操作系统和其中的应用程序。

系统级虚拟化包括一个Hypervisor或者VMM。Hypervisor是位于硬件资源和操作系统之间的软件层,它使得多个单独的虚拟机实例可以同时运行,并使得多个虚拟机可以共享各种物理硬件资源。Hypervisor协调这些硬件资源(CPU、内存和各种I/O设备)的访问,为虚拟机分配各种需要使用的资源。

对于系统级虚拟化,根据Hypervisor或VMM的实现层次主要可以分为基于宿主操作系统的系统级虚拟化和基于硬件的系统级虚拟化。

基于宿主操作系统的虚拟机作为应用程序运行在宿主操作系统(Host OS)之上,其架构如图1-5所示。因此,Guest VM需要由Guest OS内核先经过Hypervisor,再经过宿主操作系统才能访问硬件。支持基于宿主操作系统虚拟化的产品有Virtual PC、VMWare Workstation和VirtualBox等。图1-5 基于宿主操作系统的系统级虚拟化

另外一种系统虚拟化是基于硬件的系统级虚拟化,如图1-6所示。在这种模式下,虚拟机监控层Hypervisor或VMM直接运行在裸机硬件之上。它具有最高的特权,可以直接管理和调用底层的硬件资源。虚拟机监控层向Guest VM提供虚拟的硬件资源,而Guest VM对硬件资源的访问都需要通过这一层。支持基于硬件的系统级虚拟化产品包括VMware ESX/ESXi和Xen等。图1-6 基于硬件的系统级虚拟化

事实上,上述这种按照Hypervisor的实现层次的分类对于某些虚拟化产品并不能很直接地确定其分类,例如KVM和Hyper-V。KVM是Linux的一个内核模块,对其属于基于宿主操作系统或者基于硬件的虚拟化产品还存在一些争论。另一个例子就是微软的Hyper-V,它被误认为是基于宿主操作系统的虚拟化产品。但是其2008免费版本和其他一些版本采用的实际上是基于硬件的系统级虚拟化,Hypervisor在管理操作系统之前加载,并且任何虚拟机都是在Hypervisor上创建并运行的,而非通过管理操作系统,因此应该属于基于硬件的系统级虚拟化。1.3.2 Docker与系统虚拟化

Docker是操作系统级别的轻量级虚拟化技术,也就是实现轻量级的操作系统虚拟化。它能够让应用的分发、部署和管理都变得前所未有的高效和轻松。同时它也是一个用Go语言实现的开源项目,源代码在github上。

Docker也是一个开源的应用容器引擎,它可以让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到安装了任何Linux发行版本的机器上。Docker基于LXC(Linux Container)来实现类似VM的功能,可以在更有限的硬件资源上提供给用户更多的计算资源。与VM等虚拟化的方式不同,LXC不属于全虚拟化或半虚拟化中的任何一个分类,而是一个操作系统级虚拟化。

Docker借助Linux的内核特性,如控制组(Control Group)、命名空间(Namespace)等,直接调用操作系统的系统调用接口,从而降低每个容器的系统开销,降低容器复杂度,实现启动快、资源占用小等特征。

传统的虚拟化技术要生成一个环境的时间非常久,但对于Docker来说启动和销毁一个操作系统环境都是秒级的,而且其底层依赖的技术LXC完全是内核特性,没有任何中间层开销,对于资源的利用率极高,性能接近物理机。小结

本章从虚拟化的基本概念,逐步引出虚拟化的使用目的,以及虚拟化在云计算中所处的地位,使读者逐步明白虚拟化和云计算之间的关系,理解虚拟机作为云计算的一项重要技术如何在云计算中发挥重要作用。

本章还介绍了虚拟化未来的发展前景,给出了虚拟化的常见分类,并对软件虚拟化、硬件虚拟化、半虚拟化和全虚拟化做了比较详细的说明,详细阐述了各种虚拟化的不同方式和分类属性。习题

1.什么是虚拟化?其目的是什么?

2.简述软件虚拟化、硬件虚拟化的优缺点及适用范围。

3.全虚拟化和半虚拟化的不同点是什么?

4.什么是系统级虚拟化?

5.什么是宿主机?什么是客户机?第2章虚拟化实现技术架构

传统的虚拟化技术一般是通过“陷入再模拟”的方式来实现的,使用这种方式需要处理器的支持,即使用传统的虚拟化技术的前提是处理器本身是一个可虚拟化的体系结构。因此,本章从系统可虚拟化架构入手,介绍虚拟机监控器(VMM)实现中的一些基本概念。

因为很多处理器在设计时并没有充分考虑虚拟化的需求,因而并不是一个完备的可虚拟化体系结构。为了解决这个问题,VMM对物理资源的虚拟可以归纳为4个主要任务:处理器虚拟化、内存虚拟化、I/O虚拟化和网络虚拟化。本章就以Intel VT(Virtualization Technology)和AMD SVM(Secure Virtual Machine)为例,分别介绍各种虚拟化技术的基本原理和不同虚拟化方式的实现细节。2.1处理器虚拟化实现技术

处理器虚拟化是VMM中最重要的部分,因为访问内存或者I/O的指令本身就是敏感指令(客户机的特权指令),所以内存虚拟化和I/O虚拟化都依赖于处理器虚拟化。

在x86体系结构中,处理器有4个运行级别,分别是Ring0、Ring1、Ring2和Ring3。其中,Ring0级别拥有最高的权限,可以执行任何指令而没有限制。运行级别从Ring0到Ring3依次递减。操作系统内核态代码运行在Ring0级别,因为它需要直接控制和修改CPU状态,类似于这样的操作需要在Ring0级别的特权指令才能完成,而应用程序一般运行在Ring3级别。

在x86体系结构中实现虚拟化,需要在客户机操作系统以下加入虚拟化层,来实现物理资源的共享。因此,这个虚拟化层应该运行在Ring0级别,而客户机操作系统只能运行在Ring0以上的级别。但是,客户机操作系统中的特权指令,如果不运行在Ring0级别,将会有不同的语义,产生不同的效果,或者根本不起作用,这是处理器结构在虚拟化设计上存在的缺陷,这些缺陷会直接导致虚拟化漏洞。为了弥补这种漏洞,在硬件还未提供足够的支持之前,基于软件的虚拟化技术就已经先给出了两种可行的解决方案:全虚拟化和半虚拟化。全虚拟化可以采用二进制代码动态翻译技术(Dynamic Binary Translation)来解决客户机的特权指令问题,这种方法的优点在于代码的转换工作是动态完成的,无须修改客户机操作系统,因而可以支持多种操作系统。而半虚拟化通过修改客户机操作系统来解决虚拟机执行特权指令的问题,被虚拟化平台托管的客户机操作系统需要修改其操作系统,将所有敏感指令替换为对底层虚拟化平台的超级调用。在半虚拟化中,客户机操作系统和虚拟化平台必须兼容,否则虚拟机无法有效操作宿主机。x86系统结构下处理器虚拟化如图2-1所示。图2-1 x86系统结构下的处理器虚拟化

虽然可以通过处理器软件虚拟化技术来实现VMM,但都增加了系统复杂性和性能开销。如果使用硬件辅助虚拟化技术,也就是在CPU中加入专门针对虚拟化的支持,可以使得系统软件更加容易、高效地实现虚拟化。目前,Intel公司和AMD公司分别推出了硬件辅助虚拟化技术Intel VT和AMD SVM,下面将进行重点讲解。2.1.1 Intel VT-x

由于指令的虚拟化是通过“陷入再模拟”的方式实现的,而IA32架构有19条敏感指令不能通过这种方法处理,导致出现虚拟化漏洞。为了解决这个问题,Intel VT中的VT-x技术扩展了传统的IA32处理器架构,为处理器增加了一套名为虚拟机扩展(Virtual Machine Extensions,VMX)的指令集,该指令集包含十条左右的新增指令来支持与虚拟化相关的操作,为IA32架构的处理器虚拟化提供了硬件支持。此外,VT-x引入了两种操作模式,统称为VMX操作模式。(1)根操作模式〔VMX Root Operation〕:VMM运行所处的模式,以下简称根模式。(2)非根操作模式(VMX Non-Root Operation):客户机运行所处的模式,以下简称非根模式。

在非根模式下,所有敏感指令(包括19条不能被虚拟化的敏感指令)的行为都被重新定义,使得它们能不经虚拟化就直接运行或通过“陷入再模拟”的方式来处理;在根模式下,所有指令的行为和传统IA32一样,没有改变,因此原有的软件都能正常运行。其基本结构如图2-2所示。图2-2 Intel VT-x的基本结构

这两种操作模式与IA32特权级0~特权级3是正交的,即两种操作模式下都有相应的特权级0~特权级3。因此,在使用VT-x时,描述程序运行在某个特权级,应具体指明处于何种模式。

作为传统IA32架构的扩展,VMX操作模式在默认情况下是关闭的,因为传统的操作系统并不需要使用这项功能。当VMM需要使用这项功能时,可以使用VT-x提供的新指令VMXON来打开这项功能,用VMXOFF来关闭这项功能。VMX操作模式如图2-3所示。图2-3 VMX操作模式

VMM执行VMXON指令进入到VMX操作模式,此时CPU处于VMX根操作模式,VMM软件开始运行。

VMM执行VMLAUNCH或VMRESUME指令产生VM-Entry,客户机软件开始运行,此时CPU从根模式转换成非根模式。

当客户机执行特权指令或者客户机运行发生了中断或异常时,VM-Exit被触发而陷入VMM,CPU自动从非根模式切换到根模式。VMM根据VM-Exit的原因做相应处理,然后继续运行客户机。

如果VMM决定退出,则执行VMXOFF关闭VMX操作模式。

另外,VT-x还引入了VMCS来更好地支持处理器虚拟化。VMCS是保存在内存中的数据结构,由VMCS保存的内容一般包括以下几个重要的部分:(1)vCPU标识信息:标识vCPU的一些属性。(2)虚拟寄存器信息:虚拟的寄存器资源,开启Intel VT-x机制时,虚拟寄存器的数据存储在VMCS中。(3)vCPU状态信息:标识vCPU当前的状态。(4)额外寄存器/部件信息:存储VMCS中没有保存的一些寄存器或者CPU部件。(5)其他信息:存储VMM进行优化或者额外信息的字段。

每一个VMCS对应一个虚拟CPU需要的相关状态,CPU在发生VM-Exit和VM-Entry时都会自动查询和更新VMCS,VMM也可以通过指令配置VMCS来影响CPU。2.1.2 vCPU

硬件虚拟化采用vCPU(virtual CPU,虚拟处理器)描述符来描述虚拟CPU。vCPU本质是一个结构体,以Intel VT-x为例,vCPU一般可以划分为两部分:一是VMCS结构(Virtual Machine Control Structure,虚拟机控制结构),其中存储的是由硬件使用和更新的内容,这主要是虚拟寄存器;二是VMCS没有保存而由VMM使用和更新的内容,主要是VCMS以外的部分。vCPU的结构如图2-4所示。图2-4 Intel VT-x的vCPU结构

在具体实现中,VMM创建客户机时,首先要为客户机创建vCPU,然后再由VMM来调度运行。整个客户机的运行实际上可以看作VMM调度不同的vCPU运行。vCPU的基本操作如下:(1)vCPU的创建:创建vCPU实际上是创建vCPU描述符。由于vCPU描述符是一个结构体,因此创建vCPU描述符就是分配相应大小的内存。vCPU描述符在创建之后,需要进一步初始化才能使用。(2)vCPU的运行:vCPU创建并初始化好之后,就会被调度程序调度运行,调度程序会根据一定的策略算法来选择vCPU运行。(3)vCPU的退出:和进程一样,vCPU作为调度单位不可能永远运行,总会因为各种原因退出,例如执行了特权指令、发生了物理中断等,这种退出在VT-x中表现为发生VM-Exit。对vCPU退出的处理是VMM进行CPU虚拟化的核心,例如模拟各种特权指令。(4)vCPU的再运行:指VMM在处理完vCPU的退出后,会负责将vCPU投入再运行。2.1.3 AMD SVM

在AMD的SVM中,有很多东西与Intel VT-x类似。但是技术上略有不同,在SVM中也有两种模式:根模式和非根模式。此时,VMM运行在非根模式上,而客户机运行在根模式上。在非根模式上,一些敏感指令会引起“陷入”,即VM-Exit,而VMM调动某个客户机运行时,CPU会由根模式切换到非根模式,即VM-Entry。

在AMD中,引入了一个新的结构VMCB(Virtual Machine Control Block,虚拟机控制块),来更好地支持CPU的虚拟化。一个VMCB对应一个虚拟的CPU相关状态,例如,这个VMCB中包含退出领域,当VM-Exit发生时会读取里面的相关信息。

此外,AMD还增加了8个新指令操作码来支持SVM,VMM可以通过指令来配置VCMB映像CPU。例如,VMRUN指令会从VMCB中载入处理器状态,而VMSAVE指令会把处理器状态保存到VMCB中。2.2内存虚拟化实现技术

从操作系统的角度,对物理内存有两个基本认识:(1)内存都是从物理地址0开始。(2)内存地址都是连续的,或者说至少在一些大的粒度上连续。

而在虚拟环境下,由于VMM与客户机操作系统在对物理内存的认识上存在冲突,造成了物理内存的真正拥有者VMM必须对客户机操作系统所访问的内存进行虚拟化,使模拟出来的内存符合客户机操作系统的两条基本认识,这个模拟过程就是内存虚拟化。因此,内存虚拟化面临如下问题:(1)物理内存要被多个客户机操作系统使用,但是物理内存只有一份,物理地址0也只有一个,无法同时满足所有客户机操作系统内存从0开始的需求。(2)由于使用内存分区方式,把物理内存分给多个客户机操作系统使用,虽然可以保证虚拟机的内存访问是连续的,但是内存的使用效率低。

为了解决这些问题,内存虚拟化引入一层新的地址空间——客户机物理地址空间,这个地址并不是真正的物理地址,而是被VMM管理的“伪”物理地址。为了虚拟内存,现在所有基于x86架构的CPU都配置了内存管理单元(Memory Management Unit,MMU)和页面转换缓冲(Translation Lookaside Buffer,TLB),通过它们来优化虚拟内存的性能。

如图2-5所示,VMM负责管理和分配每个虚拟机的物理内存,客户机操作系统所看到的是一个虚拟的客户机物理地址空间,其指令目标地址也是一个客户机物理地址。那么在虚拟化环境中,客户机物理地址不能直接被发送到系统总线上,VMM需要先将客户机物理地址转换成一个实际物理地址后,再交由处理器来执行。图2-5 内存虚拟化示意图

当引入了客户机地址之后,内存虚拟化的主要任务就是处理以下两方面的问题:(1)实现地址空间的虚拟化,维护宿主机物理地址和客户机物理地址之间的映射关系。(2)截获宿主机对客户机物理地址的访问,并根据所记录的映射关系,将其转换成宿主机物理地址。

第一个问题比较简单,只是一个简单的地址映射问题。在引入客户机物理地址空间后,可以通过两次地址转换来支持地址空间的虚拟化,即客户机虚拟地址(Guest Virtual Address,GVA)→客户机物理地址(Guest Physical Address,GPA)→宿主机物理地址(Host Physical Address,HPA)的转换。在实现过程中,GVA到GPA的转换通常是由客户机操作系统通过VMCS(AMD SVM中的VMCB)中客户机状态域CR3指向的页表来指定,而GPA到HPA的转换是由VMM决定的,VMM通常会用内部数据结构来记录客户机物理地址到宿主机物理地址之间的动态映射关系。

但是,传统的IA32架构只支持一次地址转换,即通过CR3指定的页面来实现“虚拟地址”到“物理地址”的转换,这和内存虚拟化要求的两次地址转换相矛盾。为了解决这个问题,可以通过将两次转换合二为一,计算出GVA到HPA的映射关系写入“影子页表”(Shadow Page Table)。这样虽然能够解决问题,但是缺点也很明显,实现复杂。例如,需要考虑各种各样页表的同步情况等,这样导致开发、调试以及维护都比较困难。另外,使用“影子页表”需要为每一个客户机进程对应的页表都维护一个“影子页表”,内存开销很大。

为了解决这个问题,Intel公司提供了EPT技术,AMD公司提供了AMD NPT技术,直接在硬件上支持GVA→GPA→HPA的两次地址转换,大幅降低了内存虚拟化的难度,也进一步提高了内存虚拟化的性能。

第二个问题从实现上来说比较复杂,它要求地址转换一定要在处理器处理目标指令之前进行,否则会造成客户机物理地址直接被发到系统总线上的重大漏洞。最简单的解决办法就是让客户机对宿主机物理地址空间的每一次访问都触发异常,由VMM查询地址转换表模仿其访问,但是这种方法性能很差。2.2.1 Intel EPT

Intel EPT是Intel VT-x提供的内存虚拟化支持技术。EPT页表存在于VMM内核空间中,由VMM来维护。EPT页表的基地址是由VMCS“VM-Execution”控制域的Extended Page Table Pointer字段指定的,它包含了EPT页表的宿主机系统物理地址。EPT是一个多级页表,各级页表的表项格式相同,如图2-6所示。图2-6 页表项格式

页表各项含义如下:(1)ADDR:下一级页表的物理地址。如果已经是最后一级页表,就是GPA对应的物理地址。(2)SP:超级页(Super Page)所指向的页是大小超过4KB的超级页,CPU在遇到SP=l时,就会停止继续往下查询。对于最后一级页表,这一位可以供软件使用。(3)X:可执行,X=1表示该页是可执行的。(4)R:可读,R=1表示该页是可读的。(5)W:可写,W=1表示该页是可写的。

Intel EPT通过使用硬件支持内存虚拟化技术,使其能在原有的CR3页表地址映射的基础上,引入EPT页表来实现另一次映射。通过这个页表能够将客户机物理地址直接翻译成宿主机物理地址,这样,GVA→GPA→HPA两次地址转换都由CPU硬件自动完成,从而减少整个内存虚拟化所需的代价。其基本原理如图2-7所示。图2-7 EPT原理图

这里假设客户机页表和EPT页表都是4级页表,CPU完成一次地址转换的基本过程如下:

CPU先查找客户机CR3指向的L4页表。由于客户机CR3给出的是GPA,因此CPU需要通过EPT页表来实现客户机CR3中的GPA→HPA的转换。CPU首先会查找硬件的EPT TLB,如果没有对应的转换,CPU会进一步查找EPT页表,如果还没有,CPU则抛出EPT Violation异常由VMM来处理。

获得L4页表地址后,CPU根据GVA和L4页表项的内容,来获取L3页表项的GPA。如果L4页表中GVA对应的表项显示为“缺页”,那么CPU产生Page Fault,直接交由客户机内核来处理。获得L3页表项的GPA后,CPU同样要通过查询EPT页表来实现L3的GPA到HPA的转换。

同样,CPU会依次查找L2、L1页表,最后获得GVA对应的GPA,然后通过查询EPT页表获得HPA。

从上面的过程可以看出,CPU需要5次查询EPT页表,每次查询都需要4次内存访问,因此最坏情况下总共需要20次内存访问。EPT硬件通过增大EPT TLB来尽量减少内存访问。

在GPA到HPA转换的过程中,由于缺页、写权限不足等原因也会导致客户机退出,产生EPT异常。对于EPT缺页异常,处理过程大致如下:

KVM(内核虚拟机)首先根据引起异常的GVA,映射到对应的HPA;然后为此虚拟地址分配新的物理页;最后KVM再更新EPT页表,建立起引起异常的GPA到HPA的映射。

EPT页表相对于影子页表,其实现方式大大简化,主要地址转换工作都由硬件自动完成,而且客户机内部的缺页异常也不会导致VM-Exit,因此客户机运行性能更好,开销更小。2.2.2 AMD NPT

AMD NPT是AMD公司提供的一种内存虚拟化技术,它可以将客户机物理地址转换为宿主机物理地址。而且,与传统的影子页表不同,一旦嵌套页面生成,宿主机将不会打断和模拟客户机gPT(guest Page Table,客户机页表)的修正。

在NPT中,宿主机和客户机都有自己的CR3寄存器,分别是nCR3(nested CR3)和gCR3(guest CR3)。gPT负责客户机虚拟地址到客户机物理地址的映射。nPT(nested Page Table,嵌套页表)负责客户机物理地址到宿主机物理地址的映射。客户机页表和嵌套页表分别是由客户机和宿主机创建。其中,客户机页表存在客户机物理内存中,由gCR3索引。而嵌套页表存在宿主机物理内存中,由nCR3索引。当使用客户机虚拟地址时,会自动调用两层页表(gPT和nPT)将客户机虚拟地址转换成宿主机物理地址,如图2-8所示。图2-8 NPT原理图

当地址转换完毕时,TLB将会保存客户机虚拟地址到宿主机物理地址之间的映射关系。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载