虚拟化技术及实时虚拟化概述

news2024/11/25 16:20:48

版权声明:本文为本文为博主原创文章,未经本人同意,禁止转载。如有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/

实时虚拟化技术是一种针对实时应用场景的虚拟化技术,它要求在保证虚拟化优势的同时,满足严格的时间约束和高可靠性要求。本系列文章文将对实时虚拟化技术进行介绍,分析其原理、特征、关键技术和难点,以及应用场景。

一、前言

  • 虚拟化技术是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。
  • 虚拟化技术最早出现在20世纪60年代的IBM大型机系统,在70年代的System 370系列中逐渐流行起来。随着云计算、物联网等新兴技术的发展,虚拟化技术也得到了广泛的应用和创新。
  • 虚拟化技术可以提高资源利用率、简化管理复杂度、增强系统灵活性和可扩展性等优势。同时,也带来了一些新的需求和挑战,如如何保证虚拟环境中的实时性、可靠性、安全性等。

二、分时系统

现代系统级虚拟机的快速发展,实际上是源于分时系统的设计思路。主要解决物理硬件资源共享和利用的问题,分时系统起源可以追溯到上世纪60年代的分时系统,上世纪 60 年代之前,计算机还都是大型机,主要用于科学研究使用,是异常昂贵的设备,因为大型机价格昂贵,所以如何让多个用户共享一台大型机成为很多人思考的问题,而后诞生了分时操作系统。

1954年,约翰·瓦格纳·巴克斯(John Warner Backus,后面设计了FORTRAN语言) 就在MIT举办的“数学计算机高级编码暑假班”上提出了分时系统的想法,他指出,使用分时(time sharing)方法,一台大计算机就可以当做很多个小的来用,每个用户只需要一个阅读工作站(reading station)。

1962年秋,BBN分时操作系统在诞生BBN公司诞生,BBN分时操作系统基于PDP-1b开发,系统的内存空间为8192字,其中4096保留给分时系统使用,另外4096字给用户使用。系统设计的基本思路是根据当前用户来切换用户部分内存,成为内存交换(memory swap)。当切换用户时,把 上一个用户使用的内存交换到高速的磁鼓中保存,并把新用户的数据从磁鼓中加载到内存中,磁鼓上的空间被分为22个区域,每个区域大小为4096字。每个用户在获得使用机会时,它的程序可以运行140毫秒。

在软件历史上,BBN的分时操作系统是较早实践和投入使用的多用户操作系统,为后来UNIX等操作系统的出现奠定了基础1

分时系统使得个人用户、小公司或机构不必自己购买昂贵的电脑。只需要购买一个输入输出终端,就像购买一套鼠标、键盘和显示器等设备,然后通过电话线连接到机房中的大型计算机。该计算机会自动分配计算时间给程序或任务。

三、虚拟化介绍

那么,什么是虚拟化技术呢?虚拟化技术同样是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境,进而发挥计算机硬件的最大利用率。

虚拟化技术的发展经历了几个阶段,虚拟化技术最早出现在大型机时代,用于将硬件资源划分为多个虚拟计算机。上世纪60年代,IBM开始在其CP-40大型机系统中尝试虚拟化的实现,后来在System/360-67中采用,并衍生出VM/CMS到后来的z/VM等产品线。

随着时间推移,微型计算机和PC能够提供更为有效、经济的方法来对资源进行分配和处理,所以到20世纪80年代之后,虚拟技术不再被广泛使用2。 直到 21 世纪,随着云计算的兴起,虚拟化技术再次成为热门话题,虚拟化技术也得到了广泛的应用和创新,并逐渐走向成熟。所以虚拟化技术是云计算的核心技术之一,通过虚拟化技术,可以将一台物理服务器划分为多个虚拟服务器,并将其作为服务提供给用户,实现资源的动态调度和按需使用。

