Intel处理器虚拟化技术VT-x86下实现小型虚拟化框架(1)

一.前言

我一直觉得,学习计算机中的一门新技术,一定要从历史去了解他的全貌。这样有利于我们了解事情的来龙去脉和发展的过程。一上来直接接触新兴事物,很容易陷入不知从何下手的困境。不了解历史发展,就不明白前人的一些操作。因此,这个系列的博客将详细完整记录VT(处理器虚拟化技术)的一些细节包括简单实现。单纯是对这门技术的兴趣。


二.虚拟化技术的介绍以及历史

虚拟化的诞生对计算机的发展是巨大的。好比如我们经常用的虚拟机VMware Workstation,VirtualBox等出名的虚拟化软件。都是基于这个技术去实现的。虚拟化,顾名思义就是将一个事物虚拟成多个事务。就拿我们的计算机来说。CPU,内存,寄存器等物理设备。假设一台电脑只会有一个。但是通过虚拟化技术,能让外界感觉你有多个CPU,多个内存,多个寄存器等物理设备,但是这不是真的,只是逻辑上感觉是有多个。从而能产生多个操作系统。(想象一下为啥虚拟机能运行多个操作系统)。这种通过虚拟化技术提供的多个操作系统或者软件,我们称之为虚拟机。


(2.1)基于软件的虚拟化技术的诞生

虚拟化技术早在20世纪60年代的时候就已经诞生,最早是由IBM提出。那个时候,其实是通过软件功能去模拟多个各种各样的设备或组件,类似于C++创建一个类并且实例化这样的思想。本质上是一个进程在操作系统中存在。那么多个模拟组件进程在操作系统中切换,就好像拥有多个真实组件一样,早期的VMware等软件是基于这个方案实现的。


(2.2)基于硬件的虚拟化技术的诞生

在2005-2006年,Intel和AMD相继开发出了硬件支持的虚拟化技术。也就是CPU支持一种新的技术模式。硬件厂商从底层出发设计出了这种虚拟化技术,并提供新的指令来操作和编写支持虚拟化技术的实现。从此,开发基于虚拟化技术的软件或者功能的实现将大大降低了开发难度。在硬件虚拟化技术的诞生,随之而来就是一个新的概念:虚拟机监视器(VMM)全称为Virtual Machine Monitor。有些书上把它称之为Hypervisor(超级监督者,管理器)。其实本质它们是一类东西。它的作用就是作为虚拟机的管理者。可以这么去理解,如果进程的调度切换等是由操作系统管理的。那么虚拟机就相当于进程,而VMM就是操作系统。VMM是作为管理者而存在的。由此,我们就引出了软件层面的虚拟化技术总体的框架脉络:


于此因为要作为管理者来集中管理这些虚拟机,并且作为中间人来操作物理设备。所以它的权限是要大于等于操作系统的。所以它的权限其实要凌驾于操作系统之上。也就是所谓的-1环。其实并没有所谓的-1环,但是为了区分它的权限比操作系统还大。所以叫-1环。可能有些人会想,和操作系统一个权限能够理解。毕竟系统编程属于驱动级的,肯定是跟操作系统一个权限的。那么比它还大是为什么呢?其实很简单。假设我把物理机上的操作系统给接管了,让他变成了我的虚拟机,而虚拟机的操作,都将通过我的VMM来反馈和拦截。这不就意味着操作系统想干嘛都得告诉我们嘛。在硬件虚拟化诞生之初,其实是为了加速类似于VMware Workstation这种软件的效率和速度,后续也用于云计算方面的应用。但是在后面的实践中。人们发现安全领域下,VT技术也是非常强大的。毕竟安全领域中,权限大就是王道。因此高于操作系统的权限利用,一定是会被人们发掘和利用的。据我所知目前最直接和广泛的应用主要有游戏公司使用VT技术保护游戏。一些木马使用VT技术隐藏自己等。当然我学习它的目的并非出于破坏计算机,因此不要拿来干非法的事情。(免责申明)。


三.Intel硬件虚拟化开发框架

