一个NotionNext搭建的博客
数据库系统概论
大数据原理与应用
javaWeb应用开发基础教程
python
毕业设计
大数据技术综合应用
实训-航空数据系统
java面向对象程序设计
数据结构
算法分析与设计
SPARK
Python爬虫大数据采集与挖掘
云计算
概率论与数理统计
数字逻辑
计算机网络
计算机组成原理
linux
操作系统
人工智能导论
数据仓库与数据挖掘
数据可视化
大数据安全与隐私保护
c语言
C++
虚拟化
概述结构层次虚拟化的发展基本概念虚拟机虚拟化层次虚拟化特征虚拟化的类型VMMCPU虚拟化CPU运行级别虚拟化准则CPU虚拟化的经典方法全虚拟化Type IType II半虚拟化Intel VT-xVMX(Virtual Machine Extension)模式切换VMCS( VM Control data Structure)vCPUtrap&emulate实现内存虚拟化X86的内存管理主存与Cache虚拟寻址方式CacheMMU软件虚拟化影子页表(sPT)硬件虚拟化EPTI/O虚拟化X86的I/O架构I/O操作控制方式设备驱动程序网络虚拟化虚拟网络基于软件的虚拟化常用服务器虚拟化软件
概述
本质上是下层模块向上层提供一致的运行环境接口的方法
服务器虚拟化、存储虚拟化、网络虚拟化
结构层次

虚拟化的发展
基本概念
虚拟机
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必须满足条件:
- CPU支持多特权级别,且Guest OS能在低特权级正常运行
- 非特权指令的执行不依赖于CPU的特权级别
- 影响VMM正确运行的指令由VMM模拟运行,占大部分的非敏感指令由硬件直接运行。效率高
- 敏感指令全部为特权指令
- Guest OS执行敏感指令时能自动陷入到VMM
- 支持内存保护机制
全虚拟化
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虚拟化问题,但效率太低
- 静态二进制翻译
- 使用编译器优化及时中的“指令块”概念
- 指令块:只有一个入口和出口的一组指令,通常始于一个分支指令,终于下一个分支指令
- 便于提高效率
- 问题
- 效率仍不高
- 自修改代码
- 自引用代码
- 动态二进制翻译
- 静态二进制和解释执行结合
- 执行过程
- VMM从虚拟机内存中读取一条指令
- 对指令进行翻译,缓存翻译指令
- 执行指令。如果指令为条件分支或条件跳转指令,则根据执行结果生成动态指令块,完成指令块的翻译并保存在缓存中
- 取下一条指令。如果下一条指令已经被翻译过,则转入③执行指令;如果下一条指令还未被翻译过,则转入②
内存虚拟化
需要对操作系统的虚拟内存进行再虚拟化
- 对CPU来说,RAM、I/O等硬件设备都是可用资源
- 资源分布在系统的物理地址空间内
- 内存的物理地址是系统物理地址的一部分,还有I/O设备、ROM等资源的物理地址
- VMM负责为VM分配物理内存,为VM提供物理地址空间
- 地址转换GVA→GPA→HPA


【【Cloud Explained ∙ 第六期】内存虚拟化】 https://www.bilibili.com/video/BV1aa411z7uu/?share_source=copy_web&vd_source=720f87a882146c2a069b6a0abbb1aedf
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...