虚拟化原理

目录

    • 什么是虚拟化
      • 广义虚拟化
      • 狭义虚拟化
    • 虚拟化指令集
      • 敏感指令集
      • 虚拟化指令集的工作模式
        • 监视器对敏感指令的处理过程:
    • 虚拟化类型
      • 全虚拟化
      • 类虚拟化
      • 硬件辅助虚拟化
    • 虚拟化架构
      • 裸金属架构
      • 宿主机模式架构

什么是虚拟化

虚拟化就是通过模仿下层原有的功能模块创造接口来“欺骗”上层的机制。虚拟化可以通过资源管理技术,将物理存在的实体资源以虚拟机(Virtual Machine,VM)的形式抽象成一种逻辑表示。通常的做法是在整个系统架构中增加一个抽象层,负责分割下层的物理资源,然后组合成逻辑资源供上层使用。

广义虚拟化

请添加图片描述

狭义虚拟化

狭义虚拟化特指操作系统虚拟化,它使用虚拟化技术在一台物理机上模拟出多台虚拟机,每台虚拟机都拥有独立的资源(计算资源、存储资源、网络资源)。

虚拟化的具体实现是通过在操作系统与硬件之间加入一个虚拟化层,并通过空间上的分割、时间上的分时及仿真模拟,将服务器物理资源抽象成逻辑资源。虚拟化层可以将单个CPU模拟为多个CPU,并且这些CPU之间相互独立、互不影响,也就是虚拟化层实现了计算单元的模拟及隔离。它向上层操作系统提供与原先物理服务器一致的环境,使得上层操作系统可以直接运行在虚拟环境中,并允许具有不同操作系统的多台虚拟机相互隔离,并发地运行在同一台物理服务器上,这台物理服务器被称为“宿主机”。虚拟化层模拟出来的主要逻辑功能为虚拟机,在虚拟机中运行的操作系统被称为“GuestOS”。

虚拟化场景包括三个部分:硬件资源、虚拟机监视器(VMM)和虚拟机(VM)。系统虚拟化可以将一台物理机(Host)虚拟化为多台虚拟机,并通过虚拟化层(即虚拟机监视器)使每台虚拟机都拥有自己的虚拟硬件,并拥有一个独立的虚拟机运行环境,进而拥有一个独立运行的操作系统。
请添加图片描述

虚拟化指令集

虚拟化指令集指的是将某个硬件平台的二进制代码转换为另一个平台的二进制代码,从而实现不同硬件指令集之间的兼容。这种技术也被形象地称为“二进制翻译”。

敏感指令集

敏感指令(Sensitive Instruction):在虚拟化场景下,在GuestOS的内核中有一部分非特权指令,它们不一定会改变或者损害整个系统,但是会影响基于虚拟化的整个系统的安全。

敏感指令是操作特权资源的指令,包括修改虚拟机的运行模式,改变宿主机的状态,读/写时钟、中断等寄存器,访问存储保护系统、地址重定位系统及所有的I/O指令。

例如,GuestOS的内核指令可以读取宿主机CPU的寄存器内容,从而看到整个系统的状态,这样一台虚拟机就可以看到另一台虚拟机的内部信息了。在虚拟化场景下,所有会危害到系统安全的指令集被称为“敏感指令集”。

虚拟化指令集的工作模式

Popek&Goldberg 原理定义了如何设计一个有效的虚拟机监视器。

等价性:任何一个程序,在被管理程序控制时,除时序和资源可用性之外,应该与没有被管理程序控制时是一样的,而且预置的特权指令可以自由执行。

管理程序通常指的是虚拟机监视器,也称为hypervisor。虚拟机监视器是一种软件,它允许多个操作系统在同一台物理计算机上运行,并且对它们进行管理和监视。虚拟机监视器负责分配计算机的资源,如处理器时间、内存和输入/输出设备,以便多个操作系统之间可以共享这些资源。

时序指的是程序执行的时间顺序和时序关系,包括程序的指令执行顺序、时钟周期、中断处理等。在虚拟机监视器中,被管理程序受到虚拟机监视器的控制,因此其时序可能会受到影响。

资源可用性指的是系统中各种资源的可用性,包括CPU、内存、磁盘、网络等。在虚拟机监视器中,被管理程序的资源使用受到虚拟机监视器的限制和调度,因此其资源可用性也可能会受到影响。

资源控制:一个程序发出的任何调用系统资源的动作在被执行时,都应先调用控制程序(虚拟机监视器)。

