云计算基础-计算虚拟化-CPU虚拟化

CPU指令系统

在CPU的工作原理中,CPU有不同的指令集,如下图,CPU有4各指令集:Ring0-3,指令集是在服务器上运行的所有命令,最终都会在CPU上执行,但是CPU并不是说所有的命令都是一视同仁的,它会把命令分为不同的指令集

Ring0指令集称之为内核态指令集,改啊指令集里面啊运行的主要是操作系统访问硬件、关键数据结构,运行中断等。

Ring1-2指令集主要运行的是设备驱动的命令

Ring3指令集称之为用户态,该指令集运行的是用户态的应用的一些命令

CPU就是通过这种不同的指令集来运行着不同的命令,为什么要做这种涉及呢?因为在服务器上所运行的命令,可能会产生不一样的后果,比如说单纯的额运行上层应用的命令,最多只影响上层的这些软件,比如有些软件跑着跑着就跑非了,但是它仅仅是软件挂了,操作系统并不受影响,

但是向Ring0这里,它包含了操作系统访问硬件,他是可以调度底层硬件设备,向这些命令是非常关键的,如果说调度底层硬件设备的命令出现了问题,相当于这个命令直接给到了底层设备,如果命令不加筛选,或者随便给一个命令的话是有可能损坏底层设备的,所以像这种最高级的操作系统访问硬件,包括中断这种非常敏感和高级的指令是被放在了内核态的指令集里的

这个结构是CPU在最初涉及的时候就是这么涉及的,这个结构最初的涉及仅仅考虑了CPU的正常运行,但并没有考虑到虚拟化场景下出现的问题

CPU虚拟化分类

全虚拟化

在虚拟化场景中,CPU架构面临的问题

在虚拟化场景下,物理主机上的操作系统操作底层硬件的指令运行在Ring0内核态,我们在操作系统上安装的各种软件运行在Ring3用户态,而Hypervisor本质上也是操作系统上的一个软件,所以Hypervisor运行在Ring3用户态。

作为一个虚拟化应用,我们可以在Hypervisor之上创建了虚拟机,因为Hypervisor运行在Ring3用户态,所以通过Hypervisor创建的这台虚拟机也跑在Ring3用户态

但是作为一个完整的虚拟机,虚拟机的CPU也会有Ring0-3,虚拟机上的应用跑在Ring3上是没问题的,问题是虚拟机的操作系统要如何运行?

首先虚拟机的操作系统它应该运行在Ring0内核态,但是由于虚拟机运行在Hypervisor上,而Hypervisor又运行在Ring3上,那虚拟机的操作系统也就只能运行在Ring3上,所以虚拟机的操作系统本应该运行在Ring0内核态,但它实际上处于Ring3用户态,也就是说Guest OS想访问Ring0,由于它运行在Hypervisor上,实际上是跑在Ring3的。这就是引入虚拟化之后对于传统CPU结构带来的巨大冲突,也就是传统CPU结构并不能满足虚拟机操作系统想要的运行环境,这就是最早虚拟化所面临的第一大难题

上世纪八十年代,这个问题由VMware公司提出并解决,VMware的解决思路叫Binary Translation,翻译成中文叫二进制转化,它的解决思路是给Hypervisor附加了一个功能,由Hypervisor来拦截、收集、辨识虚拟机的所有命令,即包括Ring3命令,也包括Ring0命令,Ring3命令正常运行,因为它就应该跑在Ring3,如果是Ring0的命令,则由Hypervisor来拦截虚拟机的这部分Ring0指令,然后将这部分指令进行Binary Translation(翻译),将这些指令进行一些列的翻译和替换,也就是使虚拟机内核态的这部分指令可以运行在Ring0的环境

直白地说就是对所有地指定进行拦截翻译再执行地过程,通过这个过程就保证了虚拟机操作系统的那些指令也可以在经过转化之后运行在Ring0态,通过这种技术就保证了虚拟机实现了CPU的虚拟化

但是这种技术会导致Hypervisor有大量的工作负荷,因为他要拦截虚拟机的每一条指令,并且进行鉴别、筛选、再传递等等工作,这些工作就会占用大量的CPU和内存资源,这种办法仅仅使从技术上解决了CPU的虚拟化,但它实际的使用效率是比较低的

这种方案我们称之为全虚拟化,也就是说这种方案完全是靠软件的功能来解决的,没有涉及到任何硬件,硬件也没有改动

简单来说,全虚拟化就是:虚拟机想访问Ring0,由于它运行在Hypervisor上,实际上它是跑在Ring3的。通过Hypervisor的拦截、翻译、传递这些指令,使虚拟机内核态的指令可以运行在Ring0上