虚拟化分为很多种,服务器虚拟化只是其中之一,还可以用于创建存储、网络和其他物理机的虚拟表示。常见的类型有服务器虚拟化、桌面虚拟化、网络虚拟化、存储虚拟化、数据虚拟化应用虚拟化等。它们都可以帮助用户节省成本,简化管理,提高效率和灵活性。无论是公有云还是私有云,都离不开虚拟化技术的支持,它让云提供商和云用户都能够根据不同的业务需求,灵活地扩展计算资源。

四、虚拟化实现方式及分类

虚拟化技术听起来很高大上,但虚拟化技术应用场景不只有云计算,它其实很早就在我们身边,给我们带来了很多便利。

我们的个人电脑越来越强大,我们不需要花钱买新的硬件,只需要下载一些免费或者低价的虚拟化软件,比如 VMware Workstation Player 或者 Oracle VM VirtualBox虚拟化软件,就可以在一台电脑上同时使用多种操作系统,无论是 Windows,Mac 还是 Linux,都可以随心所欲地切换。这样就可以在同一个设备上完成不同的任务,比如开发软件,或者学习新的技能,体验不同的OS;再比如,电脑上安装安卓模拟器来玩安卓游戏或做安卓APP开发调试等等。

虚拟化应用场景很多,实现虚拟化的方式有全虚拟化半虚拟化硬件辅助完全虚拟化操作系统级虚拟化等。

  • 全虚拟化技术通过在客户操作系统和硬件之间捕捉和处理那些对虚拟化敏感的特权指令,使客户操作系统无需修改就能运行,该技术在 1999 年出现,里面又包含了解释执行(如 Bochs)、扫描与修补(如 VirtualBox)、二进制代码翻译(如 Vmware、Qemu)三种技术。

  • 半虚拟化技术需要对客户操作系统进行一些修改,使客户操作系统意识到自己是处于虚拟化环境的,该技术在 2003 年出现,也叫类虚拟化技术,典型的 Hypervisor 代表是 Xen。

  • 硬件辅助完全虚拟化技术利用处理器中的虚拟化扩展(如Intel 的 VT-x 和 AMD 的 AMD-V)来加速虚拟机的性能,该技术在 2006 年出现。

    • 硬件结构支持,且有相应实现:包括
      • 模式切换:Host CPU<->Guest CPU切换,即CPU资源隔离。
      • 二阶段地址转换:GVA->GPA和GPA->HPA, 即内存资源隔离。
      • 中断控制器支持:中断注入和透传,即中断资源隔离。
      • IOMMU: Input-Output Memory Management Unit, DMA Remapping。DMA和设备访问内存隔离。
    • 相关软件支持:包括
      • Firmware:OpenSBI, BIOS
      • Hypervisor:KVM,XEN
      • I/O用户态:qemu
      • OS

    当前云计算普遍使用的主流虚拟化技术,就是以 KVM 为代表的硬件辅助的完全虚拟化。

  • 操作系统级虚拟化技术则通过在同一台物理服务器上运行多个隔离的用户空间实例来实现虚拟化,也就是容器技术,容器是一种轻量级的虚拟化技术,能够在单一主机上提供多个隔离的操作系统环境。

上面简单介绍了虚拟化的实现方式,不同的实现方式效率不同,它们之间暗含了虚拟化技术发展经历。如果我们想知道一个虚拟化产品基于哪些虚拟化技术,我们一般听到的是type1和type2这类词,这指的是这些虚拟化技术的分类,分为以下几种:

模拟器

模拟器是指基于全虚拟化技术实现的一种软件,可以模拟一个不同于本身的计算机系统或者硬件设备,并且可以执行该系统或者设备的程序或者指令。模拟器通常需要对目标系统或者设备的指令进行解释或者翻译,然后在本身的系统或者设备上执行。在这个过程中,我们把原先的操作系统叫作宿主机(Host OS),把能够有能力去模拟指令执行的软件,叫作模拟器(Emulator),而实际运行在模拟器上被“虚拟”出来的系统呢,我们叫客户机(Guest VM)。

