虚拟化

概述

本质上是下层模块向上层提供一致的运行环境接口的方法
服务器虚拟化、存储虚拟化、网络虚拟化

结构层次

notion image

虚拟化的发展

基本概念

虚拟机

VM通过软件模拟,具有完整硬件系统功能的、运行在完全隔离的环境中,完整意义上的计算机
  • VMM是用来在物理计算机中创建、运行虚拟机的软件、固件或硬件
    • 提供虚拟化的平台被称为VMM(Virtual Machine Monitor)
  • Guest OS是虚拟系统 Host Machine是主系统

虚拟化层次

  • 硬件抽象层
  • 操作系统层
  • 库函数层
  • 应用程序层

虚拟化特征

  • 分区:将CPU、内存、I/O设备等硬件资源划分为多份
  • 隔离
  • 封装:整个虚拟机被储存在独立于硬件的文件中,便于移动
  • 硬件无关性:物理资源的逻辑表示。打破了操作系统、硬件和软件之间耦合的约束

虚拟化的类型

  • 全虚拟化
    • 为虚拟机提供全部资源,无法分辨自己是否在虚拟机上
  • 半虚拟化
    • 也称类虚拟化、准虚拟化
    • Guest通过Hyper与物理硬件交互
  • 操作系统虚拟化
    • 操作系统内核提供隔离的用户态实例(容器),容器像是独立的操作系统,有自己的文件系统、网络、库函数等
    • 操作系统就是VMM

VMM

  • Type 1(裸金属)
    • 具有虚拟化功能的完备操作系统
  • Type 2(寄居式)
    • 运行在Host OS上
  • 混合结构
    • 拥有所有物理资源控制权
    • 让出大部分I/O设备的控制权,将其交由运行在特权虚拟化的职责也被分担

CPU虚拟化

  • VMM负责vCPU的调度
    • VMM仲裁VM对物理资源的访问
    • Guest OS的进程分时复用vCPU
    • 多个vCPU分时复用pCPU
  • CPU虚拟化是VMM的核心

CPU运行级别

保护模式:四个特权级别(Ring0~Ring3)以及内存、I/O端口和执行敏感指令的能力等三种受保护的资源
  • CPU以特定的特权级别运行
  • 特权寄存器CS最后两位放的是特权位,表示当前优先级,CPL
  • CRO控制寄存器
  • 特权指令:读写系统关键资源的指令,只能在最高特权级执行,否则会引发通用异常
    • 影响CPU设备状态、行为的寄存器的指令
  • 敏感指令:受保护资源的指令
    • 虚页表:虚拟地址和物理地址的映射关系表
    • I/O指令
    • 访问或修改物理机状态或修改VM模式的指令
    • 访问存储保护系统或内存/地址分配系统的指令
  • 操作系统运行在Ring 0上
  • 应用程序运行在Ring 3上
    • 需要通过操作系统提供的系统调用完成访问磁盘等操作

虚拟化准则

  • 可控性:可以实现对资源的绝对控制
  • 等价性:虚拟环境和物理环境一样
  • 高效性:与物理机差不多
  • 满足三条原则才可被称为VMM
  • 是否能够有效支持虚拟化、可虚拟化计算机架构设计等提供了指导原则
  • 要实现可控性,敏感指令必须经由VMM或在VMM监控下进行,敏感指令必须是特权指令
  • 敏感指令
    • 控制类:可能改变处理器和设备状态,必须陷入VMM
    • 行为类:依赖于CPU最高特权级别,必须陷入VMM

CPU虚拟化的经典方法

  • 特权解除
    • 为实现VMM完全控制物理资源,降低Guest OS运行级别
    • Guest OS执行特权指令会陷入VMM
  • 陷入并模拟
    • Guest OS试图访问系统关键资源时,请求处理不会发生在物理寄存器上
    • VMM模拟物理处理器行为,将访问定位到VMM为VM设计的“虚拟寄存器”上
  • 为了虚拟机高效性,ISA必须满足条件:
      1. CPU支持多特权级别,且Guest OS能在低特权级正常运行
      1. 非特权指令的执行不依赖于CPU的特权级别
        1. 影响VMM正确运行的指令由VMM模拟运行,占大部分的非敏感指令由硬件直接运行。效率高
      1. 敏感指令全部为特权指令
        1. Guest OS执行敏感指令时能自动陷入到VMM
      1. 支持内存保护机制