半虚拟化

全虚拟化主要的问题是效率比较低,随着技术的发展,人们又提出半虚拟化技术,Para Virtualization,它还有另外一个名字叫超虚拟化

半虚拟化技术最核心的点在于它直接修改了操作系统,让操作系统即便运行在Ring3上,它也可以产生一些能够直接跑在Ring0的命令,如下图所示,经过修改后的linux操作系统可以直接把他的命令传递给hardware(硬件)而不需要经过hypervisor翻译

半虚拟化技术优点:不需要Hypervisor进行拦截和翻译,占用的CPU和内存资源更少,性能得到了提升

半虚拟化技术缺点:技术门槛高,要求需要对操作系统进行修改,Linux是开源的,是可以进行修改的,而Windows是闭源的,无法进行修改,所以半虚拟化的使用范围也收到了限制,仅仅是可以支持开源的Linux操作系统

硬件辅助全虚拟化

全虚拟化和半虚拟化都是在软件层面解决CPU虚拟化的问题,CPU传统结构对于虚拟化技术是不友好的,技术人员在软件层面做了一些改进,以期让CPU更好的支持虚拟化技术,随着技术的发展,CPU厂商也在硬件层面做了改进,在2000左右,英特尔和AMD升级了他们的CPU硬件,让CPU可以更好的来支持虚拟化技术。这种升级后的技术叫硬件辅助全虚拟化。

升级后的CPU有两种工作形态,一个叫根态,一个叫非根态

根态是物理机正常工作的情况下的形态,主机操作系统运行在Ring0,业务运行在Ring3。当在物理机上起了一台虚拟机之后,虚机想要运行的时候,如Guest OS需要调用Ring0的时候,这时候CPU就会由根态切换到非根态,切换之后,Guest OS可以直接访问到物理CPU的Ring0,Guest OS上的APP可以直接访问到物理CPU的Ring3,当物理机的操作系统又想对CPU进行操作时,再由非根态切换回根态

相比于全虚拟化和半虚拟化,硬件辅助全虚拟化在硬件层面对CPU进行了重新设计,让CPU可以更好的支持虚拟化技术,它不需要在软件层面做修改,虚拟化对于硬件的性能没有过多的占用,保证了虚拟化有较好的性能水平

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

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

相关文章

跟着pink老师前端入门教程(JavaScript)-day02

三、变量 (一)变量概述 1、什么是变量 白话:变量就是一个装东西的盒子 通俗:变量是用于存放数据的容器,通过变量名获取数据,甚至数据可以修改 2、变量在内存中的存储 本质:变量是程序在内存…

VS-Code-HTML-CSS-JS配置

前端三剑客开发环境配置 查看更多学习笔记:GitHub:LoveEmiliaForever HTML开发环境搭建 Auto Close Tag自动闭合HTML标签Auto Rename Tag自动完成两侧标签同步修改HTML SnippetsHTML代码提示补全open in browser右键打开浏览器运行文件Live Server实时…

HarmonyOS一杯冰美式的时间 -- 验证码框

一、前言 像是短密码、验证码都有可能需要一个输入框,像是如下: 恰好在写HarmonyOS的时候也需要写一个验证码输入框,但是在实现的时候碰了几次灰,觉得有必要分享下,故有了此篇文章。 如果您有任何疑问、对文章写的不…

Unity 2D Spine 外发光实现思路

Unity 2D Spine 外发光实现思路 前言 对于3D骨骼,要做外发光可以之间通过向法线方向延申来实现。 但是对于2D骨骼,各顶点的法线没有向3D骨骼那样拥有垂直于面的特性,那我们如何做2D骨骼的外发光效果呢? 理论基础 我们要知道&a…

书生·浦语-模型评测opencompass

大预言模型评测 模型评测包括主管评测与客观评测 测试模型对提示词的敏感性,或通过提示词获得更准确地答案 主流评测框架 opencompass评测平台 作业

智慧公厕:让智慧城市的公共厕所焕发“智慧活力”

智慧城市的建设已经进入了一个新的阶段,不仅仅是智慧交通、智慧环保,如今甚至连公厕都开始迎来智慧化时代。智慧公厕作为智慧城市的神经末梢,正在通过信息化、数字化和智慧化的方式,实现全方位的精细化管理。本文以智慧公厕源头专…

Flink理论—Flink架构设计

