『内存中的操作系统』虚拟化是什么
思维模型
什么是虚拟化
为什么需要虚拟化
虚拟化的本质是什么
1. 什么是虚拟化
我们在计算机入门的操作系统课上, 肯定听说了 CPU 虚拟化, 内存虚拟化等. 在进一步的学习中, 也可能尝试过在 windows 机器上面安装过虚拟机, 当然如果我们学习 Java 等, 肯定也听说过 Java 虚拟机. 而目前流行的云原生技术的基石容器技术就是虚拟化的重要体现. 甚至现在流行的 AR, VR 甚至是元宇宙都包含虚拟化的思想.
那么如果让我们来定义虚拟化的话, 我们应该如何定义呢?我们知道虚拟的对立面就是真实, 而计算机科学中, 虚拟化对应的就是真实物理设备. 其目的是在物理设备的基础上, 实现一个更为强大的"物理设备". 比如常见的聚合, 切分等. 从而打破传统的物理局限,
所以我们可以暂时将虚拟化简单的描述为下面的内容:
虚拟化技术是一种资源管理技术, 将各种物理资源进行抽象, 转换, 然后呈现为一个可供分割并任意组合的资源环境.这些资源不再受物理架构, 地域或者配置的局限.
2. 为什么需要虚拟化
上面我们看到虚拟化的好处, 而这些并不是计算机一开始就有概念的. 事实上一开始的计算机并没有虚拟化这一说. 我们重新回顾计算机的发展, 就能看出虚拟化出现的最本源需求.
1959 年 6 月,牛津大学的计算机教授,克里斯·托弗(Christopher Strachey)在国际信息处理大会(International Conference on Information Processing)上发表了一篇名为《大型高速计算机中的时间共享》(Time Sharing in Large Fast Computer)的学术报告,他在文中首次提出了 “虚拟化” 的基本概念,还论述了什么是虚拟化技术。这篇文章被认为是最早的虚拟化技术论述,从此拉开了虚拟化发展的帷幕。
克里斯·托弗还同时提出了 Multi-Processing(多道程序)这一超前的概念,Multi-Processing 解决了应用程序因等待外部设备而导致处理器空转问题,同时也解决了用户如何调试(Debug)代码的问题。即便在现在看来,多道程序的理念仍是操作系统在 “并发” 领域中的隗宝。
When I wrote the paper in 1959 I, in common with everyone else, had no idea of the difficulties which would arise in writing the software to control either the time-sharing or multi-programming. If I had I should not have been so enthusiastic about them.
——Christopher Strachey
Christopher Strachey
而这片文章出现的背景就是最初的计算机都是串行运行程序的, 一次只能录入一个程序, 当程序 IO 缓慢时, CPU 只能空转等待, 这不仅造成 CPU 的浪费, 也造成了其他硬件资源的浪费. 所以出现了多道程序的概念, 即一次读入多条程序, 当一条程序出现 IO 操作, CPU 切换到下一个程序.
而这个虽然解决了 IO 占用的问题, 但是由于 CPU 时间分配依托于程序本身, 则在需要大量 CPU 计算的程序时, 资源同样被占用, 导致其他硬件资源出现浪费. 于是又出现了分时的概念, 即将 CPU 占用切分为多个极短(1/100sec)的时间片,每个时间片都执行着不同的任务.
而多道程序和分时的结合正是克里斯·托弗这篇文章的核心内容. 通过将分时的概念融入到多道程序设计当中,从而实现一个可多用户操作(CPU 执行时间切片),又具有多程序设计效益(CPU 主动让出)的虚拟化系统。所以这里的虚拟化主要是满足多用户同时操作大型计算机, 使得计算机的资源得到充分利用.
而这正是目前的计算机虚拟化的根本原因, 不浪费计算机资源.
时间来到 1960 中期,IBM 在在 M44/44X 项目基于 IBM 7044(M44)大型机并通过软件和硬件结合的方式来模拟出多个 7044 虚拟机。这个项目实现了多个具有突破性的虚拟化概念,包括部分硬件共享(Partial Hardware Sharing)、分时(Time Sharing)、内存分页(Memory Paging)以及虚拟内存(Virtual Memory)并首次使用了 “Virtual Machine” 这一术语,所以被认为是世界上第一个支持虚拟机的计算机系统。虽然 M44/44X 只实现了部分的虚拟化功能,但其最大的成功在于证明了虚拟机的运行效率并不一定比传统的方式更低。
这里虚拟化开始突破物理资源的局限, 通过结合的方式, 通过资源共享, 能够同时运行更多程序, 进一步来提高实际物理资源的高效利用.
往后,IBM 还陆续推进了 CP-40、CP-67 等研究项目。CP-40 被认为是第一个实现了完全虚拟化的计算机系统。它通过捕获特权指令(例如 I/O 操作)、主存缺页(Page Faults)等异常,然后交由控制程序(Control Program)模拟的方式来实现虚拟机。用户可以在虚拟机之上安装其他的 S/360 操作系统,操作系统之间互相隔离,就像运行在一台独立的机器之上。
所以在增强虚拟机性能的情况下, 虚拟化走向了一个更为强大的道路: 安全隔离, 通过隔离达到上层进程的无感知, 同时对下层硬件资源进行了保护.
1968 年,拉里·罗伯茨提交研究报告《资源共享的计算机网络》,其中着力阐述了让 ARPA(Advanced Research Project Agency,美国高级研究计划署)的计算机互相连接,从而使大家分享彼此的研究成果。根据这份报告组建的国防部 “高级研究计划网”,就是阿帕网(ARPA-NET),Internet(因特网)的前身,拉里·罗伯茨也被称之为阿帕网之父。
1969 年,阿帕网的第一个实用原型问世。将加利福尼亚州大学洛杉矶分校、加州大学圣巴巴拉分校、斯坦福大学、犹他州大学四所大学的 4 台大型计算机进行了互联。
同样在 1969 年,贝尔实验室决定退出 Multics 计划,并由肯·汤普逊(Ken Thompson)独自经过 4 个星期的奋斗,以汇编语言写出了一组内核程序,同时包括一些内核工具程序,以及一个小的文件系统,这就是伟大的 UNIX 操作系统的原型。
这里虚拟化在提升单机性能的情况下, 开始走向了分布式的道路: 通过多个同类资源的联合, 达到更为强大的资源环境.
在分布式的基础上, 虚拟化也带来了其他的好处: 负载均衡, 动态迁移, 局部容灾等. 同时也满足不同类型的资源协同工作.向上提供了统一的管理接口, 屏蔽了下层资源的异构性.
所以回到我们一开始的问题, 为什么需要虚拟化:
提高硬件资源的使用效率
安全隔离
提高稳定性
通过联合资源, 实现更为强大的资源环境
支持异构资源的结合, 并保证了系统的健壮性.
3. 虚拟化的本质是什么
其实从上面计算机的历史来看, 虚拟化最根本的原因其实是有效利用昂贵的硬件资源和物理资源出现瓶颈的时候. 在一开始计算资源比较昂贵的时候, 就出现了 CPU 虚拟化. 后来存储资源比较昂贵的时候, 就出现了内存虚拟化, 文件系统虚拟化. 单机资源充足导致单个用户无法完全使用时, 就出现了操作系统虚拟化. 单机资源过于昂贵时, 就出现了分布式, 分布式中当网络成为瓶颈的时候, 就出现了网络虚拟化. 在现在 AI 不断发展的背景下, 显示资源昂贵就出现了 GPU 虚拟化.
所以虚拟化的目的就是在硬件解决不了的问题软件来解, 化用电影龙门飞甲中的一句话:
硬件管得了我软件要管, 硬件管不了的我软件也要管, 这就是虚拟化.
通过硬件和软件的结合, 来满足现实中对资源越来越高的需求.这就是虚拟化的本质
参考文献:
[1] 虚拟化技术发展编年史 : http://www.woshipm.com/it/2808541.html
[2] 云计算与虚拟化技术发展编年史 : https://www.cnblogs.com/jmilkfan-fanguiju/p/11825020.html
版权声明: 本文为 InfoQ 作者【soolaugust】的原创文章。
原文链接:【http://xie.infoq.cn/article/52b9b08450ba599f591f6e4d0】。未经作者许可,禁止转载。
评论