前面我们讲了目前Intel和AMD两大硬件厂商分别实现了硬件虚拟化技术。我们主要讲Intel的虚拟化技术。其实大致思想和框架是一样的,只是细节上的细微部分有所差别。Intel虚拟化技术分为三个部分--Intel-VTx,Intel-VTd,Intel-VTc。其实很好区分,x对应是软件开发。d是物理上的实现,c是网络虚拟化相关的内容。我们只讲Intel-VTx和软件实现相关的部分。

(3.1)框架图

上面我们描述虚拟化技术的基本框架,我们经过详细修改给出更加详细的框架图:


(3.2)权限和设计目标

从上面的框架图中,我们可以看到Intel-VTx是有两种权限的。Guest虚拟机在no-root权限下,VMM处于root权限下。这个很好理解,类比于Linux系统的root用户和普通用户。基于这个权限VT有如下设计目标:

对于VMM层来说:

1,为每个虚拟机提供虚拟处理器,可以在恰当的时候将它放入真正的物理处理器上执行。

2.VMM层可以控制处理器资源,内存管理,管理中断和IO操作等。

对于Guest虚拟机来说:

1.每个虚拟机使用相同的接口来使用虚拟处理器,内存,存储设备等。

2.每个虚拟机可以独立运行,互不干扰。

3.对于虚拟机来说,VMM层完全透明(不存在的意思)。


(3.3)VMM框架开启和退出模型


基于这个图(取自Intel手册3卷23章)谈谈这个VMM模型。其实它很类似我们的操作系统发生系统调用的过程(3环进0环的过程),当执行VMXON指令后,就进入了root模式,也就是VMM下。当执行对应的指令(VMLAUNCH)就会进入虚拟机模式也就是no-root下执行。当虚拟机发生某些事件触发VM Exit将会把控制权交给VMM。只有当VMM显示调用VMXOFF指令后,VMM才会被关闭。也就是退出虚拟化。


四,小结

通过上述的一些概念和基础知识,我们对虚拟化技术有了基本的认识。了解这些对后续的理解是有很大帮助的。下一篇我们将介绍编写VMM之前需要认识的一些存储结构。

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

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

相关文章

FAISS+bge-large-zh在大语言模型LangChain本地知识库中的作用、原理与实践

文章目录 FAISSbge-large-zh在大语言模型LangChain本地知识库中的作用、原理与实践引言FAISS与bge-large-zh简介FAISS原理bge-large-zh原理 FAISSbge-large-zh在LangChain本地知识库中的作用提高检索效率增强语义理解能力支持大规模数据处理 实践数据准备与处理FAISS索引构建与…

Xcode中App图标和APP名称的修改

修改图标 选择Assets文件 ——> 点击Applcon 换App图标 修改名称 点击项目名 ——> General ——> Display Name

Servlet(2)

文章目录 更方便的部署方式安装 Smart Tomcat 插件配置 Smart Tomcat 插件 访问出错怎么办出现 404出现 405出现 500出现 "空白页面"出现 "无法访问此网站" 小结 更方便的部署方式 手动拷贝 war 包到 Tomcat 的过程比较麻烦. 我们还有更方便的办法. 此处我…

用CSS制作弧形卡片的三种创意方法!

在平时开发中,有时候会碰到下面这种“弧形”样式,主要分为“内凹”和“外凸”两种类型,如下 该如何实现呢?或者想一下,有哪些 CSS 属性和“弧形”有关?下面介绍 3 种方式,一起看看吧 一、borde…

智慧校园的未来已来!AI与数字孪生领航教育新时代

随着科技的飞速发展,人工智能(AI)和数字孪生技术正逐渐渗透到我们生活的方方面面,而在教育领域,它们的结合更是催生出一种全新的智慧校园模式。这种模式的出现,不仅预示着教育管理方式的彻底变革&#xff0…

网络原理 - HTTP/HTTPS(5)

HTTPS HTTPS也是一个应用层协议.在HTTP协议的基础上引入了一个加密层. HTTP协议内容都是按照文本的方式明文传输的. 这就导致了在传输过程中出现了一些被篡改的情况. 臭名昭著的"运营商劫持" 下载一个天天动听. 未被劫持的效果,点击下载按钮,就会弹出天天动听的…

