二.X86架构及操作系统描述
2.1 X86的历史
l 最早的X86处理器8086和8088是16位的处理器
l Intel研发的第一个微处理器是4位的
l x86处理器架构存在虚拟化漏洞
2.1.2操作系统概述
l 操作系统内核运行在CPU最高权限级上,应用程序运行在CPU最低权限级上。
2.2 X86内存架构
2.2.1地址空间
l 物理地址空间:由CPU实现的物理地址位数所决定
l 线性地址空间:取决于CPU实现的线性地址位数(外地址总线位数)。
2.2.2地址
l 逻辑地址(X86特有)
l 线性地址(虚拟地址):分页:线→物;不分页:线=物
l 物理地址(总线地址)①有分段,无分页:逻辑→线性=物理;②有分页分段:逻辑→线性→物理;
2.2.3 X86内存管理机制
l 分段机制:
4个基本构成:逻辑地址、段选择寄存器、段描述符、段描述符表
(1) 段选择符:16位。逻辑地址的组成部分。
Index(段描述符表索引)
TI(0-GFT、1-LDT)
RPL(权限级别)
段寄存器:CS代码段,DS数据段,SS栈段,FS,ES,GS
(2) 段描述符:基地址、长度等
线性地址=段描述符32位基地址+逻辑地址偏移量
(3) 段描述符表:GDT、LDT
至少一个GDT,可以一个或多个LDT
LDT的段描述符放在GDT中
寄存器(为GDT/LDT提供基地址):GDTR(32BASE,16LIMIT)、LDTR(结构同段寄存器)
读取/存储:LGDT/SGDT;LLDT/SLDT
l 分页机制
1. X86下一个页的大小是4KB
4GB的虚拟地址空间可划分为1024*1024个页面
2. 核心思想:通过页表将线性地址转换为物理地址,并配合旁路转换缓存区(TLB)来加速地址转换过程。
三个部件:页表、CR3寄存器、TLB
3. 页目录项与页表项中的P(present)字段
P=1:物理页面存在物理内存中;
P=0:页面不存在物理内存中,产生缺页错误。
4. CR3
称为页目录基地址寄存器
存放页目录所在的物理地址
5. TLB
作用:对最近用到的页面映射进行缓存
实现:VFN到PFN的转换
非直接从TLB中获取物理地址
2.4 中断与异常
l 中断是一个过程
l 概念:指当系统出现某种意外,CPU暂停当前程序的执行转而处理意外情况的程序和执行过程。
l 四个步骤:中断请求-中断响应-中断处理-中断返回
l 现代计算机架构是由大量的中断事件驱动的
l 两个阶段:PIC(可编程中断控制器)和APIC(高级可编程中断控制器)
l 中断分为内部和外部
1. PIC
共8个中断管脚。优先级高IR0,低IR7
l 三个重要寄存器:IRR(中断请求寄存器)
ISR(服务中寄存器)
IMR(中断屏蔽寄存器)
l PIC向CPU提交中断的过程
(1) 一个或多个IR管脚上产生电平信号,若对应的中断没有被屏蔽,IRR中相应的位被置1.
(2) PIC拉高INT管脚通知CPU中断发生
(3) CPU通过INTA管脚应答PIC,表示中断请求被收到
(4) PIC收到INTA应答后,将IRR中具有最高优先级的位清0并设置ISR中对应的位
(5) CPU通过INTA管脚第二次发出脉冲,PIC收到后计算最高优先级中断的vector,并将它提交到数据线上
(6) 等待CPU写EOI。收到EOI后,ISR中最高优先级位被清0.
l 中断屏蔽位:禁止响应某个中断(保证一些重要的程序不被打断)
l 不能屏蔽的中断:电源故障,重启,内存错误
2. APIC
l 产生原因:PIC可以在UP(单处理器)平台上工作,但无法用于MP(多处理器)平台。
l 两半部分构成:CPU中的本地高级可编程中断控制器(APIC)、南桥中的I/O高级可编程中断控制器(IOAPIC)
l IOAPIC通常有24个不具优先级的管脚
3. IDT表
l 存放“门”
l “门”是中断和异常通往各自处理函数的入口。
l IDT表的基地址存放在IDTR寄存器中,IDTR寄存器由一个基地址字段和长度字段构成。
l 寻找中断函数入口地址的过程
(1) 中断vector索引号+IDT基地址→中断门
(2) 中断门中断选择符+GDT基地址→中断段描述符
(3) 中断段描述符中断基地址+中断门中的偏移→中断处理函数入口的线性地址
2.4.2异常架构
l 与中断的区别:异常是在程序的执行过程中同步发生的,CPU当前指令有问题
(内部发生)
中断是与CPU当前指令无关(外部发生)
l 分为三类:错误、陷阱、终止
l 中断源
(1) 外部设备请求中断(键盘、打印机)
(2) 故障强迫中断(运算溢出,存储器读写错误)
(3) 实时时钟请求中断(完成检测和控制工作)
(4) 数据通道中断(磁盘、磁带机等)
2.5进程
l 定义:程序是指一个静态的指令序列,进程是一个容器,其中包含了当前执行一个程序的特定实例时所用到的各种资源。
l 资源包括:(1)私有的线性地址空间;(2)可执行的程序;(3)一些已经获得的其他资源;(4)进程的权限;(5)进程的描述符;
2.5.1 上下文
l 定义:程序(进程/中断)运行时所需要的寄存器的最小集合。
2.5.2 上下文切换
l 定义:指程序从一种状态切换到另一种状态(例如用户态切换到内核态),或从一个程序切换到另一个程序(例如进程切换)时,导致上下文相关寄存器值的变化行为。
l 变化指:旧程序(切换前的程序)上下文相关寄存器的值被保存到内存中,新程序(切换后的程序)上下文相关寄存器的值被加载到寄存器中。
l 三种情况:(1)用户态到内核态的切换;
(2)进程切换;
(3)到中断上下文的切换;
2.6 I/O架构
l 计算机任务分为两种:CPU运算和I/O操作
l I/O是CPU访问外部设备的方法
l 设备通过寄存器和设备RAM给CPU展现自己的功能
l 按访问方式分为两类:
(1) Port I/O(端口I/O):通过I/O端口访问设备寄存器;I/O端口地址空间是独立的;
优点:I/O端口的地址码较短;
缺点:不能直接产生IN/OUT命令
(2) MMIO(内存映射I/O):通过内存访问的形式访问设备寄存器或设备RAM;
不同:MMIO要占用CPU物理地址空间
优点:不用专用I/O指令,任何对存储器数据进行操作的指令都可用I/O操作;
缺点:占用了内存空间的一部分,影响了系统内存容量。内存地址较长,访问时间增加。
2.6.2 DMA 直接内存访问
l 定义:将CPU从I/O操作中解放出来,设备就可以绕开CPU直接向内存中复制(或读取)数据。
l 分为:同步DMA(由软件发起)、异步DMA(由设备发起)
l DMA传输过程:
(1) DMA请求:CPU对DMAC进行初始化;
(2) DMA响应:DMAC对DMA请求进行优先级别判别和屏蔽判别;
(3) DMA传输:DMAC获得总线控制权后,CPU即可挂起;
(4) DMA结束:当完成规定的成批数据传送后,DMAC是释放总线控制权,并向I/O端发出结束信号。
2.6.3 PCI设备
l PCI总线是一种典型的树结构;
l 设备标识符包括:Bus(设备所在总线号)、Device(设备号)、Function(功能号)。简称(BDF)
2.7 时钟
l 时钟驱动如:进程调度、定时器
l 分为:周期性时钟、单次计时时钟
l 时钟任务:维护日常时间,驱动进程调度,防止进程超时运行;对CPU使用状况进行记账,对系统本身各个部分定时;
三.虚拟化概述
l VMM对物理资源的虚拟可归结为三个任务:CPU虚拟化、内存虚拟化、I/O虚拟化
3.1 可虚拟化架构与不可虚拟化架构
l 虚拟环境由:硬件、VMM、虚拟机 组成;
l 虚拟机的三个特征:同质、高效、资源受控;
同质:虚拟机的运行环境和物理机的环境在本质上需要是相同的;
高效:虚拟机中运行的软件需要有接近在物理机上直接运行的性能;
资源受控:VMM需要对系统资源有完全控制能力和管理权限;
补充:
l 什么是虚拟化?
虚拟化就是由位于下层的软件模块,通过向上一层软件模块提供一个与它原先所期待的运行环境完全一致的接口的方法,抽象出一个虚拟的软件或硬件接口,使得上层软件可以直接运行在虚拟的环境上。
l 什么是系统虚拟化?
系统虚拟化是指一台物理计算机系统虚拟化为一台或多台虚拟计算机系统。每个虚拟计算机系统(简称为虚拟机)都拥有自己的虚拟硬件(如CPU、内存和设备等),来提供一个独立的虚拟机执行环境。
l 特权指令指系统中有一些操作和管理关键系统资源的指令,这些指令只有在最高特权级上能够运行。
l 敏感指令指操作特权资源的指令。
l 可虚拟化的条件:所有的敏感指令都是特权指令
l 不可虚拟化的结构称为:虚拟化漏洞。
3.2 处理器虚拟化
l 是VMM最核心的部分。
l VMM陷入的三种方式:
(1) 基于处理器保护机制出发的异常,如敏感指令的执行
(2) 虚拟机主动触发异常(陷阱)
(3) 异步中断
3.3内存虚拟化
l 一个操作系统对物理内存的两点认识:
(1) 内存都是从物理地址0开始的
(2) 内存都是连续的,或者说至少在一些大的粒度(如256M)上连续
l 内存虚拟化面临的问题:
(1) 物理内存要被多个客户机操作系统同时使用,但物理内存只有一份,物理起始地址0也显然只有一个,无法同时满足所有客户机操作系统内存从0开始的要求;
(2) 内存分区方式,使内存的使用效率非常不灵活
l 核心:引入客户机物理地址空间
l 主要处理两个方面的问题:
(1) 给定一个虚拟机,维护客户机物理地址到宿主机物理地址之间的映射关系;
(2) 截获虚拟机对客户机物理地址的访问,并根据所记录的映射关系,将其转换成宿主机物理地址;
l 两次地址转换:客户机虚拟地址GVA→客户机物理地址GPA→宿主机物理地址HPA
l 好处:
(1) 满足客户机操作系统对内存和地址空间的特定认识;
(2) 在虚拟机之间、虚拟机与VMM之间进行隔离;
(3) 防止某个虚拟机内部的活动影响到其他虚拟机或直接影响到VMM
3.4I/O虚拟化
l 为什么需要I/O虚拟化?
(1) 外设资源是有限的;
(2) 满足多个客户机操作系统的需要
l 没有虚拟化时,操作系统怎么访问外设?
操作系统含有外设的驱动程序,它们接收来自其他模块(如用户进程)的请求,然后按照外设规定好的方式驱动外设完成特定任务。
l 两个指标:性能和通用性
越接近无虚拟机环境下的I/O,则性能越强;
使用的I/O虚拟化技术对客户操作系统越透明,则通用性越强。
l 三个过程:①设备发现;②访问截取;③设备模拟
l 设备模型:VMM中进行设备模拟,并处理所有设备请求和响应的逻辑模块。
3.6VMM的分类
3.6.1按虚拟平台分类
1.完全虚拟化
l 虚拟平台和现实平台是一样的,客户机操作系统无须做任何修改就可以运行。
l 两个阶段:软件辅助的完全虚拟化、硬件辅助的完全虚拟化。
(1)软件辅助的完全虚拟化
做法:优先级压缩、二进制代码翻译
(2)硬件辅助的完全虚拟化
技术:VT-x
2.类虚拟化
l 通过在源代码级别修改指令以回避虚拟化漏洞的方式来使VMM能够对物理资源实现虚拟化。
l 所虚拟的平台是现实中不存在的
3.6.2按VMM实现结构分类
补充:
l VMM主要功能:基于物理资源创建相应的虚拟资源,组成虚拟机,为客户机操作系统提供虚拟的平台。
l VMM分为:虚拟环境的管理和物理资源的管理
1. Hypervisor(原生)
l P:处理器管理代码,负责物理处理器的管理和虚拟化;
l M:内存管理代码,负责内存的管理的虚拟化;
l DM:设备模型,负责I/O设备的虚拟化;
l DR:设备驱动,负责I/O设备的驱动,即物理设备的管理;
l 安全:只依赖于VMM的安全
l 管理所有的物理资源。
2. 宿主模型
l 宿主机系统管理物理资源
l 安全:依赖VMM和宿主机操作系统的安全
3. 混合模型(Xen)
l 处理器和内存的虚拟化由VMM完成,I/O虚拟化由VMM和特权操作系统合作完成。
四.基于软件的完全虚拟化
4.2CPU虚拟化
4.2.1解释执行
4.3内存虚拟化
l 转换:GVA→GPA→HPA(前一个转换由客户机操作系统完成,后一个由VMM负责)
4.3.2影子页表
l GVA直接到HPA的地址翻译
l 前提:VMM需要对MMU实现虚拟化
l 影子页表是被物理MMU所装载使用的页表
l 影子页表建立与维护贯穿于VMM针对客户机操作系统修改客户机页表和刷新TLB所做的操作中,包括:
(1) VMM对客户机操作系统修改客户机CR3寄存器的截获与处理;
(2) VMM对客户机操作系统INVLPG指令的截获与处理;
(3) VMM对因客户机页表和影子页表不一致而触发的缺页异常的截获与处理;
l 常见的三种缺页异常
(1) 影子页表初始化的缺页异常;
(2) VMM将宿主机物理页换出到硬盘上引发的缺页异常;
(3) 客户机上的缺页异常;
l 影子页表的缺页处理机制
(1) VMM根据客户机页表建立起相应的影子页目录和页表结构;
(2) VMM根据发生缺页异常的客户机虚拟地址,在客户机页表的相应页表项中得到与之对应的客户机物理地址;
(3) 根据客户机物理地址在地址转换表中得到相应的宿主机物理地址,VMM再把这个宿主机物理地址填入到影子页表项中。
l 影子页表与客户机页表并不是时刻同步的,只有在需要的时候才进行同步。
l 影子页表充当了客户机页表巨大的TLB,称为虚拟TLB。
l 当客户机操作系统需要访问它的客户机页表时,物理MMU真正访问的是这个称为虚拟TLB的影子页表。
l 缺点:①实现非常复杂;②内存开销很大
五.硬件辅助虚拟化
5.2CPU虚拟化的硬件支持
l Intel VT的VT-x技术
l VT-x 引入两种操作系统模式,统称为VMX操作模式
(1) 根操作模式:VMM运行所处的模式
(2) 非根操作模式:客户机运行所处的模式
l VM-Exit:非根模式下敏感指令引起的“陷入”,CPU自动从非根模式切换到根模式;
l VM-Entry: VMM发起,调度某个客户机运行,CPU从根模式切换到非根模式;
l VMCS:为了更好地支持CPU虚拟化,VMCS保存虚拟CPU需要的相关状态;
6个域:(1)客户机状态域;(2)宿主机状态域;(3)VM-Entry控制域;(4)VM-Execution控制域;(5)VM-Exit控制域;(6)VM-Exit信息域;
l 新的指令:VMLAUNCH(执行VMCS第一次VM-Entry)/VMRESUME(执行过VMLAUNCH的VMCS后续)用于发起VM-Entry,
VMREAD/VMWRITE用于配置VMCS等
5.3CPU虚拟化的实现
l 使用CPU描述符
包括:①VCPU标识信息;②虚拟寄存器信息;③VCPU状态信息;④额外寄存器/部件信息;⑤其他信息;
5.5内存虚拟化
5.5.2 EPT
l 直接在硬件上支持GVA-GPA-HPA的两次地址转换,大大降低了内存虚拟化的难度,提高了内存虚拟化的性能;
l 原理:在原有的CR3页表地址映射的基础上,EPT引入了EPT页表来实现另一次映射。
l 为了支持EPT,在VM-Execution控制域中提供了一个字段(EnableEPT),当VM-Entry时,EPT会开启;VM-Exit时,EPT会关闭。
l EPT页表的HPA由VMCS的VM-Execution控制域的一个字段指定
l 原理图
EPT TLB:加速地址转换;
EPT Pointer存放在VMCS
l VM-Entry
GVA→GPA→HPA,前一个转换在CR3,后一个在EPT
VM-Exit
VMM/Host OS: VA→PA
5.6 I/O虚拟化的硬件支持
5.6.2 VT-d技术
l 主要核心技术:在北桥(MCH)引入DMA重映射硬件,以提供设备重映射和设备直接分配功能。
l 直接将物理设备分配给客户机操作系统,大大减少设备的模拟开销。
l 最快,性能最优。客户机操作系统只需使用原有驱动。
DMA重映射
l 解决无法通过软件的方式截获设备的DMA操作
l 三种数据结构描述VT-d中的PCI总线架构:
① BDF(设备标识符):通过BDF可以看作是设备在PCI总线上的地址
16位,Bus,Device,Function
② 根条目
③ 上下文条目
l DMA重映射的过程
① DMA重映射硬件捕获一个DMA传输
② 其中BDF的bus字段索引根条目表
③ 根条目的CTP字段可以获得上下文条目表
④ BDF中的{dev:func}索引该表
⑤ 上下文条目的ASR字段,可以寻址到该设备对应的I/O页表
⑥ GPA→HPA(MPA)