Flink架构设计 Flink 是一个分布式系统,需要有效分配和管理计算资源才能执行流应用程序。它集成了所有常见的集群资源管理器,例如Hadoop YARN,但也可以设置作为独立集群甚至库运行,例如Spark 的 Standalone Mode 本节概述了 Flink 架构&…

IBM公司已经创立百年

不知道有谁还知道或记得蓝快。 我在2003年前后因为编程需要买的IBM笔记本电脑,慢慢接触到了IBM蓝快的技术服务人员,他们算是那个年代超级专业性的代名词。因为装Linux,当时流行的系统是Redhat8,Mandrake,slackware,因为Lilio2的引…

初识最短路径

一.最短路径的介绍 最短路径是图论和网络分析中一个重要的概念,它指的是在一个图或网络中连接两个节点或顶点的路径中,具有最小权重总和的路径。这个权重可以表示为路径上边或弧的长度、耗费、时间等,具体取决于问题的背景和应用场景。 如果你…

【STM32 CubeMX】SPI层次结构SPI协议与SPI控制器结构

文章目录 前言一、SPI 程序层次1.1 硬件原理图1.2 硬件框图1.3 软件层次 二、SPI协议2.1 硬件连线2.2 如何访问SPI设备2.3 SPI 框图 总结 前言 随着嵌入式系统的迅猛发展,STM32系列微控制器在各种应用中得到广泛应用。在嵌入式系统设计中,串行外设接口&…

Anaconda、conda、pip、virtualenv的区别

① Anaconda Anaconda是一个包含180的科学包及其依赖项的发行版本。其包含的科学包包括:conda, numpy, scipy, ipython notebook等。 Anaconda具有如下特点: ▪ 开源 ▪ 安装过程简单 ▪ 高性能使用Python和R语言 ▪ 免费的社区支持 其特点的实现…

牛客网SQL进阶123:高难度试卷的得分的截断平均值

官网链接: SQL类别高难度试卷得分的截断平均值_牛客题霸_牛客网牛客的运营同学想要查看大家在SQL类别中高难度试卷的得分情况。 请你帮她从exam_。题目来自【牛客题霸】https://www.nowcoder.com/practice/a690f76a718242fd80757115d305be45?tpId240&tqId2180…

matplotlib从起点出发(13)_Tutorial_13_Autoscaling

0 自动放缩 轴上的限制可以手动设置(例如ax.set_xlim(xmin, xmax)),或者Matplotlib可以根据Axes上已有的数据自动设置它们。此种放缩行为有许多选项,如下所述。 我们将从一个简单的折线图开始,显示自动缩放将轴限制扩展到数据的…

08MARL深度强化学习——模型种类

文章目录 前言1、训练与执行的模型2、Centralised Training and Execution2.1 Example——central learning2.2 局限性 3、Decentralised Training and Execution3.1 Example——independent learning3.2局限性 4、Centralised Training with Decentralised Execution4.1 Examp…

vue实现多个下拉框联动(二)

在Vue3的组件中,定义多个下拉框的数据和选中的值。例如: data() {return {firstSelectValue: ,secondSelectValue: ,thirdSelectValue: ,// 其他下拉框的数据和选中的值} }在模板中,使用v-model指令绑定下拉框的选中值,并使用cha…

精读《Function Component 入门》

1. 引言 如果你在使用 React 16,可以尝试 Function Component 风格,享受更大的灵活性。但在尝试之前,最好先阅读本文,对 Function Component 的思维模式有一个初步认识,防止因思维模式不同步造成的困扰。 2. 精读 什…

P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G题解

题目 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所…

如何将浏览器设置为黑色

步骤 1 设置边框颜色: 找到浏览器的 设置 选项在里面选择浏览器的 外观 选项把 主题 相关的改成 黑色 即可 步骤 2 设置页面背景颜色: 在浏览器搜索栏中输入指令,并确认 浏览器类型指令edgeedge://flags/chromechrome://flags/ 在出现…

绿色化 数据库 MongoDB 和 mysql 安装

绿色化 数据库 MongoDB 和 mysql 安装 【1.1】 前言 为什么要绿色化 安装呢?因为系统老升级,老重装!!也方便了解下数据库配置和库在那 绿色软件喜欢一般放在 D盘tools目录里 D:\tools\ 数据库 MongoDB D:\tools\MongoDB 数…

Mysql第二关之存储引擎

简介 所有关于Mysql数据库优化的介绍仿佛都有存储引擎的身影。本文介绍Mysql常用的有MyISAM存储引擎和Innodb存储引擎,还有常见的索引。 Mysql有两种常见的存储引擎,MyISAM和Innodb,它们各有优劣,经过多次优化和迭代,…