第21章 · 播客 第1集
虚拟化、云计算与物联网 · 虚拟化技术
🎙️ 本集播客:第1集:从「虚拟化是 60 年代老古董还是新技术」这个反差开场,把虚拟化三大类型、平台虚拟化五个子类、Guest OS 与 Host OS、Hypercall、Intel-VT/AMD-V、动态二进制翻译,到虚拟化五种模式逐一辨清——全是选择题的直接取材点。 语音由微软 Edge 神经网络语音预生成(女声·晓伊,男声·云希)。点击下方任意对话可直接从该句开始播,当前句朗读时下一句已预先加载,无缝衔接。
雅
小雅
阿明,先来一道送分题:虚拟化技术最早出现在什么时候?
明
阿明
云计算不是这些年才火的吗,虚拟化应该也是 21 世纪初的东西吧?
雅
小雅
恭喜,掉坑。原文写得很清楚:虚拟化技术最早出现在 20 世纪 60 年代的 IBM 大型机系统,在 20 世纪 70 年代的 System 370 系列中逐渐流行起来。选项放五十、六十、七十年代和 21 世纪初,答案是 60 年代。坑在于 70 年代是「逐渐流行」不是「最早出现」,出题人专门拆成两个选项钓你。
明
阿明
60 年代出现,70 年代流行。那这些老古董怎么实现虚拟化的?
雅
小雅
靠虚拟机监控器 VMM,在物理硬件之上生成许多可运行独立操作系统的虚拟机实例;随着多核、集群、网格甚至云计算的广泛部署,它降低 IT 成本、增强安全性和可靠性。还要纠正一个偏见:虚拟化是广义术语,在计算机科学领域代表对计算资源的抽象,不局限于虚拟机——比如对物理内存的抽象产生了虚拟内存技术,让应用程序以为自己有连续可用的地址空间,实际可能被分隔成多个碎片页或段、交换到磁盘上。
明
阿明
原来虚拟内存也是虚拟化。那这么多东西总得分类吧?
雅
小雅
三大类:平台虚拟化,针对计算机和操作系统的虚拟化,我们通常所说的虚拟化主要指它;资源虚拟化,针对特定的系统资源,比如内存、存储、网络资源等;应用程序虚拟化,包括仿真、模拟、解释技术等。先把这个骨架记住,考试爱问「以下属于哪一类」。
明
阿明
好,平台虚拟化里面,管事的叫什么?
雅
小雅
叫控制程序,Control Program,它也叫 Virtual Machine Monitor,还叫 Hypervisor——三个名字一个东西,题目换着叫别懵。它隐藏计算平台的实际物理特性,给用户提供抽象、统一、模拟的计算环境。接着三个必考术语:虚拟机中运行的操作系统称为客户机操作系统 Guest OS;运行虚拟机监控器的操作系统称为主机操作系统 Host OS;运行虚拟机的真实系统称为主机系统。而某些虚拟机监控器可以脱离操作系统直接运行在硬件之上,例子是 VMWARE 的 ESX 产品。
明
阿明
这题我见过:「在虚拟机中运行的操作系统称为」,四个选项是 Host OS、VMM、Guest OS、控制程序。
雅
小雅
答 Guest OS。Host OS 是跑 VMM 的那个,VMM 是程序本身,控制程序是它的别名。接下来是本集硬仗:平台虚拟化的五个子类。第一个,全虚拟化 Full Virtualization:虚拟机模拟了完整的底层硬件,包括处理器、物理内存、时钟、外设等,为原始硬件设计的操作系统或其他系统软件完全不作任何修改就可以在虚拟机中运行——这句就是判据。著名的全虚拟化 VMM 有 Microsoft Virtual PC、VMware Workstation、SUN Virtual Box、Parallels Desktop for Mac 和 QEMU。
明
阿明
不改操作系统的代价是什么?
雅
小雅
代价是要模拟特权指令。x86 里操作系统切换进程页表,要执行特权汇编指令把页表基址写进 CR3 寄存器。硬件不支持虚拟化时,VMM 必须运行在最高优先级完全控制主机系统,Guest OS 要降级运行、不能执行特权操作;它一执行那条指令,主机系统就产生通用保护异常,控制权从 Guest OS 转回 VMM 手中。VMM 分配影子 CR3 寄存器给 Guest OS,填客户机物理地址,再翻译成主机物理地址填入物理 CR3,之后还要处理缺页异常。这套「触发异常、接手模拟」的流程,学名叫 Trap-And-Emulate,后面马上要用。
明
阿明
这么折腾,有没有省事的路?
雅
小雅
两条路。第一条:超虚拟化 Paravirtualization——修改 Guest OS 部分访问特权状态的代码,以便直接与 VMM 交互。部分硬件接口以软件形式提供给客户机操作系统,方式是 Hypercall:VMM 提供给 Guest OS 的直接调用,与系统调用类似。比如把切换页表的代码改为调用 Hypercall,直接完成修改影子 CR3 寄存器和翻译地址。因为不产生额外异常、不用模拟部分硬件执行流程,超虚拟化大幅度提高了性能。著名 VMM 只有两个:Denali、Xen。
明
阿明
考题会怎么下套?
雅
小雅
典型题问「超虚拟化的典型 VMM 产品是」,选项混进 Microsoft Virtual PC、VMware Workstation、Virtual Box 这些全虚拟化名单里的产品,只有 Denali、Xen 是超虚拟化;反过来问全虚拟化 VMM,Xen 就是干扰项。还有「关于全虚拟化的描述哪项正确」:正确项是模拟完整底层硬件、Guest OS 不作修改即可运行;而「需要修改 Guest OS 部分访问特权状态的代码」「通过 Hypercall 与 VMM 交互」是超虚拟化的特征,「只模拟部分底层硬件」是部分虚拟化的特征——三种定义拆开当选项,配错就丢分。
明
阿明
另一条路呢?不改操作系统也不这么慢的。
雅
小雅
改硬件。第二个路子:硬件辅助虚拟化,Hardware-Assisted Virtualization,借助硬件——主要是主机处理器——的支持实现高效的全虚拟化。原文例子:有了 Intel-VT 技术的支持,Guest OS 和 VMM 的执行环境自动完全隔离,Guest OS 有自己的「全套寄存器」,可以直接运行在最高级别,切页表那条汇编指令能直接执行,不用降级也不用异常。必背一句:Intel-VT 和 AMD-V 是目前 x86 体系结构上可用的两种硬件辅助虚拟化技术。干扰项 Hyper-V 是微软产品不是处理器技术,ARM-V 是别的体系结构,都不对。
明
阿明
五子类还剩两个。
雅
小雅
第四个,部分虚拟化 Partial Virtualization:VMM 只模拟部分底层硬件,因此客户机操作系统不作修改就无法在虚拟机中运行,其他程序可能也需要修改。原文定位:通往全虚拟化道路上的重要里程碑,最早出现在第一代分时系统 CTSS 和 IBM M44/44X 实验性的分页系统。
雅
小雅
第五个,操作系统级虚拟化:传统操作系统里所有用户进程本质在同一个操作系统实例中运行,内核或应用程序的缺陷可能影响其他进程;操作系统级虚拟化是在服务器操作系统中使用的轻量级虚拟化技术,内核通过创建多个虚拟的操作系统实例——内核和库——来隔离不同进程,不同实例中的进程完全不了解对方的存在。代表:Solaris Container、FreeBSD Jail 和 OpenVZ。
明
阿明
这题选项会放 VMware ESX、Xen、Virtual PC 来捣乱吧?
雅
小雅
对,只认 Solaris Container、FreeBSD Jail、OpenVZ 这三个,其他全是干扰;判断题挖「操作系统级虚拟化很重」也不对,原文定性是轻量级。
雅
小雅
最后原文补了一段:这种分类并不是绝对的,一个优秀的虚拟化软件往往融合多项技术——VMware Workstation 是著名的全虚拟化 VMM,但它用了动态二进制翻译技术,把对特权状态的访问转换成对影子状态的操作,从而避免低效的 Trap-And-Emulate 处理方式,这与超虚拟化相似,只不过超虚拟化是静态地修改程序代码。问「用什么技术避免低效的 Trap-And-Emulate」,答动态二进制翻译。
明
阿明
五子类齐了:全虚拟化、超虚拟化、硬件辅助虚拟化、部分虚拟化、操作系统级虚拟化。
雅
小雅
还剩原文最后一节:虚拟化的模式。原文说虚拟化不是单独的实体,而是一组模式和技术的集合,这些技术提供支持资源的逻辑表示所需的功能,以及通过标准接口将其呈现给资源消费者所需的功能。一共五种,名字是「资源」和「逻辑表示」的排列组合,容易混。第一种,单一资源多个逻辑表示:只有一个物理资源,但呈现的逻辑表示仿佛包含多个资源,消费者与虚拟资源交互时仿佛自己是唯一的消费者,不考虑正与其他消费者共享。这是虚拟化最广泛使用的模式之一。
明
阿明
一台机器切成好几台,每个租户都以为独占。第二种呢?
雅
小雅
第二种,多个资源单一逻辑表示:多个组合资源表示为提供单一接口的单个逻辑表示形式,适合用多个功能不太强大的资源创建功能强大的虚拟资源。例子两个:存储虚拟化;服务器集群——消费者只与头节点交互,而集群事实上可以包含很多处理器或节点,原文说这就是从 IT 基础设施角度看到的网格功能。
明
阿明
第三种名字跟第二种就差俩字:「在多个资源之间提供单一逻辑表示」。
雅
小雅
对,原文自己都承认这两种非常类似,但差别就是考点。第一,第三种里每个物理资源都是完整的副本,不在逻辑表示层上聚集;第二,每个物理资源都能提供逻辑表示所需的全部功能,不像前一种只能提供部分功能。通俗说:第二种是凑份子合成一个大家伙,第三种是备胎式——虚拟资源根据指定条件选一个物理资源实现,比如资源的利用、响应时间或邻近程度。常见例子是用应用程序容器均衡任务负载:消费者不关心是哪个副本在服务,只希望请求得到处理。
明
阿明
凑份子对备胎,这个我记住了。第四、第五种呢?
雅
小雅
第四种,单个资源单一逻辑表示:表示单个资源的简单模式,仿佛它是别的什么资源一样。例子是启用 Web 的企业后台应用程序——不修改后台程序,创建一个前端表示 Web 界面,映射到应用程序接口,对后台做最少的修改甚至不加修改来重用基本功能。第五种,复合或分层虚拟:前面一种或多种模式的组合,用物理资源提供丰富的功能集。例子是信息虚拟化,比如 OGSA,Open Grid Services Architecture,或者网格计算组件,实际上都是虚拟化的组合或不同层次。
明
阿明
五种模式:一对多、多对一、多选一、一对一、组合。考题怎么出?
雅
小雅
给一句描述让你选模式:「消费者只与头节点交互、集群实际含很多节点」,答多个资源单一逻辑表示;「用应用程序容器均衡负载、消费者不关心哪个副本服务」,答在多个资源之间提供单一逻辑表示。把例子和模式名绑住,比背排列组合靠谱。来,本集必背清单:虚拟化最早出现在 20 世纪 60 年代的 IBM 大型机,70 年代在 System 370 系列流行,靠 VMM 生成虚拟机实例;虚拟化是对计算资源的抽象,不限于虚拟机;三大类是平台、资源、应用程序虚拟化;Guest OS 在虚拟机里,Host OS 跑 VMM,ESX 可以直接跑在硬件上;
雅
小雅
全虚拟化模拟完整硬件、Guest OS 零修改,产品 Virtual PC、VMware Workstation、Virtual Box、Parallels Desktop、QEMU;超虚拟化改特权代码、靠 Hypercall 交互,产品只有 Denali 和 Xen;硬件辅助虚拟化是 Intel-VT 和 AMD-V;部分虚拟化只模拟部分硬件,出自 CTSS 和 IBM M44/44X;操作系统级虚拟化是轻量级的,代表 Solaris Container、FreeBSD Jail、OpenVZ;VMware Workstation 用动态二进制翻译避免低效的 Trap-And-Emulate;五种模式照刚才的例子记。
明
阿明
五子类加五模式,名词密度真高,不过一路对比下来没糊的。
雅
小雅
名词分清了,原理就有底。下一集讲云计算:核心思想那句话、「像水电一样用基础设施」的比喻、六个特点,还有 SaaS、PaaS、IaaS 三种基本类型——三个缩写又是一道必考题,到时候见。