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

一、前世
早期计算机的价格非常昂贵,一台计算机可能需要花费几十万甚至上百万美元。例如,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 对象模型详…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
