ARM系列 -- 虚拟化(一)

今天来研究一个有意思的话题,虚拟化(virtualization)。

开始前,先闲扯一下,最近一个词比较火,“元宇宙(Metaverse)”。在维基百科里面是这么定义元宇宙的,“The Metaverse is a collective virtual shared space, created by the convergence of virtually enhanced physical reality and physically persistent virtual space, including the sum of all virtual worlds, augmented reality, and the Internet”。啥是虚拟呢,通俗点说就是假的,不是物理上真实的。

虚拟化技术是一种广泛使用的技术,比如在云计算业务,数据中心业务中。为什么处理器需要虚拟化,或者说虚拟化能带来什么好处呢?

首先,在处理器设计和应用里,要提一个概念,就是“虚拟机(Virtual Machine)”。关于虚拟机,玩过Vmware的同学可能有一定了解。与虚拟机相对应的就是“真实机(Real Machine)”,有时也叫物理机。物理机好理解,比如我们买一台电脑做家用机,那么这台电脑的所有物理设备,比如硬盘,网卡等等,都是归你自己使用。

如果是服务器机,这种独占的使用方式无疑是效率非常低下的。把服务器的巨大资源划分成块分配使用,或者是按照时间片轮流使用,就可以大大提高效率了。这就需要使用到虚拟化技术了。虚拟化技术就是要让应用程序运行在虚拟机上,就像运行在真实机上一样。归纳一下,虚拟化技术能带来的好处有以下几点:

  • 隔离:即允许在相互不信任的计算环境之间共享物理系统。例如,两个竞争对手可以在一个数据中心共享同一台物理机器,而不能够访问彼此的数据。
  • 高可用性:虚拟化技术允许在物理机器之间无缝且透明地迁移工作负载,通常用于将工作负载从可能需要维护和更换的故障硬件平台迁移出去。
  • 工作负载平衡:尽可能多地使用每个硬件平台,这可以通过虚拟机的迁移来实现,或者通过在物理机上共同托管适当的工作负载来实现。
  • 沙箱:虚拟机可用于为可能干扰其运行的机器其他部分的应用程序提供沙箱。在虚拟机中运行这些应用程序可以防止应用程序的错误或恶意部分干扰物理计算机上的其他应用程序或数据。

当然,虚拟化技术带来的好处不止这些,此处就不一一列举了。

如何把虚拟机和真实的物理设备隔绝呢,或者说如何实现虚拟化。聪明的行业前辈们想到了一个方法,在hardware之上加一层hypervisor。对于hypervisor,百度百科是这样定义的,“一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做VMM( Virtual Machine Monitor ),即虚拟机监视器。

Hypervisor是一种在虚拟环境中的“元”操作系统。他们可以访问服务器上包括磁盘和内存在内的所有物理设备。Hypervisor不但协调着这些硬件资源的访问,也同时在各个虚拟机之间施加防护。当服务器启动并执行Hypervisor时,它会加载所有虚拟机客户端的操作系统同时会分配给每一台虚拟机适量的内存,CPU,网络和磁盘”。

有了hypervisor,我们再来看一下系统如何构成。先以汽车芯片为例,如下图。Hypervisor负责协调,控制所有的硬件资源。在hypervisor之上,把汽车行驶和安全相关的部分隔离成一部分,运行封闭操作系统(Closed OS);把与娱乐等相关的部分隔离成另一部分,运行开放操作系统(Open OS)。相对应的应用程序(APP)运行在各自操作系统之上。这样就可以起到一个很好的隔离作用,用户自己安装的APP不会影响到汽车行驶安全。

图1 汽车芯片中的虚拟化示意图

再来看一个服务器的例子,如下图。一台服务器可能拥有很多的处理器,硬盘等。通过hypervisor,可以分配给不同的虚拟机以不同的硬件资源。比如对于VM1,可能要运行一些安全等级高的任务,这时就可以把Hardware0的资源只分配给VM1,其它的虚拟机不能访问。对于Hardware1,同时分配给VM0,VM1,VM2等多个虚拟机,充分利用其资源。

图2 服务器芯片中的虚拟化示意图

Hypervisor分为两大类:

  • 一类是standalone hypervisor,或者叫type 1;
  • 另一类是hosted hypervisor,也叫type 2。

图3 Type 1 hypervisor(standalone)

图4 Type 2 hypervisor(hosted)

两者的区别是,type 1的hypervisor是直接运行在硬件之上的,而type 2的hypervisor是运行在Host OS之中的。Type 1相当于一个轻量级的操作系统,直接跑在宿主机的硬件上;而Type 2相当于一个应用软件,运行在宿主机的操作系统之中。两者相同的是,客户操作系统(Guest OS)都是运行在hypervisor之上的。

Type 1的hypervisor通常在性能上比Type 2表现的更好,更为安全。**Type 2相较于type 1还有一个缺点就是延迟太高,**这是因为hypervisor与硬件之间的交流还需要穿过操作系统这一层。Hosted hypervisor最多的应用场景是作为client hypervisor运行在终端用户的电脑上,而这种场景下一般是不需要关心延迟问题的。大多数企业一般选择Type 1类型的hypervisor用于数据中心的计算需求。

