虚拟化原理

目录

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

什么是虚拟化

虚拟化就是通过模仿下层原有的功能模块创造接口来“欺骗”上层的机制。虚拟化可以通过资源管理技术,将物理存在的实体资源以虚拟机(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。

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

js简单实现京东的电梯导航

目录 css代码 html代码 js代码 完整代码 效果图: 思路:首先先搭建好结构,在写css样式 由于京东本身一开始是看不见下拉的导航,就把这导航一开始用固定定位,并使其完全不显 示页面,用top的值为…

视频服务网关的三大部署(二)

视频网关是软硬一体的一款产品,可提供多协议(RTSP/ONVIF/GB28181/海康ISUP/EHOME/大华、海康SDK等)的设备视频接入、采集、处理、存储和分发等服务, 配合视频网关云管理平台,可广泛应用于安防监控、智能检测、智慧园区…

Jmeter 压测保姆级入门教程

1、Jmeter本地安装 1.1、下载安装 软件下载地址: https://mirrors.tuna.tsinghua.edu.cn/apache/jmeter/binaries/ 选择一个压缩包下载即可 然后解压缩后进入bin目录直接执行命令jmeter即可启动 1.2 修改语言 默认是英文的,修改中文,点击…

JoySSL OV证书

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

精益生产中的周转箱优势:提升效率与质量的得力利器

在当今竞争激烈的制造业中,企业追求高效生产和卓越质量是至关重要的。精益生产理念提供了一套有效的工具和方法,其中周转箱作为一个关键的组成部分,在优化生产流程、提高效率和质量方面发挥着重要作用。下面谈谈精益生产中的周转箱优势&#…

测试设备的选型

随着科技的不断发展和进步,各行各业都在积极地进行产业升级和转型。在这个过程中,各种测试设备发挥着不可或缺的作用。如何选择合适的测试设备,成为了企业生产过程中必须面对的重要问题。本文将探讨测试设备的选型,为企业提供一些…

roseha for windows 11+oracle 11g部署过程

文章目录 一、环境准备关闭防火墙配置hosts共享存储准备 二、部署步骤1.主机A、B安装数据库软件2.主机A进行数据库实例创建3.主机B创建数据库4.安装配置roseha软件 一、环境准备 windows server 2019 oracle 11.2.0.3 EE roseha for windows 11 5个IP地址:2心跳、3…

【开源】基于JAVA的衣物搭配系统

项目编号: S 016 ,文末获取源码。 \color{red}{项目编号:S016,文末获取源码。} 项目编号:S016,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 衣物档案模块2.2 衣物搭配模块2.3 衣…

Zookeeper 集群中是怎样选举leader的

zookeeper集群中服务器被划分为以下四种状态: LOOKING:寻找Leader状态。处于该状态的服务器会认为集群中没有Leader,需要进行Leader选举;FOLLOWING:跟随着状态,说明当前服务器角色为Follower;LE…

Python用爬虫ip抓取数据为啥还被限制ip?

今天遇到一个奇怪的事情,使用python爬取一个网站,但是频繁出现网络请求错误,之后使用了爬虫ip,一样会显示错误代码。一筹莫展之下,我对现在的IP进行在线测试,发现IP质量很差。后来我总结了以下几点原因。 P…

实时LCM的ImgPilot搭建部署

ImgPilot是具有实时潜在一致性模型(LCM)功能的图像试点 下载源码 GitHub - leptonai/imgpilot: Image pilot with the power of Real-Time Latent Consistency Modelhttps://github.com/leptonai/imgpilot安装前端web cd imgpilot npm install 安装…

opencv-使用 Haar 分类器进行面部检测

Haar 分类器是一种用于对象检测的方法,最常见的应用之一是面部检测。Haar 分类器基于Haar-like 特征,这些特征可以通过计算图像中的积分图来高效地计算。 在OpenCV中,Haar 分类器被广泛用于面部检测。以下是一个简单的使用OpenCV进行面部检测…

我的ros2机器人整体设置

树莓派---------上位机-----------不用安装vscode stm32---------下位机------------安装micro_ros---------不用安装vscode Windows笔记本电脑----------工作平台------安装vscode--------安装STM32CubeMX-----安装KEIL ARM visual studio code 只需要安装在工作平台上面--即…

【Go语言从入门到实战】反射编程、Unsafe篇

反射编程 reflect.TypeOf vs reflect.ValueOf func TestTypeAndValue(t *testing.T) {var a int64 10t.Log(reflect.TypeOf(a), reflect.ValueOf(a))t.Log(reflect.ValueOf(a).Type()) }判断类型 - Kind() 当我们需要对反射回来的类型做判断时,Go 语言内置了一个…

uniapp高德、百度、腾讯地图配置 SHA1

uniapp高德、百度、腾讯地图配置 SHA1 当winr弹出cmd弹框后输入 keytool -list -v -keystore debug.keystore 显示keytool 不是内部或外部命令,也不是可运行的程序或批处理文件。可以先看看是否有下载jdk且配置了环境变量,具体操作如下:keyto…

docker compose搭建渗透测试vulstudy靶场示例

前言 渗透测试(Penetration test)即网络安全工程师/安全测试工程师/渗透测试工程师通过模拟黑客,在合法授权范围内,通过信息搜集、漏洞挖掘、权限提升等行为,对目标对象进行安全测试(或攻击)&am…

关于鸿蒙网络请求的问题

https://developer.huawei.com/consumer/cn/forum/topic/0204136145853212268?fid0102683795438680754 鸿蒙OS 代码 import http from ohos.net.http;export const httpUtils (url: string, data: any) > {return new Promise((resolve, reject) > {let httpRequest …

都2023年了,为什么大家还都在吹捧 Python?

2023 年,Python 还可学吗? 答案当然是可。 近些年间,Python 的火热有目共睹,作为一种功能强大的高级编程语言,在 2018 年的时候它的流行程度就得到了大幅提高。 图源:Stack Overflow 网站编程语言浏览量统…

Jmeter基础和概念

JMeter 介绍: 一个非常优秀的开源的性能测试工具。 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来。 从性能工具的原理划分: Jmeter工具和其他性能工具在原理上完全一致,工具包含4个部分: …

linux进程调度(一)-进程概述

一、什么是进程 进程是指计算机已运行的程序。程序本身只是指令、数据及其组织形式的描述。进程就是一个程序的执行实例,也就是正在执行的程序。在linux操作系统的中,进程就是一个担当分配系统资源CPU时间、内存的实体。进程控制的主要功能是对系统中的所…