全虚拟化

VMM截获Guest OS发出的敏感指令并模拟处理
  • 特权解除:Host OS或VMM运行在Ring0 ,GuestOS运行在Ring 1或3上,应用运行在Ring3上
  • Guest OS发出特权指令会触发通用保护异常
  • 敏感指令截获仿真,非敏感直接在物理CPU上运行
    • 系统调用、硬件中断、特权指令
  • VMM能控制GuestOS对硬件的访问

Type I

使用特权解除技术,VMM直接使用系统硬件资源
  • VMM运行在硬件&Ring 0上
  • Guest OS运行在Ring 1上,应用运行在Ring 3上

Type II

VMM通过调用Host OS提供的服务(系统调用,system call)使用系统硬件资源
  • Host OS/VMM运行在Ring 0上,负责管控系统硬件资源
  • Guest OS运行在Ring1或3上
  • 实现方法
    • 硬件辅助
    • 软件实现:陷入并模拟

半虚拟化

修改Guest OS内核,以 VMM提供的Hypercall替换OS内核中不能虚拟化的指令。

Intel VT-x

引入了VMX及其操作指令
  • Root模式
    • CPU的CPL为0,可访问所有资源
  • Non-Root模式
    • CPL不必为0
    • 执行敏感指令会自动切换到Root模式
  • 两种模式都有Ring0~Ring3四种特权级别
  • VMM运行在Root模式,Guest OS(VM)运行在Non-Root模式

VMX(Virtual Machine Extension)

模式切换

  • 从Root切换到Non-Root模式
    • VMM显式调用VMLAUNCH/VMRESUME指令
    • VM entry
  • 从Non-Root切换到Root模式
    • Guest OS执行VMCALL指令、发生硬件中断或软件异常、Guest OS执行某些敏感指令
    • VM exit

VMCS( VM Control data Structure)

模式切换需要保存和恢复上下文,VMCS保存vCPU需要的状态和上下文信息
  • 读写指令:VMREAD、VMWRITE
  • 硬件实现,比软件高效
  • vCPU和VMCS是一一对应,pCPU和vCPU一对多,但任意时刻一对一,故VMCS和pCPU一对一

vCPU

主要为VMCS和Non-VMCS
  • VMCS中保存系统状态,由硬件负责管理。
  • Non-VMCS中保存着其他信息,由软件(VMM)负责维护

trap&emulate

  • 模拟:将Guest OS指令翻译成可虚拟化的Host OS指令

实现

  • 解释执行
    • VMM的模拟器对Guest OS发出的每一条指令进行实时解释并执行
    • 所有指令都陷入,解决了x86虚拟化问题,但效率太低
  • 静态二进制翻译
    • 使用编译器优化及时中的“指令块”概念
      • 指令块:只有一个入口和出口的一组指令,通常始于一个分支指令,终于下一个分支指令
    • 便于提高效率
    • 问题
      • 效率仍不高
      • 自修改代码
      • 自引用代码
  • 动态二进制翻译
    • 静态二进制和解释执行结合
    • 执行过程
        1. VMM从虚拟机内存中读取一条指令
        1. 对指令进行翻译,缓存翻译指令
        1. 执行指令。如果指令为条件分支或条件跳转指令,则根据执行结果生成动态指令块,完成指令块的翻译并保存在缓存中
        1. 取下一条指令。如果下一条指令已经被翻译过,则转入③执行指令;如果下一条指令还未被翻译过,则转入②

内存虚拟化

需要对操作系统的虚拟内存进行再虚拟化
  • 对CPU来说,RAM、I/O等硬件设备都是可用资源
    • 资源分布在系统的物理地址空间内
    • 内存的物理地址是系统物理地址的一部分,还有I/O设备、ROM等资源的物理地址
  • VMM负责为VM分配物理内存,为VM提供物理地址空间
  • 地址转换GVA→GPA→HPA
