当前位置: 首页 > news >正文

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

一、前世

早期计算机的价格非常昂贵,一台计算机可能需要花费几十万甚至上百万美元。例如,ENIAC计算机,作为世界上第一台通用电子数字计算机,当时的造价约为48万美元。科学家或者工程师们需要计算机的能力,但是买不起整台计算机。

因此,为了尽可能地利用这一宝贵的资源,分时系统应运而生。在这个系统中,终端本身并没有计算能力,它们通过电话线连接到中心计算机,然后中心计算机会自动给程序分配计算时间,如同一位严格的时间管理员。这有点操作系统的感觉,只不过分时系统更原始一些。

随着技术的发展,计算机的处理能力日益强大,价格也越来越亲民,普通人就可以拥有一台自己独立的计算机。但是单个计算机内运行的程序也越来越复杂,为了更好的在多个程序之间分配计算资源,后边又发展出了操作系统,特别是操作系统提供的进程和线程技术。

进程为程序可使用的资源划定了一个边界,比如程序可使用的内存、可访问的API,都被限定在一个范围之内;线程则为CPU资源的分配提供了便利,根据分配算法,每个程序可以获取一定的CPU执行时间。

二、虚拟机的需求

虽然拥有计算资源的成本降低了很多,操作系统也提供了很好的软件治理方法,但是我们仍面临一些挑战。

首先是成本和效率方面:

  1. 资源闲置:想象一下,如果你有一台超级计算机,但只在某些时段需要大量的计算,却需要一直准备着它,那么在其他大量的闲置时间,你可能会想把它们租出去,让这些时间也能创造价值。比如对于阿里巴巴来说,为了应对双十一可能需要准备大量的计算资源,但是一年中的其它时候很多计算资源就闲置起来了。

  2. 需求和供给不匹配:如果你的计算机是8核32G,但租户只需要1核2G,这就好比你有一栋大楼,但租户只需要一间房。同样的,如果你的计算机出租的最小时间单位是3个月,而租户只需要使用3分钟,这就如同租户只想在你的大楼里开一个小时的会议,但你却要求他租一个季度。这显然会导致资源的浪费。

其次是多租户延伸出来的隔离方面的更高要求:

  1. 隔离的需求:不同的应用程序可能会产生冲突或影响彼此的正常运行。如果没有进行有效的隔离,一个应用程序的错误或异常可能会影响到其他应用程序,甚至导致整个系统的不稳定或崩溃。比如对于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. 修剪二叉搜索树 思路 递归法 从图中可以看出需要重构二叉树&#xff0c;想想是不是本题就有点复杂了。 其实不用重构那么复杂。 在上图中我们发现节点0并不符合区间要求&#xff0c;那么将节点0的右孩子 节点2 直接赋给 节点3的左孩子就可以了&#xff08;就是把节点…...

Apipost连接数据库详解

Apipost提供了数据库连接功能&#xff0c;在接口调试时可以使用数据库获取入参或进行断言校验。目前的Apipost支持&#xff1a;Mysql、SQL Sever、Oracle、Clickhouse、达梦数据库、PostgreSQL、Redis、MongoDB 8种数据库的连接操作 新建数据库连接&#xff1a; 在「项目设置…...

让 Visual Studio 用上 ChatGPT

一、简介 Visual chatGPT Studio 是 Visual Studio 的一个免费扩展&#xff0c;它直接在 IDE 中添加了 chatGPT 功能。它允许用户以可以根据菜单功能的方式使用 chatGPT。 二、功能介绍 该扩展提供了一组使用 ChatGPT 命令&#xff0c;可以在编辑器中选择你需要处理的代码或…...

如何删除错误堆栈里的数据

修改某个主数据。然后发现N年前&#xff0c;某位开发在DTP上做了一个错误堆栈。 这里面有很多历史错误信息&#xff0c;有几千条了&#xff0c;一条条删肯定不可能。 如果不删除&#xff0c;DTP增量无法激活&#xff0c;明天处理链肯定出问题。 于是找到一位印度大神的方法&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 容器中&#xff0c;当我们想给某一个属性注入值的时候&#xff0c;有多种不同的方式&#xff0c;例如可以通过构造器注入、可以通过 set 方法注入&#xff0c;也可以使用 Autowired、Inject、Resource 等注解注入。 今天我就来和小伙伴们聊一聊&#xff0c;Au…...

【Python学习笔记】函数

1. 函数组成 Python中&#xff0c;我们是这样定义函数的&#xff1a; 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创建前端将无用的东西删除 ​配置 跟后端交互&#xff1a;axios 安装插件&#xff1a;cnpm install -S axios在main.js中写import axios from "axios"; Vue.prototype.$axios axios后续使用就直接this.$axios即可 操作cookie&am…...

电商数据API接口:新服务下电商网站、跨境电商独立站,移动APP的新型拉新武器

