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

云计算基础-计算虚拟化-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可以更好的支持虚拟化技术,它不需要在软件层面做修改,虚拟化对于硬件的性能没有过多的占用,保证了虚拟化有较好的性能水平

相关文章:

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

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

MySQL数据库⑪_C/C++连接MySQL_发送请求

目录 1. 下载库文件 2. 使用库 3. 链接MySQL函数 4. C/C链接示例 5. 发送SQL请求 6. 获取查询结果 本篇完。 1. 下载库文件 要使用C/C连接MySQL,需要使用MySQL官网提供的库。 进入MySQL官网选择适合自己平台的mysql connect库,然后点击下载就行…...

选择排序和快速排序(1)

目录 选择排序 基本思想 选择排序的实现 图片实现 代码实现 快速排序 基本思想 快速排序的实现 图片实现 代码实现 选择排序 基本思想 每一次从待排序的数据元素中选出最小(最大)的元素,存放在序列的起始位置,直到全部…...

得物面试:Redis用哈希槽,而不是一致性哈希,为什么?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: Redis为何用哈希槽而不用一致性哈希? 最近…...

matlab发送串口数据,并进行串口数据头的添加,我们来看下pwm解析后并通过串口输出的效果

uintt16位的话会在上面前面加上00,16位的话一定是两个字节,一共16位的数据 如果是unint8的话就不会, 注意这里给的是13,但是现实的00 0D,这是大小端的问题,在matlanb里设置,我们就默认用这个模式…...

二分、快排、堆排与双指针

二分 int Binary_Search(vector<int> A,int key){int nA.size();int low0,highn-1,mid;while(low<high){mid(lowhigh)/2;if(A[mid]key)return mid;else if(A[mid]>key)highmid-1;elselowmid1; }return -1; }折半插入排序 ——找到第一个 ≥ \ge ≥tem的元素 voi…...

微信小程序步数返还的时间戳为什么返回的全是1970?

微信小程序步数返还的时间戳为什么返回的全是1970&#xff1f; 将返回的时间 乘以 1000 再 new Date() 转化就对了 微信返回的是秒S单位的&#xff0c;我们要转化为毫秒ms单位&#xff0c;才能进行格式化日期。 微信给我们下了个坑&#xff0c; 参考&#xff1a; https://d…...

Python函数——函数介绍

一、引言 在Python编程中&#xff0c;函数是构建高效代码的关键。通过创建可重用的代码块&#xff0c;我们可以使程序更加清晰、易读且易于维护。在本文中&#xff0c;我们将深入了解Python函数的基本概念及其特性。 二、Python函数的基本概念 函数是一段具有特定功能的代码块…...

【Linux系统化学习】文件重定向

目录 文件内核对象 文件描述符的分配规则 重定向 重定向的概念 dup2系统调用 输出重定向 追加重定向 输入重定向 stderr解析 重定向到同一个文件中 分离常规输出和错输出 文件内核对象 上篇文章中我们介绍到了操作系统中的文件&#xff0c;操作系统为了方…...

防火墙工作模式详解

防火墙工作模式是指防火墙在网络中的工作方式和策略。常见的防火墙工作模式包括以下几种&#xff1a; 1. 包过滤工作模式&#xff1a;根据事先确定的规则集合&#xff0c;对进出网络的网络包进行过滤和检查。根据规则&#xff0c;防火墙可以允许或阻止特定的网络流量。 2. 代…...

CCF编程能力等级认证GESP—C++6级—20231209

CCF编程能力等级认证GESP—C6级—20231209 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)闯关游戏工作沟通 答案及解析单选题判断题编程题1编程题2 单选题…...

ES6 ~ ES11 学习笔记

课程地址 ES6 let let 不能重复声明变量&#xff08;var 可以&#xff09; let a; let b, c, d; let e 100; let f 521, g "atguigu", h [];let 具有块级作用域&#xff0c;内层变量外层无法访问 let 不存在变量提升&#xff08;运行前收集变量和函数&#…...

001 - Hugo, 创建一个网站

001 - Hugo, 创建一个网站安装hugoWindows系统Macos Hugo博客搭建初始化博客主题安装配置博客各个页面开始创作创建 GitHub Page 仓库本地调试和预览发布内容 教程及鸣谢文字教程视频教程 001 - Hugo, 创建一个网站 这篇文章假设你已经&#xff1a; 了解基本的终端命令行知识&…...

前端开发:Vue框架与前端部署

Vue Vue是一套前端框架&#xff0c;免除原生)avaScript中的DOM操作&#xff0c;简化书写。是基于MVVM(Model–View-ViewModel)思想&#xff0c;实现数据的双向绑定&#xff0c;将编程的关注点放在数据上。简单来说&#xff0c;就是数据变化的时候, 页面会自动刷新, 页面变化的时…...

【leetcode】深搜、暴搜、回溯、剪枝(C++)3

深搜、暴搜、回溯、剪枝&#xff08;C&#xff09;3 一、解数独1、题目描述2、代码3、解析 二、单词搜索1、题目描述2、代码3、解析 三、黄金矿工1、题目描述2、代码3、解析 四、不同路径III1、题目描述2、代码3、解析 一、解数独 1、题目描述 leetcode链接 2、代码 class…...

社区养老|社区养老服务系统|基于springboot社区养老服务系统设计与实现(源码+数据库+文档)

社区养老服务系统目录 目录 基于springboot社区养老服务系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员部分功能 &#xff08;1&#xff09; 用户管理 &#xff08;2&#xff09;服务种类管理 &#xff08;3&#xff09;社区服务管理 &#xff08…...

云计算基础-存储虚拟化(深信服aSAN分布式存储)

什么是存储虚拟化 分布式存储是利用虚拟化技术 “池化”集群存储卷内通用X86服务器中的本地硬盘&#xff0c;实现服务器存储资源的统一整合、管理及调度&#xff0c;最终向上层提供NFS、ISCSI存储接口&#xff0c;供虚拟机根据自身的存储需求自由分配使用资源池中的存储空间。…...

数学实验第三版(主编:李继成 赵小艳)课后练习答案(十二)(3)

实验十二&#xff1a;微分方程模型 练习三 1.分别用数值解命令ode23t和ode45 计算示例3中微分方程的数值解,同用命令ode23 算得的数值解以及解析解比较,哪种方法精度较高?你用什么方法比较它们之间的精度? clc;clear; f(x,y)2*yx2; figure(1) [x,y]ode23t(f,[1,2],1); plo…...

CSS Transition:为网页元素增添优雅过渡效果

随着互联网的发展&#xff0c;网页的视觉效果和用户体验变得尤为重要。CSS Transition作为一种能够让网页元素在状态改变时呈现平滑过渡效果的工具&#xff0c;受到了广大前端开发者的青睐。本文将详细介绍CSS Transition的基本概念、使用方法以及常见应用&#xff0c;帮助读者…...

JDK 17 新特性 (一)

既然 Springboot 3.0 强制使用 JDK 17 那就看看 JDK17 有哪些新特性吧 参考链接 介绍一下 新特性的历史渊源 JDK 17是Java Development Kit&#xff08;JDK&#xff09;的一个版本&#xff0c;它是Java编程语言的一种实现。JDK 17于2021年9月14日发布&#xff0c;并作为Java …...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...