当前位置: 首页 > 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 对象模型详…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...