当前位置: 首页 > 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 …...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

aardio 自动识别验证码输入

技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”&#xff0c;于是尝试整合图像识别与网页自动化技术&#xff0c;完成了这套模拟登录流程。核心思路是&#xff1a;截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...

C# WPF 左右布局实现学习笔记(1)

开发流程视频&#xff1a; https://www.youtube.com/watch?vCkHyDYeImjY&ab_channelC%23DesignPro Git源码&#xff1a; GitHub - CSharpDesignPro/Page-Navigation-using-MVVM: WPF - Page Navigation using MVVM 1. 新建工程 新建WPF应用&#xff08;.NET Framework) 2.…...