效率性:一个程序产生的所有无害指令都应该由硬件直接执行,控制程序不应该在任何地方产生中断。

Popek和Goldberg虚拟化原理是一种计算机虚拟化技术的基本原理。该原理由Gerald J. Popek和Robert P. Goldberg于1974年提出。该原理规定了一个处理器架构必须满足的条件,以便能够支持虚拟化。这些条件包括特权指令的识别、特权指令的陷阱和仿真、设备I/O的虚拟化等。根据这些条件,Popek和Goldberg提出了一个虚拟机监视器(VMM)的概念,该监视器可以在硬件层面上管理和支持虚拟化环境。这个原理对虚拟化技术的发展产生了深远的影响,也为后来的虚拟化技术提供了理论基础。

1、虚拟机GuestOS中的所有非敏感指令都会“穿透”虚拟机监视器,直接运行在CPU上。

2、虚拟机GuestOS中的敏感指令,理想的状态是通过陷阱机制被虚拟机监视器所捕获,然后虚拟机监视器通过不同的模拟或虚拟化技术实现在虚拟机上的模拟。

监视器对敏感指令的处理过程:

如果敏感指令都是特权指令,当在虚拟机中执行内核态的特权指令时,则会通过陷阱机制被下层的虚拟机监视器捕获。虚拟机监视器可以对捕获的特权指令进行替换操作,从而完整地模拟出某个虚拟机监视器下的特权操作。“陷阱+模拟”机制从本质上保证了可影响虚拟机监视器正常运行的指令由虚拟机监视器模拟执行,而大部分非敏感指令还是照常运行在物理CPU上。
请添加图片描述
虚拟机监视器用到了优先级压缩技术,使得虚拟机中的应用运行在Ring 3层,GuestOS运行在Ring 1层(有时也可运行在Ring 3层),虚拟机监视器运行在Ring 0层。

虚拟化将原本的GuestOS内核的特权级别从Ring 0改为Ring 1,即可“消除”GuestOS内核的特权。但这会给GuestOS的内核指令带来一定的麻烦,原本GuestOS的内核指令是被设计在Ring 0层下执行的,通过优先级压缩后会造成部分指令在虚拟机中的Ring 1层或Ring 3层下无法执行。

当GuestOS的特权指令无法直接下达到CPU执行时,可以通过虚拟机监视器的“陷阱+模拟”机制执行。具体来说,当虚拟机中的应用需要操作重要资源时,会触发特权指令,通过陷阱机制被虚拟机监视器捕获,然后交由对应的GuestOS执行。因为虚拟化之后GuestOS运行在Ring 1层,它没有权限执行一些特权指令,需要通过其他方式保证这些特权指令的执行。

当虚拟机中的应用使用系统调用时,其跳转到的GustOS内核中断处理程序(routine)运行于Ring1层。但是在内核中断处理程序中有部分指令是必须在Ring 0层才能执行的,此时会再通过陷阱机制将这些指令自动转入虚拟机监视器后执行。用户程序运行特权指令时会有两次特权下降,其中一次是进入Ring 1层的GuestOS;另一次是通过特权指令的陷阱机制进入Ring 0层的虚拟机监视器。

控制权指的是程序执行的控制权,即程序在执行过程中所处的特权级别。假设在虚拟化环境中运行一个操作系统,其中运行了一个虚拟机,虚拟机中运行了一个应用程序。当应用程序需要进行系统调用时,控制权会转移到虚拟机内的操作系统内核中断处理程序中,此时操作系统内核的特权级别为Ring 1。如果系统调用需要执行一些特权指令,例如修改页表或访问I/O端口,那么操作系统内核就无法直接执行这些指令,因为它的特权级别不够高。这时,操作系统内核会通过陷阱机制将控制权转移到虚拟机监视器中,虚拟机监视器的特权级别为Ring 0,可以执行特权指令并与物理硬件交互。执行完特权指令后,虚拟机监视器会将控制权返回给操作系统内核,操作系统内核再将控制权返回给应用程序,应用程序继续执行。这种特权级别的转换是虚拟化环境中实现安全隔离和资源管理的重要机制。

Popek&Coldberg原理的前提是,敏感指令必须都是特权指令,即敏感指令集是特权指令集的子集,如图所示。只有这样,虚拟机监视器才能通过选用特权指令集的陷阱捕获方式进行虚拟化。
请添加图片描述
但是在x86处理器中,只能保证绝大多数的敏感指令是特权指令,还有约17个敏感指令不是特权指令,也就是说,敏感指令的范围更大。然而,当特权指令集是敏感指令集的真子集时,一部分敏感指令无法被虚拟机监视器捕获,也就是说虚拟机监视器无法完全控制这些指令的执行。这种情况被称为“虚拟化漏洞”,因为虚拟机监视器无法完全替代或者控制这些敏感指令的执行,可能会导致安全性问题。