notion image
notion image

X86的内存管理

主存与Cache

  • 内存单元具有唯一物理地址(PA)
  • 每个进程提供一致、私有的虚拟地址空间
  • 物理地址和虚拟地址使用分页存储管理

虚拟寻址方式

  • CPU使用虚拟地址访问内存
  • MMU与OS相互配合,完成虚拟地址到物理地址转换
  • 使用物理地址访问物理内存

Cache

  • 平衡CPU和内存的速度差异
  • Cache和内存被分成相同大小的区域
    • Cache:cache line,Cache行
    • 内存:block ,内存块
  • 保护模式下使用段页式虚拟内存管理
  • 快表机制(TLB)

MMU

每个处理器核心一个MMU,负责虚拟地址到物理地址的转换

软件虚拟化影子页表(sPT)

GVA→HPA
  • 为每个Guest OS中的进程gPT维护影子页表(sPT)
  • Guest OS修改其gPT时,VMM也必须对相应的sPT做修改
  • 要对MMU虚拟化
  • CR3的写入指令和INVLPG均为特权指令,VMM可以截获
  • VMM需要将影子页表设置为Guest OS只读,删除页表项后可用截获

硬件虚拟化EPT

GVA→GPA→HPA
  • gTP查询后差TLB快表,命中
  • 无果,查EPT表,命中
  • 缺页,抛出异常Guest OS交由处理
  • 无果,抛出异常交由VMM处理
  • 只需维护每个VM的一张EPT页表

I/O虚拟化

X86的I/O架构

  • 使用总线互连处理器和I/O设备,通过总线对设备编址,发送命令、数据传输
  • I/O操作是处理器访问外部设备的方法
  • 外部设备中的寄存器被称作I/O端口,RAM称为I/O RAM,两者统称I/O空间
    • 端口映射不占寄存器地址空间
    • 内存映射占寄存器地址空间

I/O操作控制方式

  • 程序直接控制
    • CPU使用I/O指令检查设备状态。就绪时读写数据,否则等待设备就绪
  • 中断控制
    • CPU启动外部设备进行I/O操作,然后切换到其他进程
    • 外部设备完成操作后产生中断,CPU执行相应的中断服务程序进行处理
  • DMA
    • 外设和RAM间的数据传输不经过CPU
      • 同步DMA
        • 由软件发起。设备驱动程序设定好被DMA访问的内存地址。通过写设备的某个寄存器通知设备发起DMA,外部设备直接从内存指定地址处读写内容
      • 异步DMA
        • 由设备发起。设备将数据直接复制到提前设定好的内存区域,以中断方式通知驱动程序
  • IOP控制
    • 专门处理I/O事务的特殊处理器,
  • 引用操作系统

设备驱动程序

操作系统与底层设备的中介,提供标准接口
  • OS内核中具有最高特权级、驻留内存、可共享的底层硬件处理例程,负责设备初始化、设备管理、数据传输等。
  • CPU通过驱动程序,向设备发送命令、数据交换、获取设备状态

网络虚拟化

  • 虚拟环境中,物理主机化为多台VM,VM有自己的CPU/RAM/网卡
  • 一物理主机网络既能实现VM间通信、VM访问外部网络等,需要网络隔离

虚拟网络

基于软件的虚拟化

常用服务器虚拟化软件

Prev
云计算概论
Next
并行计算
Loading...
Article List
一个NotionNext搭建的博客
数据库系统概论
大数据原理与应用
javaWeb应用开发基础教程
python
毕业设计
大数据技术综合应用
实训-航空数据系统
java面向对象程序设计
数据结构
算法分析与设计
SPARK
Python爬虫大数据采集与挖掘
云计算
概率论与数理统计
数字逻辑
计算机网络
计算机组成原理
linux
操作系统
人工智能导论
数据仓库与数据挖掘
数据可视化
大数据安全与隐私保护
c语言
C++