【linux】常见指令 -通配符,数据管道,重定向,压缩打包...

目录 前言 基本指令 ls命令 常见选项 ​编辑 pwd命令 cd 指令 常见选项 touch指令 mkdir指令 常见选项 rm 指令 常见选项 man指令 cp指令 常用选项: mv指令 常用选项 nano指令 如何写入且执行文件? cat指令 常用选项 more指令…

基于RK3399 Android11适配OV13850 MIPI摄像头

目录 1、原理图分析2、编写和配置设备树3、调试方法4、遇到的问题与解决5、补丁 1、原理图分析 从上图可看出,我们需要关心的,①MIPI数据和时钟接口使用的是MIPI_TX1/RX1 ②I2C使用的是I2C4总线 ③RST复位引脚使用的是GPIO2_D2 ④PWDN使用的是GPIO1_C7 ⑤…

【Python笔记-设计模式】外观模式

一、说明 外观模式是一种结构型设计模式,能为程序库、框架或其他复杂类提供一个统一的接口。 (一) 解决问题 简化复杂系统的接口调用 (二) 使用场景 简化复杂系统:需要一个指向复杂子系统的直接接口, 且该接口的功能有限时重构复杂的代码…

unity ui界面优化

优化一个比较复杂的界面,里面有多个rt和组件。 在初次打开这个界面的时候会发生1s多的卡顿,还是非常严重的。 分析 通过profiler分析 1.打开界面时卡顿。 分析:除了update和dotween相关逻辑,主要在于打开时的lua function调用…

幻兽帕鲁(Palworld 1.4.1)私有服务器搭建(docker版)

文章目录 说明客户端安装服务器部署1Panel安装和配置docker服务初始化设置设置开机自启动设置镜像加速 游戏服务端部署游戏服务端参数可视化配置 Palworld连接服务器问题总结 说明 服务器硬件要求:Linux系统/Window系统(x86架构,armbian架构…

[程序员] sipp运行时socket接收队列持续满载 - 文件系统访问慢

​今天谈一下,最近和同事一块看到的一个例子,说sipp运行时的某一时刻之后,总是会有408/487/retrans,通过netstat看,还总是会出现接收队列满载的情况。如下netstat的输出,137472是接收队列的缓存的数据量: udp 131072 0 100.103.238.11:5060 0.0.0.0:* 20175/sipp.lates…

spring boot3登录开发-3(账密登录逻辑实现)

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途。 目录 前置条件 内容简介 用户登录逻辑实现 创建交互对象 1.创建用户登录DTO 2.创建用户登录VO 创建自定义登录业务异…

K8S简单学习

目录 安装启动第一个服务启动k8s看板暴露服务查看services自动打开服务查看pods 官方的文档 安装 centos8安装记录 pod和deployment的关系 启动第一个服务 通过deployment的方式进行创建 kubectl create deployment hello-nginx --imagenginx:latest --port8080启动k8s看板…

如何使用ChatGPT创建一份优质简历

目录 第一步:明确目标和重点 第二步:与ChatGPT建立对话 第三步:整理生成的内容 第四步:注重行文风格 第五步:强调成就和量化结果 第六步:个性化和定制 第七步:反复修改和完善 总结 在现…

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测 目录 分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测分类效果基本描述程序设计参考资…

【软件测试】定位前后端bug总结+Web/APP测试分析

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、Web测试中简单…

爬虫项目(下)

1..string 属性是用来获取节点中标签内容。 for content in content_all:contentString content.stringprint(contentString) .string 属性只能提取单个节点或节点统一的内容。 提取节点包含多个子节点时:使用这个属性时,不清楚应该调用哪个节点的内容&#xff…

k8s-pod的介绍及命令行创建pod

一、 pod介绍 在kubernetes的世界中,k8s并不直接处理容器,而是使用多个容器共存的理念,这组容器就叫做pod。 pod是k8s中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,其他的资源对象…

【LeetCode-213】打家劫舍II(动态规划)

题目链接 目录 题目描述 解法1:动态规划 代码实现 题目链接 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同…