请添加图片描述

虚拟化类型

虚拟化分为全虚拟化、类虚拟化和硬件辅助虚拟化三类

全虚拟化

从GuestOS看来和在真实的物理机上运行完全一致,GuestOS察觉不到是运行在一个虚拟化平台上。在这样的虚拟化平台上,GuestOS 无须做任何修改即可运行,所抽象的虚拟机具有完全的物理计算机特性,我们称这种虚拟化平台为“全虚拟化平台”。全虚拟化平台需要正确处理所有的敏感指令,进而正确完成对CPU、内存和I/O的各种操作。

在全虚拟化中,对于特权指令,还是采用先前的“陷阱+模拟”的方式。当虚拟机的内核态需要运行虚拟化漏洞指令时,Ring 0下的虚拟机监视器通过二进制代码扫描并替换Ring 1下的GuestOS的二进制代码,将所有虚拟化漏洞指令替换为其他指令。二进制翻译是一种直接翻译可执行二进制程序的技术,能够把一种处理器上的二进制程序翻译到另一种处理器上执行。在虚拟机监视器中,会动态地把虚拟机中的虚拟化漏洞指令翻译为其他指令,从而实现虚拟化。
请添加图片描述

类虚拟化

不同于全虚拟化,类虚化的GuestOS知道自己运行在一个虚拟化环境中。类虚拟化可以通过修改GuestOS的内核代码来规避虚拟化漏洞的问题。

GuestOS会将与敏感指令相关的操作都转换为对虚拟机监视器的超级调用(Hypercall),交由虚拟机监视器进行处理,使GuestOS内核完全避免处理那些难以虚拟化的虚拟化漏洞指令。

与全虚拟化不同的是它将问题的中心由虚拟机监视器移向GuestOS自身,通过主动的方式由GuestOS去处理这些指令,而不是移交给虚拟机监视器进行处理,在这种设计理念下就必须得修改GuestOS内核。

但与全虚拟化相同的是,类虚拟化修改过的GuestOS也会运行在Ring 1下。运行在Ring 1下的GuestOS没有权限执行的指令,会交给运行在Ring 0下的虚拟机监视器来处理。虚拟机监视器向GuestOS提供了一套“系统调用”,以方便GuestOS调用,这套“系统调用”就是超级调用。只有Ring 1下的GuestOS才能向虚拟机监视器发送超级调用请求,以防止Ring 3下的应用调用错误导致对系统可能的破坏。

例如,当虚拟机内核需要操作物理资源来分配内存时,虚拟机内核无法直接操作物理资源,而是通过调用与虚拟机监视器内存分配相关的超级调用,由超级调用来实现真正的物理资源操作。

全虚拟化通过Binary Translation在二进制代码级别上来避免虚拟化漏洞。类虚拟化采取的是另一种思路,即修改操作系统内核的代码,使得操作系统内核完全避免这些难以虚拟化的指令。
请添加图片描述

硬件辅助虚拟化

为了更好地解决x86架构下虚拟化漏洞的问题,芯片厂商扩展了其指令集来支持虚拟化。其核心思想是通过引入新的指令和运行模式,使虚拟机监视器和GuestOS分别运行在root模式和no-root模式下,这样一来,GuestOS还是可以运行在Ring 0下的,GuestOS的内核也不需要修改。

将虚拟机监视器与GuestOS的执行环境完全隔离开,通过指令集的变化实现虚拟机监视器和GuestOS运行环境之间的相互转换,即上文所述的root模式和no-root模式。启动或退出root模式和no-root模式通过新添加的VMXON和VMXOFF指令实现。从root模式到no-root模式的转换通过VMEntry指令实现,从no-root模式到root模式的转换通过VMExit指令实现。

虚拟化架构

虚拟化架构主要分为裸金属架构和宿主模式架构两种

裸金属架构

虚拟机监视器被直接安装和运行在物理机上,依赖其自带的虚拟内核管理,使用底层硬件资源。虚拟机监视器拥有硬件的驱动程序,不依赖特定的操作系统,其管理着宿主机及其他虚拟机。宿主机和虚拟机都安装有各自的操作系统,即宿主机操作系统和GuestOS。裸金属架构的代表是Xen。