这种方式的优点是可以实现跨硬件平台的运行,比如在x86平台上模拟ARM平台。缺点是性能很差,因为有很多解释或者翻译工作。另外是做不到精确模拟,一些模拟的硬件程序运行要依赖特定的电路乃至电路特有的时钟频率,想要通过软件达到 100% 模拟是很难做到。这种方式主要用于游戏、教育、娱乐等场景,提供趣味、创新、体验等功能。常见的模拟器有Android模拟器、MAME、QEMU,游戏模拟器等。

Type2虚拟化

Type2虚拟化也叫主机式虚拟化**,是指在一个已经安装了操作系统(Host OS)的物理硬件上,运行一个虚拟机监视器(Hypervisor),它作为一个应用程序,管理多个虚拟机(Guest VM)。每个虚拟机也有自己的操作系统和应用程序,但是它们需要通过Hypervisor和Host OS来访问硬件资源。这种虚拟化技术的优点是兼容性好,因为可以在各种操作系统上运行,而且可以支持不同的硬件平台。缺点是性能低,因为有额外的中间层和转换开销,客户机的操作系统把最终到硬件的所有指令,先发送给虚拟机监视器。虚拟机监视器再把这些指令交给宿主机的操作系统去执行。

Type2虚拟化只是把在模拟器里的指令翻译工作,挪到了虚拟机监视器里。主要用在我们日常的个人电脑和开发测试场景,提供方便、快速、多样的计算环境。常见的Type2虚拟化产品有VirtualBox、Vmware workstation、Xvisor、Lguest等。

Type1 虚拟化

Type1虚拟化:也叫裸机虚拟化,是指直接在物理硬件上运行一个虚拟机监视器(Hypervisor),一般虚拟机监视器其实并不是一个操作系统之上的应用层程序,可能是一个嵌入在操作系统内核里面的一部分,能够直接操作控制硬件并管理多个虚拟机(Guest VM)。每个虚拟机都有自己的操作系统和应用程序,可以完全独立运行。Type 1虚拟化通常使用半虚拟化、硬件辅助虚拟化或一些混合形式来实现。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NitQL95N-1689511772097)(D:\文档\笔记-博客\Gitee\learnnotes\ethercat\虚拟化\type1vm.png)]

Type1与type2虚拟的主要差别是type1虚拟机监视器(Hypervisor)能直接操作控制硬件。这种虚拟化技术的优点是性能高,因为虚拟机可以直接访问硬件资源,没有多余的开销。缺点是兼容性差,不能像 Type-2 型那么好,因为不同的硬件平台可能需要不同的Hypervisor。这种虚拟化技术主要用于数据中心和云计算场景,提供高效、灵活、可扩展的计算资源。常见的Type1虚拟化产品有Linux KVM、VMWare
ESX Server、Xen、微软 Hyper-V、Xvisor、OKL4 Microvisor等。

硬件分区虚拟化

这里要特别说一下我们工业实时控制、医疗、汽车、通信等实时实时场景下的虚拟化,因为实时应用场景的特殊性,通常Gust OS不仅包含Windows/linux等系统负责人机交互等非实时工作,Gust OS还包含RTOS或裸机应用程序,负责实时相关控制和应用。

为保证Gust OS的实时性,Gust OS必须独占硬件资源,CPU、RAM或设备等资源静态分配,系统运行过程中非特殊情况严禁Hypervisor介入,且不能像云计算场景下Hypervisor可以将多个Gust OS在同一个CPU上调度,否则会引入额外的延迟,无法保证Gust OS运行的确定性,实现这类应用的虚拟化称为硬件分区虚拟化。因为硬件分区虚拟化Hypervisor直接控制硬件,所以属于Type1虚拟化类型。

硬件分区虚拟化常见方案有西门子jailhouse、QNX Hypervisor、vxworks Hypervisor、sel4、ACRN等。

