虚拟机的发展史:从分时系统到容器化

一、前世
早期计算机的价格非常昂贵,一台计算机可能需要花费几十万甚至上百万美元。例如,ENIAC计算机,作为世界上第一台通用电子数字计算机,当时的造价约为48万美元。科学家或者工程师们需要计算机的能力,但是买不起整台计算机。
因此,为了尽可能地利用这一宝贵的资源,分时系统应运而生。在这个系统中,终端本身并没有计算能力,它们通过电话线连接到中心计算机,然后中心计算机会自动给程序分配计算时间,如同一位严格的时间管理员。这有点操作系统的感觉,只不过分时系统更原始一些。
随着技术的发展,计算机的处理能力日益强大,价格也越来越亲民,普通人就可以拥有一台自己独立的计算机。但是单个计算机内运行的程序也越来越复杂,为了更好的在多个程序之间分配计算资源,后边又发展出了操作系统,特别是操作系统提供的进程和线程技术。
进程为程序可使用的资源划定了一个边界,比如程序可使用的内存、可访问的API,都被限定在一个范围之内;线程则为CPU资源的分配提供了便利,根据分配算法,每个程序可以获取一定的CPU执行时间。
二、虚拟机的需求
虽然拥有计算资源的成本降低了很多,操作系统也提供了很好的软件治理方法,但是我们仍面临一些挑战。
首先是成本和效率方面:
-
资源闲置:想象一下,如果你有一台超级计算机,但只在某些时段需要大量的计算,却需要一直准备着它,那么在其他大量的闲置时间,你可能会想把它们租出去,让这些时间也能创造价值。比如对于阿里巴巴来说,为了应对双十一可能需要准备大量的计算资源,但是一年中的其它时候很多计算资源就闲置起来了。
-
需求和供给不匹配:如果你的计算机是8核32G,但租户只需要1核2G,这就好比你有一栋大楼,但租户只需要一间房。同样的,如果你的计算机出租的最小时间单位是3个月,而租户只需要使用3分钟,这就如同租户只想在你的大楼里开一个小时的会议,但你却要求他租一个季度。这显然会导致资源的浪费。
其次是多租户延伸出来的隔离方面的更高要求:
-
隔离的需求:不同的应用程序可能会产生冲突或影响彼此的正常运行。如果没有进行有效的隔离,一个应用程序的错误或异常可能会影响到其他应用程序,甚至导致整个系统的不稳定或崩溃。比如对于Python这种程序,不同的版本无法运行在同一个环境中,必须进行某种隔离。这个问题对于多租户系统尤为重要,不仅要降低相互之间的影响,还要严格限制相互之间的资源访问权限,避免出现信息泄漏。操作系统自身提供的隔离能力不能完全满足这种需求。
虚拟机技术就是为了解决这些问题而出现的。
三、虚拟机的发展史
1. 模拟器
模拟器是虚拟机的前身,它通过在宿主机上运行一个应用程序,模拟客户机计算机系统的API和指令,一条条解释执行。就像是一个翻译,把客户机的指令翻译成宿主机能理解的语言。像我们常见的Android模拟器、街机游戏模拟器就是这样的例子。
但模拟器也有其局限性,如果客户机依赖特定电路,则很难模拟;而且运行起来太慢,不能满足用户需求。然而,它的优点也很明显,那就是可以跨硬件平台。
2. 虚拟机
虚拟机的诞生标志着我们向全虚拟化迈出了一大步。在虚拟机中,我们引入了虚拟机监视器,它可以完整映射客户机的CPU指令集、IO操作和中断,而不需要跨硬件平台,也无需更改客户机操作系统。
虚拟机分为Type2和Type1两种类型。在Type2虚拟机中,所有的客户机都通过虚拟机监视器与宿主机交互,虚拟机监视器是宿主机上的一个应用软件,收到客户机的指令时转交给宿主机处理。这种模式和模拟器的处理模式类似,一般只用在个人电脑上。好处就是比较通用,可以跨硬件平台,缺点还是效率比较低,运行较慢。
而在Type1虚拟机中,所有的客户机都通过虚拟机监视器与宿主机交互,但虚拟机监视器是宿主机操作系统内核的一个模块,收到客户机的指令时直接提交给硬件执行。这就好像是把虚拟机监视器提升为了操作系统的一部分,使其能更高效地处理客户机的请求。这特别适合对硬件和软件系统要求比较固定的场景,比如服务器程序。
3. 容器
随着技术的进步,我们又迎来了容器时代,这个时代以Docker的诞生为始。Docker可以称为操作系统级的虚拟机,其本质是一种资源隔离技术。它类似于早年的虚拟主机技术,但在资源管理方面做得更好。最大的优点是它无需客户机操作系统,可以直接在宿主机操作系统上运行,大大提高了资源的利用率。
随着容器化技术的大规模普及,容器管理技术也蓬勃发展起来。为了解决在大规模、分布式环境下如何有效地管理和调度容器的问题,Kubernetes(简称K8s)应运而生,它是一个开源的容器编排系统,在微服务架构日益流行的今天,它的出现无疑提供了一种高效、灵活的解决方案。从某种角度上看,Kubernetes也是一个虚拟机,只不过是把之前的虚拟化方案反了过来,之前都是在单个物理机中虚拟多个系统,而Kubernetes是把众多容器虚拟化为一个系统。
四、虚拟机的未来
虽然虚拟机技术已经相当成熟,但我们仍可以期待未来会有更多创新和突破。
虚拟化与人工智能结合:虚拟化技术可以与人工智能相结合,提高虚拟机的自动化管理和优化能力,提升使用效率,降低运维成本。
虚拟机的性能优化:虽然Docker等轻量级虚拟化技术已经大大提高了资源的利用率,但在某些场景下,如高性能计算和实时系统中,虚拟机的性能开销和资源分配仍然是一个问题。因此,如何通过优化虚拟机监视器和虚拟化技术,进一步提升虚拟机的使用效率,将是未来的重要研究方向。
虚拟化技术的安全性增强:随着虚拟机技术的普及,如何保证虚拟机的安全性也将成为一个重要的问题。例如,如何防止虚拟机逃逸攻击,如何在容器之间实现安全的数据隔离等,都需要我们进行深入的研究。
总结
虚拟机的发展历程充分体现了技术的不断进步和我们对资源利用率提升的不懈追求。从分时系统到模拟器,再到虚拟机,最后到Docker,每一步都是为了更好地解决资源浪费和需求与供给不匹配的问题。
相关文章:
虚拟机的发展史:从分时系统到容器化
一、前世 早期计算机的价格非常昂贵,一台计算机可能需要花费几十万甚至上百万美元。例如,ENIAC计算机,作为世界上第一台通用电子数字计算机,当时的造价约为48万美元。科学家或者工程师们需要计算机的能力,但是买不起整…...
季涨约3~8%,DRAM合约价大幅回升 | 百能云芯
据TrendForce的研究显示,第4季DRAM与NAND Flash均价将开始全面上涨。特别是DRAM,预计第4季的合约价将季涨幅约在3%到8%之间。然而,这波上涨是否能持续,取决于供应商是否坚守减产策略以及实际需求的回升程度,尤其值得关…...
LocalDate的用法
日期时间转换 2023-03-30 14:25:00.000 DateTimeFormat(pattern "yyyy-MM-dd HH:mm:ss:sss")private LocalDateTime requestTimeStamp; 2021-06-18T10:46:19.67378508:00 new SimpleDateFormat("yyyy-MM-ddTHH:mm:ss:sssXXX");yyyy-mm-dd hh:mm:ss.sss 05…...
React通过ref获取子组件的数据和方法
父组件 1) ref必须传值, 否则childRef拿不到子组件的数据和方法 注意: 不一定使用app组件, 其他的任何父组件都可以 import "./App.css"; import React, { useEffect, useRef } from "react"; import RefToGetChild from "./components/RefToGetCh…...
Enhancing Self-Consistency and Performance of Pre-Trained Language Model
本文是LLM系列文章,针对《Enhancing Self-Consistency and Performance of Pre-Trained Language Models through Natural Language Inference》的翻译。 通过自然语言推理增强预训练语言模型的自一致性和性能 摘要1 引言2 相关工作3 通过关系检测进行一致性校正4 …...
安防监控视频汇聚平台EasyCVR视频广场搜索异常,报错“通道未开启”的问题排查与解决
安防视频监控系统EasyCVR视频汇聚平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、…...
css 星星闪烁加载框
今天带来的是普灵普灵的loader闪烁加载框 效果如下 开源精神给我们带来了源码 ,源码如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, in…...
代码随想录算法训练营第二十二天丨 二叉树part09
669. 修剪二叉搜索树 思路 递归法 从图中可以看出需要重构二叉树,想想是不是本题就有点复杂了。 其实不用重构那么复杂。 在上图中我们发现节点0并不符合区间要求,那么将节点0的右孩子 节点2 直接赋给 节点3的左孩子就可以了(就是把节点…...
Apipost连接数据库详解
Apipost提供了数据库连接功能,在接口调试时可以使用数据库获取入参或进行断言校验。目前的Apipost支持:Mysql、SQL Sever、Oracle、Clickhouse、达梦数据库、PostgreSQL、Redis、MongoDB 8种数据库的连接操作 新建数据库连接: 在「项目设置…...
让 Visual Studio 用上 ChatGPT
一、简介 Visual chatGPT Studio 是 Visual Studio 的一个免费扩展,它直接在 IDE 中添加了 chatGPT 功能。它允许用户以可以根据菜单功能的方式使用 chatGPT。 二、功能介绍 该扩展提供了一组使用 ChatGPT 命令,可以在编辑器中选择你需要处理的代码或…...
如何删除错误堆栈里的数据
修改某个主数据。然后发现N年前,某位开发在DTP上做了一个错误堆栈。 这里面有很多历史错误信息,有几千条了,一条条删肯定不可能。 如果不删除,DTP增量无法激活,明天处理链肯定出问题。 于是找到一位印度大神的方法&a…...
k8s使用minio分布式集群作为存储--基础配置篇
背景:minio分布式集群是单独的服务,并没有被k8s管理,k8s与minio集群在不同的服务器上部署,k8s需要使用minio分布式集群作为k8s集群的配置文件及其他文件的存储介质。 1、安装fuse: sudo yum install fuse1.1查询是否有fusemount3 sudo find / -name fusermount31.2确认…...
@Autowired 到底是怎么把变量注入进来的?
[toc] 在 Spring 容器中,当我们想给某一个属性注入值的时候,有多种不同的方式,例如可以通过构造器注入、可以通过 set 方法注入,也可以使用 Autowired、Inject、Resource 等注解注入。 今天我就来和小伙伴们聊一聊,Au…...
【Python学习笔记】函数
1. 函数组成 Python中,我们是这样定义函数的: def function(para1, para2):print("func start")print(para1)print(para2)print("func end")print("让技术总监面试 求职者")return "func return"def 是关键字…...
简单实现一个todoList(上移、下移、置顶、置底)
演示 html部分 <!DOCTYPE html> <html> <head><title>表格示例</title> </head> <body><table border"1"><thead><tr><th>更新时间</th><th>操作</th></tr></thead…...
计算机视觉:池化层的作用是什么?
本文重点 在深度学习中,卷积神经网络(CNN)是一种非常强大的模型,广泛应用于图像识别、目标检测、自然语言处理等领域。而池化层作为CNN中的一个关键步骤,扮演着优化神经网络、提升深度学习性能的重要角色。本文将深入探讨池化层的作用及其重要性,帮助读者更好地理解和应…...
luffy项目前端创建、配置、解决跨域问题、后端数据库迁移
前端 创建前端vue 使用vue-cil创建前端将无用的东西删除 配置 跟后端交互:axios 安装插件:cnpm install -S axios在main.js中写import axios from "axios"; Vue.prototype.$axios axios后续使用就直接this.$axios即可 操作cookie&am…...
电商数据API接口:新服务下电商网站、跨境电商独立站,移动APP的新型拉新武器
互联网的发展改变了我们的生活方式,也改变了企业商家们的营销方式,越来越多的企业商家把产品营销从线下转到线上,选择在线商城、移动APP、微信公众号等互联网工具进行营销活动。而随着营销模式的多元化和电子支付渠道的进一步发展,…...
多线程并发篇---第十一篇
系列文章目录 文章目录 系列文章目录前言一、CAS的原理二、CAS有什么缺点吗?三、引用类型有哪些?有什么区别?前言 一、CAS的原理 CAS叫做CompareAndSwap,比较并交换,主要是通过处理器的指令来保证操作的原子性,它包含 三个操作数: 变量内存地址,V表示旧的预期值,A表示…...
JVM第六讲:JVM 基础 - Java 内存模型引入
JVM 基础 - Java 内存模型引入 很多人都无法区分Java内存模型和JVM内存结构,以及Java内存模型与物理内存之间的关系。本文是JVM第六讲,从堆栈角度引入JMM,然后介绍JMM和物理内存之间的关系, 为后面JMM详解, JVM 内存结构详解, Java 对象模型详…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...