互联网的发展改变了我们的生活方式&#xff0c;也改变了企业商家们的营销方式&#xff0c;越来越多的企业商家把产品营销从线下转到线上&#xff0c;选择在线商城、移动APP、微信公众号等互联网工具进行营销活动。而随着营销模式的多元化和电子支付渠道的进一步发展&#xff0c…...

多线程并发篇---第十一篇

系列文章目录 文章目录 系列文章目录前言一、CAS的原理二、CAS有什么缺点吗?三、引用类型有哪些?有什么区别?前言 一、CAS的原理 CAS叫做CompareAndSwap,比较并交换,主要是通过处理器的指令来保证操作的原子性,它包含 三个操作数: 变量内存地址,V表示旧的预期值,A表示…...

JVM第六讲:JVM 基础 - Java 内存模型引入

JVM 基础 - Java 内存模型引入 很多人都无法区分Java内存模型和JVM内存结构&#xff0c;以及Java内存模型与物理内存之间的关系。本文是JVM第六讲&#xff0c;从堆栈角度引入JMM&#xff0c;然后介绍JMM和物理内存之间的关系, 为后面JMM详解, JVM 内存结构详解, Java 对象模型详…...

机房安全管理制度

#安全运维管理制度# 1、总则 1.1、目的 为进一步规范XXXXX单位机房安全管理工作&#xff0c;防止未经授权的访问&#xff0c;做好机房的防火、防盗等工作&#xff0c;确保XXXXX单位机房物理设施的安全&#xff0c;制定本制度。 1.2、范围 本制度适用于XXXXX单位机房的安全…...

【自然语言处理】— 隐马尔可夫模型详解、例解

【自然语言处理】— 隐马尔可夫模型 【自然语言处理】— 隐马尔可夫模型引例隐马尔可夫模型概念隐马尔可夫模型的关键隐马尔可夫模型的数学表示隐含状态与观测结果状态转移矩阵观测概率矩阵初始状态概率向量 小结 【自然语言处理】— 隐马尔可夫模型 引例 假设有三种不同的骰…...

运行的 akrun 会打印信息到控制台,如何取消打印 -- chatGPT

gpt: 如果运行的程序 akrun 打印信息到控制台&#xff0c;但您希望取消或禁止它的输出&#xff0c;可以尝试以下方法&#xff1a; 1. **重定向输出到空文件**&#xff1a;您可以将程序的标准输出重定向到一个空文件&#xff0c;从而禁止信息输出到控制台。执行以下命令&#…...

【React】03-React面向组件编程2

文章目录 2.6. 组件的生命周期2.6.1. 效果2.6.2. 理解2.6.3. 生命周期流程图(旧)2.6.4. 生命周期流程图(新)2.6.5. 重要的勾子2.6.6. 即将废弃的勾子2.6.7 getSnapshotBeforeUpdate 2.7. 虚拟DOM与DOM Diffing算法2.7.1. 效果2.7.2. 基本原理图 2.6. 组件的生命周期 2.6.1. 效…...

【python编程】python无法import模块的一种原因分析

python系统路径添加错误 报错原因原因分析解决办法补充 最近写代码的时候遇到一个问题&#xff0c;就是想添加工程下fu_convert文件夹下自己编写的convert_fw.py模块&#xff0c;但是出现报错&#xff0c;是个比较低级的问题&#xff0c;但还是简单记录一下 报错原因 无法找到…...

vue3.0与vue2.0的区别

前言 Vue 3.0是一个用于构建用户界面的JavaScript框架。相比于Vue 2.x&#xff0c;Vue 3.0在性能、体积和开发体验上都有了很大的提升。 以下将从不同的角度上去分析Vue 3.0与Vue 2.0的区别&#xff1a; 一、项目架构 从项目搭建和打包工具的选择来看&#xff1a; Vue 2.0 中…...

09_Webpack打包工具

1 初识Webpack 1.1 什么是Webpack Webpack打包工具对项目中的复杂文件进行打包处理&#xff0c;可以实现项目的自动化构建&#xff0c;并且给前端开发人员带来了极大的便利。 目前&#xff0c;企业中的绝大多数前端项目是基于Webpack打包工具来进行开发的。 1.2 Webpack的安…...

小程序 | 小程序后端用什么语言开发比较好

目录 ♣️ 引言 选择合适的后端语言 推荐使用Node.js Node.js 的优点 其他备选语言 ♣️ 小结 ♣️ 引言 小程序的兴起已经成为了当今移动互联网时代的热点之一&#xff0c;而小程序后端的好坏直接影响着小程序的使用体验&#xff0c;因此&#xff0c;选择一种好的语言来…...

Websocket升级版

之前写过一个关于websocket的博客&#xff0c;是看书时候做的一个demo。但是纸上得来终觉浅&#xff0c;这次实战后实打实的踩了不少坑&#xff0c;写个博客记录总结。 1.安装postman websocket接口调试&#xff0c;需要8.5以及以上版本的postman 先把以前的卸载&#xff0c…...

基于音频SOC开发板的主动降噪ANC算法源码实现

基于音频SOC开发板的主动降噪ANC算法源码实现 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群附加赠送降噪开发资料,...