请添加图片描述

宿主机模式架构

虚拟机监视器被安装和运行在操作系统上,依赖操作系统对硬件设备的支持和对物理资源的管理。在这种情况下,虽然虚拟机监视器对硬件资源进行访问必须经过宿主机操作系统,但虚拟机监视器依然可以充分利用操作系统对硬件设备的支持,以及内存管理进程调度等服务。宿主模式架构的代表是KVM。

请添加图片描述

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

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

相关文章

接口测试学习路线

接口测试分为两种: 测试外部接口:系统和外部系统之间的接口 如:电商网站:支付宝支付 测试内部接口:系统内部的模块之间的联调,或者子系统之间的数据交互 测试重点:测试接口参数传递的正确性&…

在全球碳市场中崭露头角的中碳CCNG

在全球气候治理的大背景下,中国碳中和发展集团有限公司(简称中国碳中和)正在成为全球碳交易市场的一个重要参与者。随着国际社会对碳排放的日益关注,中国碳中和凭借其在碳资产开发、咨询与管理等领域的深厚积累,正成为…

【Golang】解决使用interface{}解析json数字会变成科学计数法的问题

在使用解析json结构体的时候,使用interface{}接数字会发现变成了科学计数法格式的数字,不符合实际场景的使用要求。 举例代码如下: type JsonUnmStruct struct {Id interface{} json:"id"Name string json:"name"…

提供电商数据|带你简单认识天猫API接口相关参数文档调用说明

什么是API接口 API接口(Application Programming Interface Interface)是应用程序与开发人员或其他程序互相通信的方式。它允许开发者访问应用程序的数据和功能。 API接口,软件的“握手”与“交流”之道,软件世界的“好基友”。想让软件聊得来?想开发App却无从下手?API来相救…

多actor实体组合并统一应用变换_vtkAssembly

开发环境: Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码 demo解决问题:创建了一个球体和立方体的三维可视化,将它们组合成一个装配体,应用变换,调整不透明度&#…

App Inventor 2 数字转文本

App Inventor 2 是弱语言类型,文本和数字之间不用刻意去转换,之间赋值就可以了。 案例:数字转文本 App Inventor 2 是弱语言类型,同理数字也能直接赋值给文本变量: 更多请参考:App Inventor 2 文本代码块…

什么是网络爬虫技术?它的重要用途有哪些?

网络爬虫(Web Crawler)是一种自动化的网页浏览程序,能够根据一定的规则和算法,从互联网上抓取和收集数据。网络爬虫技术是随着互联网的发展而逐渐成熟的一种技术,它在搜索引擎、数据挖掘、信息处理等领域发挥着越来越重…

可以ping通IP但是无法远程连接-‘telnet‘ 不是内部或外部命令,也不是可运行的程序或批处理文件

起因 一开始远程连接IP,报错,怀疑是自己网络原因,但是同事依旧无法连接 怀疑是自己防火墙的原因,查看关闭依旧无法连接 问题 两个地址可以ping通排除防火墙缘故 怀疑端口,测试端口 然 解决方案 winR 输入control…

SPASS-信度分析

信度分析概述 效度 效度指的是量表是否真正反映了我们希望测量的东西。一般来说,有4种类型的效度:内容效度、标准效度、结构效度和区分效度。内容效度是一种基于概念的评价指标,其他三种效度是基于经验的评价指标。如果一个量表实际上是有效…

构建智能工厂设施的“智能电机保护和信息监控解决方案”

“智能电机保护和信息监控解决方案”是施耐德电气韩国公司直接为对设施数字化、工厂智能化和节能感兴趣的客户和国内外公司量身定制的集成解决方案。 最大的特点是包含以HMI为中心,轻松高效地处理IT和OT的复杂数据。通过添加工业物联网(IIoT&#xff09…

CBTC 2023氢能展倒计时6天,最新同期会议活动Plus版发布

随着时间的推移,CBTC2023深圳氢能技术展览会即将拉开序幕。这场盛会将于11月30日在深圳福田会展中心盛大开幕,以“以储赋能,智造未来”为主题,旨在搭建一个商务交流、供需合作、创新产品发布的平台,让氢能全产业链之间…

JoySSL OV证书

JoySSL OV证书全称为Organization Validation SSL证书,属于组织验证型SSL证书。它是一种增强型的SSL证书,不仅能够提供基本的数据加密功能,还能提供更高级别的安全保障。通过验证申请者身份的方式,确保了用户访问的网站是由合法的…