在ARM平台上,type 1 hypervisor比较典型的代表是Xen。Xen是由剑桥大学计算机实验室开发的一个开源项目。是一个直接运行在计算机硬件之上的用以替代操作系统的软件层,它能够在计算机硬件上并发的运行多个Guest OS。Xen支持x86、x86-64、Power PC和ARM多种处理器。

2014年03月11日,Xen发布4.4版本,更好地支持ARM架构。Xen是半虚拟化(Para-Virtualization)技术的典型代表。半虚拟化技术,主要解决的就是如何捕获非特权指令的敏感指令。x86体系是导致半虚拟化技术产生的重要原因,因为x86体系结构中,部分敏感指令不是特权指令,这些指令不能自动产生异常,因此想要系统正常运行就必须要捕获这些指令。于是Xen采用修改Guest OS内核的方法对这些有缺陷的指令进行替换。

根据直觉,既然有半虚拟化,就一定有全虚拟化,对不对?没错,你很机智,**确实有“完全虚拟化”,又称“硬件虚拟化(Hardware Virtual Machine)”。**简单说,两者的区别就是在半虚拟化中,Guest OS知道自己运行在Hypervisor上而不是硬件上,同时也可以识别出其他运行在相同环境中的客户虚拟机。在全虚拟化中,Guest OS任务自己运行在硬件上,无法感知其他Guest OS。

在ARM平台上,type 2 hypervisor比较典型的代表是KVM。KVM(Kernel-basedVirtual Machine)是一个基于Linux环境的开源虚拟化解决方案,最早由以色列Qumranet公司开发,并于2007年2月被集成到Linux 2.6.20内核中,成为内核的一部分。与VMware ESX/ESXi、微软Hyper-V和Xen等虚拟化产品不同,KVM的思想是在Linux内核的基础上添加虚拟机管理模块,重用Linux内核中已经完善的进程调度、内存管理、IO管理等代码,使之成为一个可以支持运行虚拟机的Hypervisor。

图5 Xen和KVM对比示意图

对于hypervisor感兴趣的同学可以上网去搜搜,一大堆的文章,在此就不过多介绍了(其实我也是一知半解,哈哈)。我们更关心的是,芯片要支持虚拟化,我们要做哪些工作。


作者:老秦谈芯
来源:https://mp.weixin.qq.com/s/uJM8fs-FiGyGBxHLxUKruQ

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

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

相关文章

2024-02-27(Kafka)