jailhouse项目负责人与xenomai X86平台maintainer是同一人 jan-kiszka。

注意:虽然Hypervisor实现了硬件分区,但判断一个分区Hypervisor,是否是实时Hypervisor,要看GustOS运行过程中是否需要Hypervisor介入,如果实时操作系统运行过程中需要Hypervisor介入,Gust RTOS实时性取决于Hypervisor介入时间,实时性可能完全没有保证,那这个Hypervisor就不是一个实时Hypervisor。

容器(Container)

虽然,Type-1 型的虚拟机看起来已经没有什么硬件损耗。但是,这里面还是有一个浪费的资源。那就是每一个虚拟机,都运行了一个属于自己的单独的操作系统。

2005 年,诞生了一种新的虚拟化技术,容器技术。容器是一种轻量级的虚拟化技术,能够在单一主机上提供多个隔离的操作系统环境,通过一系列的命名空间隔离进程,每个容器都有唯一的可写文件系统和资源配额。

容器技术是一种利用操作系统级虚拟化来实现,操作系统内核提供的资源隔离和控制功能,创建出多个相互隔离但共享内核的用户空间实例。容器技术的的代表项目就是 Docker,Docker 是 Docker 公司在 2013 年推出的容器项目,因为轻量、易用的特点,迅速得到了大规模的使用。Docker 的大规模应用使得系统资源的形态由虚拟机阶段进入到了容器阶段。

Docker是一种实现了容器技术的软件平台,它提供了创建、管理、分发容器的工具和服务。Docker的优点是启动快速、占用资源少、移植方便、可扩展性强等。缺点是安全性较低,因为容器之间共享内核,可能存在漏洞或攻击风险。Docker主要用于微服务架构、持续集成部署等场景,提供高效、灵活、可靠的应用交付能力。

与虚拟机不同,容器共享主机操作系统内核,并且不需要单独的 Guest OS,这使得容器更加轻量级,并且启动速度更快。

每个容器都可以运行一个或多个应用程序,并且具有自己的文件系统、网络配置、进程空间等。

Docker 通过 Linux Namespace 技术来进行资源隔离,通过 Cgroup 技术来进行资源分配,具有更高的资源利用率。Docker 跟宿主机共用一个内核,不需要模拟整个操作系统,所以具有更快的启动时间。在 Docker 镜像中,已经打包了所有的依赖和配置,这样就可以在不同环境有一个一致的运行环境,所以能够支持更快速的迁移。另外,Docker 的这些特性也促进了 DevOps 技术的发展。

容器 VS 虚拟机

一个例子是,嵌入式Linux开发中,假设我们的物理机是Ubuntu 20,但是我们的linux SDK要求基于Ubuntu 14或16,你有两种选择:一种是使用虚拟机,另一种是使用Docker。

如果你使用虚拟机,你需要为每个虚拟机分配一定的内存、磁盘空间和CPU资源,并且安装完整的Ubuntu系统。如果你使用Docker,你只需要从Docker Hub上拉取两个Ubuntu镜,像然后在容器中运行它们,就可以享受不同版本的Ubuntu环境了,无需创建新的虚拟机。这样做的好处是,Docker容器占用的资源更少,启动的速度更快,而且更容易管理

这里有个一个容器与虚拟机的对比2

特性容器(Docker)虚拟机
启动时间秒级分钟级
硬盘占用量一般为MB一般为GB
性能接近原生弱于原生
系统支持量单机支持上千个容器一般几十个
资源使用率
环境配置自带配置,基本不需要不带配置,需要全量配置

四、总结

本文简单介绍了虚拟化技术的分类和发展经历。应用领很广,我们应用开发中,或多或少都会使用到部分虚拟化相关技术。

由于本博客主要集中于工业实时控制、汽车、通信等实时场景下的基础软件技术分享。同时,行业内常用的是实时虚拟化技术,所以后面的文章主要集中在实时虚拟化(具体的实时Hypervisor是ACRN和jailhouse)。