1.Kafka中所有的消息都是保存在主题中的,要生产消息到Kafka,首先必须要创建一个主题。 2.Kafka的生产者/消费者 安装kafka集群,可以测试如下: 创建一个topic主题(消息都是存放在topic中,类似mysql建表的过…

iMazing 3.0.0.3 for mac 中文破解版2024最新图文安装教程

我们刚刚发布了iMazing 3.0.0.3 for mac 中文版本。Windows和macOS用户现在都可以试驾并体验iPhone管理的未来。 备受期待的第一个Windows版本得益于过去几个月macOS测试版的所有改进,使其成为一个稳定的初始版本。 我们的开发团队创造了一种无缝的外观和体验&#…

Android日历提醒增删改查事件、添加天数不对问题

Android日历提醒是非常好的提醒功能&#xff0c;笔者在做的过程中&#xff0c;遇到的一些问题&#xff0c;现整理出来&#xff0c;以供参考。 一、申请日历的读写权限 <uses-permission android:name"android.permission.WRITE_CALENDAR" /> <uses-permiss…

Lua速成(5)table

一、table table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型&#xff0c;如&#xff1a;数组、字典等。 Lua table 使用关联型数组&#xff0c;你可以用任意类型的值来作数组的索引&#xff0c;但这个值不能是 nil。 Lua table 是不固定大小的&#xff0c;你可以…

springboot-基础-eclipse集成mybatis+使用方法+排错

备份笔记。所有代码都是2019年测试通过的&#xff0c;如有问题请自行搜索解决&#xff01; 目录 集成mybatis安装mybatis的jar包安装插件&#xff1a;mybatis-generator安装方法生成方法报错&#xff1a;java.lang.RuntimeException: Exception getting JDBC Driver mybatis注解…

数据之美:用山海鲸展现数据魅力

在数据分析领域&#xff0c;数据可视化是一个至关重要的环节。作为一名资深的数据分析师&#xff0c;我深知一个直观、易于理解的数据可视化看板对于传达信息、辅助决策的重要性。今天&#xff0c;我将以自己在用的山海鲸可视化软件为例&#xff0c;与大家分享如何制作一个高效…

LeetCode 热题 100 | 图论(上)

目录 1 200. 岛屿数量 2 994. 腐烂的橘子 2.1 智障遍历法 2.2 仿层序遍历法 菜鸟做题&#xff0c;语言是 C 1 200. 岛屿数量 解题思路&#xff1a; 遍历二维数组&#xff0c;寻找 “1”&#xff08;若找到则岛屿数量 1&#xff09;寻找与当前 “1” 直接或间接连接在…

项目登录方案选型

一.Cookie + Session 登录 大家都知道,HTTP 是一种无状态的协议。无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求返回数据,但不会记录任何信息。为了解决 HTTP 无状态的问题,出现了 Cookie。Co…

离线数仓(四)【数仓数据同步策略】

前言 今天来把数仓数据同步解决掉&#xff0c;前面我们已经把日志数据到 Kafka 的通道打通了。 1、实时数仓数据同步 关于实时数仓&#xff0c;我们的 Flink 直接去 Kafka 读取即可&#xff0c;我们在学习 Flink 的时候也知道 Flink 提供了 Kafka Source&#xff0c;所以这里不…

协议-http协议-基础概念02-请求应答过程-请求响应报文结构-头部字段-请求方法-响应方式

参考来源&#xff1a; 极客时间-透视HTTP协议(作者&#xff1a;罗剑锋)&#xff1b; web抓包实战课-陶辉&#xff1b; 01-HTTP协议请求-应答过程 最简单的浏览器 HTTP 请求过程 浏览器从地址栏的输入中获得服务器的 IP 地址和端口号&#xff1b;浏览器用 TCP 的三次握手与服…

CSS复合选择器(一)

CSS复合选择器&#xff08;一&#xff09; 1.交集选择器2. 并集选择器3. 后代选择器4. 子代选择器5.兄弟选择器5.1相邻兄弟选择器&#xff1a;5.2通用兄弟选择器&#xff1a; 6.属性选择器 1.交集选择器 作用&#xff1a;选中同时符合多个条件的元素。 交集有并且的含义&#…

基于springboot的4S店车辆管理系统源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

python中写monogo的uri参数里,为什么有多个IP,是连接多个服务器吗

问题来源&#xff1a; 代码如下&#xff1a; from pymongo import MongoClientmongo_uri "mongodb://admin:password192.168.93.23:32725,192.132.9.35:32740,192.22.16.42:30538/?" # 创建MongoClient实例 client MongoClient(mongo_uri)为什么uri中会存在多个…

win10开机黑屏,只有鼠标,解决方案

问题描述 win10进不去桌面&#xff0c;可以进去锁屏&#xff0c;只有鼠标&#xff0c;也能进去任务管理器&#xff08;ctrlwindelete&#xff09;, 问题分析 进入任务管理器->文件->运行新任务 然后输入 explorer.exe 发现找不到了 原因&#xff1a;误删explorer.exe …

Linux系统---nginx(1)服务

目录 一.Nginx概述 1.定义 2.Nginx模块作用 &#xff08;1&#xff09;main模块 &#xff08;2&#xff09;stream服务模块 &#xff08;3&#xff09;邮件服务模块 &#xff08;4&#xff09;第三方模块 &#xff08;5&#xff09;events模块 &#xff08;6&#xff0…

300分钟吃透分布式缓存-16讲:常用的缓存组件Redis是如何运行的?

Redis 基本原理 Redis 简介 Redis 是一款基于 ANSI C 语言编写的&#xff0c;BSD 许可的&#xff0c;日志型 key-value 存储组件&#xff0c;它的所有数据结构都存在内存中&#xff0c;可以用作缓存、数据库和消息中间件。 Redis 是 Remote dictionary server 即远程字典服务…

SpringCloud有哪些组件

什么是SpringCloud&#xff1f; Spring Cloud是基于Spring Boot的分布式系统开发工具&#xff0c;它提供了一系列开箱即用的、针对分布式系统开发的特性和组件&#xff0c;用于帮助开发人员快速构建和管理云原生应用程序。 Spring Cloud的主要目标是解决分布式系统中的常见问题…

linux使用 busybox microcom AT指令测试4G/5G模块

1、busybox microcom命令使用方法如下&#xff1a; 参数&#xff1a; -d&#xff1a;表示延时时间&#xff0c;一般不设置。 -t&#xff1a;表示超时时间&#xff0c;超多长时间后该命令自动退出。单位为ms。 -s&#xff1a;表示传输速度&#xff0c;即串口波特率。 -X&#…

阿里云oss工具ossutil使用手册(windows)

一、下载安装 下载地址和教程 安装ossutil。 单击下载链接下载Windows安装包。 将工具解压&#xff0c;并双击运行ossutil.bat文件。 配置ossutil。 输入配置命令。 ossutil config 根据提示设置配置文件路径。 请输入配置文件名&#xff0c;文件名可以带路径&#xff08;…

代码随想录算法训练营第二十七天补|39. 组合总和 ● 40.组合总和II ● 131.分割回文串

组合问题&#xff1a;集合内元素的组合&#xff0c;不同集合内元素的组合 分割问题&#xff1a;本质还是组合问题&#xff0c;注意一下如何分割字符串 回溯模板伪代码 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本层集合中元素&#xf…