其他的虚拟化技术则涉及到才会写相关文章,比如ETherCAT主站EOE使用了网络虚拟化相关技术,敬请关注!

五、参考链接


  1. 《软件简史》张银奎著 ↩︎

  2. https://time.geekbang.org/column/article/414159 ↩︎ ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/760477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32 ws2812b 最快点灯cubemx

文章目录 前言一、cubemx配置二、代码1.ws2812b.c/ws2812b.h2.主函数 前言 吐槽 想用stm32控制一下ws2812b的灯珠&#xff0c;结果发下没有一个好用的。 emmm&#xff01;&#xff01;&#xff01; 自己来吧&#xff01;&#xff01;&#xff01;&#xff01; 本篇基本不讲原理…

6、传输层TCP28

TCP协议&#xff1a;传输控制协议 1、协议实现 16位源端端口&16位对端端口&#xff1a;描述通信俩端进程32位序号&#xff1a;告诉接收端&#xff0c;这条数据在整体数据中的排序&#xff0c;接收端根据序号进行排序32位确认序号&#xff1a;向发送端进行回复确定&#xff…

pytest-html报告修改与汉化

目录 前言 生成报告 测试代码 原始报告 修改Environment 修改后的效果 修改Summary 修改后的效果 修改Results 优化Test 解决中文乱码 删除多余部分 修改后的效果 删除Links 修改后的效果 增加失败截图与用例描述 完整的conftest.py代码 汉化报告 修改plugin…

ClickHouse进阶

一、Explain查看执行计划 在 clickhouse 20.6 版本之前要查看 SQL 语句的执行计划需要设置日志级别为 trace 才能可以看到&#xff0c;并且只能真正执行 sql&#xff0c;在执行日志里面查看。 在 20.6 版本引入了原生的执行计划的语法。在 20.6.3 版本成为正式版本的功能。 …

常见的JS内置对象——字符串、数学、日期

二、字符串&#xff08;string&#xff09; 创建 一般使用第一种方式 2&#xff09;字符串的遍历 注意&#xff1a;没有foreach方法 3&#xff09;字符串的常见方法 substr()和substring()&#xff1a; substr()参数是从哪个位置开始&#xff0c;截多长 substring()参数是从…

完美匹配:一种简单的神经网络反事实推理学习表示方法

英文题目&#xff1a;Perfect Match: A Simple Method for Learning Representations For Counterfactual Inference With Neural Networks 翻译&#xff1a;完美匹配&#xff1a;一种简单的神经网络反事实推理学习表示方法 单位&#xff1a; 论文链接&#xff1a;https://a…

【状态估计】基于FOMIAUKF、分数阶模块、模型估计、多新息系数的电池SOC估计研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

C++ 创建共享内存

共享内存用于实现进程间大量的数据传输&#xff0c;共享内存是在内存中单独开辟一段内存空间&#xff0c;这段内存空间有自己特有的数据结构&#xff0c;包括访问权限、大小和最近访问时间等。 1、shmget函数 #include <sys/ipc.h> #include <sys/shm.h> int shm…

c++——多态(补充)

优先查看&#xff1a;c——多态_Hiland.的博客-CSDN博客 目录 菱形虚拟继承子类的重写问题 菱形虚拟继承中的偏移量补充 逆向思维——汇编查看多态中被重写的虚函数 菱形虚拟继承子类的重写问题 继承环节时&#xff0c;菱形虚拟继承解决了菱形继承的数据冗余和二义性问题。…

C# Modbus通信从入门到精通(11)——Modbus RTU(调试软件Modbus Slave和Modbus Poll的使用)

前言 我们在开发Modbus程序的时候,会需要测试以下我们写的Modbus程序有没有问题,这时候就需要使用到Modbus Slave和Modbus Poll这两个软件,Modbus Slave是模拟Modbus从站,Modbus Poll是模拟Modbus从站主站的, 1、Modbus Slave 一般情况下我们开发的嗾使Modbus主站程序,…

性能测试(Jemeter)

1.性能指标 响应时间&#xff1a;一次请求的往返时间tps&#xff1a;每秒系统能够处理的事务数&#xff0c;比如订单中的下单操作&#xff0c;下单后续有很多操作&#xff0c;比如创建订单&#xff0c;扣除库存&#xff0c;清算库存等&#xff0c;这个完整操作就是一个完整的事…

【数据分享】1929-2022年全球站点的逐日最大持续风速数据(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 对于具体到监测站点的气象数据&#xff0c;之前我们分享过1929-2022年全球气象…

Qt添加第三方字体

最近开发项目时&#xff0c;据说不能用系统自带的微软雅黑字体&#xff0c;于是找一个开源的字体&#xff0c;思源黑体&#xff0c;这个是google和Adobe公司合力开发的可以免费使用。本篇记录一下Qt使用第三方字体的方式。字体从下载之家下载http://www.downza.cn/soft/266042.…

Pytest参数化——那些你不知道的使用技巧

目录 前言 装饰测试类 输出 说明 装饰测试函数 单个数据 输出 说明 一组数据 输出 说明 图解对应关系 组合数据 输出 说明 标记用例 输出 说明 嵌套字典 输出 增加可读性 使用ids参数 输出 说明 自定义id做标识 输出 说明 总结 总结&#xff1a; 前…

给你二叉树的根节点 root ,返回它节点值的中序遍历

题目&#xff1a;给你二叉树的根节点 root &#xff0c;返回它节点值的中序遍历。 要求&#xff1a;非递归实现。 1/ \2 3/ \ / \4 5 6 7中序遍历结果为&#xff1a; 4 2 5 1 6 3 7这里考察中序遍历思想&#xff0c;使用Stack的后进先出特性输出结果。 TreeNode树状结…

spring项目的创建和使用(详细教程 手把手)方法一

今天我们来讲使用maven方式创建一个sping项目。 1、创建一个普通的maven项目。 2、添加spring框架(引入依赖)支持。添加到pom.xml文件中。 添加的框架有 spring-context&#xff1a;spring 上下⽂&#xff0c;还有 spring-beans&#xff1a;管理对象的模块。 <dependenc…

python将.h5文件转换成csv

五、在jupyter中找到results文件夹&#xff0c;然后可以把跑的.h5结果转换为csv文件 pip install tables import h5py import numpy as np import pandas as pd filename Mnist_FEDL_0.003_0_10u_20b_5_avg.h5 f h5py.File(filename, r) # List all groups print("K…

SpringMVC【文件上传(原生方式上传、上传多文件、异步上传、跨服务器上传 ) 】(五)-全面详解(学习总结---从入门到深化)

目录 SpringMVC文件上传_原生方式上传 SpringMVC文件上传_SpringMVC方式上传 SpringMVC文件上传_上传多文件 SpringMVC文件上传_异步上传 SpringMVC文件上传_跨服务器上传 SpringMVC文件上传_原生方式上传 上传是Web工程中很常见的功能&#xff0c;SpringMVC框架简化了文…

17、SQL注入之二次、加解密、DNS等注入

目录 加解密二次注入DNSlog注入涉及资源:中转注入 加解密 %3D是等号 值在带入数据库之前是有一个解码的操作&#xff0c;明文在解码的时候&#xff0c;就会出现问题&#xff0c;进而影响到语句&#xff1b;密文和明文在一起&#xff0c;这种网站后台是识别不了的&#xff1b;只…

P1332 血色先锋队

血色先锋队 题目背景 巫妖王的天灾军团终于卷土重来&#xff0c;血色十字军组织了一支先锋军前往诺森德大陆对抗天灾军团&#xff0c;以及一切沾有亡灵气息的生物。孤立于联盟和部落的血色先锋军很快就遭到了天灾军团的重重包围&#xff0c;现在他们将主力只好聚集了起来&…