1. 处理器虚拟化

VMM陷入

方式:

1) 基于处理器保护机制触发的异常,处理器会在执行敏感指令前,检查其执行条件是否满足,不满足就会陷入VMM进行处理。

2) 虚拟机主动触发异常,虚拟机通过陷阱指令主动陷入到VMM中。

3) 异步中断,一旦中断信号到达处理器,处理器会强行中断当前指令,然后跳转到VMM注册的中断服务程序。

VM-Exit:CPU自动从非跟模式切换到根模式

VM-Entry:VMM调度某个客户机运行时,CPU从根模式切换到非根模式。

VMCS:保存虚拟CPU需要的相关状态

vCPU:vCPU描述符,包括虚拟寄存器(VMCS内)和vCPU标识、状态信息(VMCS外)等

2. 中断虚拟化

事件注入机制

3. 内存虚拟化

一个操作系统对其物理内存存在两个主要的基本认识:物理地址从0开始和内存地址连续性。

1) 引入客户机物理地址空间

由于引入客户机物理地址空间,内存虚拟化需要通过两次地址转换来支持地址空间的虚拟化,即

客户机虚拟地址(GVA)-》客户机物理地址(GPA)-》宿主机物理地址(HPA)

其中从GVA到GPA的转换是由客户机软件决定,通常是客户机操作系统通过VMCS中的Guest状态域CR3指向的页表决定。GPA到HPA的转换是由VMM决定(客户机物理地址与宿主机物理地址映射表)。

2) 影子页表(客户机页表的虚拟TLB)

一份影子页表与一份客户机操作系统的页表对应,将客户机虚拟地址直接映射到宿主机物理地址。客户机操作系统维护的页表只能被客户机操作系统载入到虚拟MMU中,不能被物理MMU使用,VMM在物理MMU中载入的是影子页表。

v 影子页表的创建与维护贯穿于:

VMM对客户机操作系统修改客户机CR3寄存器的截获与处理;

VMM对客户机操作系统INVLPG指令的截获与处理;

VMM对因客户机页表和影子页表不一致而触发的缺页异常的截获与处理;

v 缺页异常的分类:

影子页表初始化时的缺页异常;

VMM将宿主机物理页换出到硬盘上引发的缺页异常;

客户机上的缺页异常;

v 影子缺页异常的处理:

客户机页帧号-》宿主机物理页帧号-》影子宿主机页帧号

① VMM根据客户机页表项建立起相应的影子页目录和页表结构

② VMM根据发生缺页异常的客户虚拟地址,在客户机页表的相应页表项中得到与之对应的客户机物理地址

③ 根据客户机物理地址,在客户机物理地址与宿主机物理地址映射表中得到相应的宿主机物理地址,VMM再把这个宿主机物理地址填充到影子页表中,需要填充的内容还包括页表项的访问位和修改位

v 影子页表的缺点:

① 页表同步,实现复杂

② 为每个客户机进程都维护一个对应的影子页表,内存开销大

 

3) IntelEPT(扩展页表)

从硬件上支持GVA-》GPA-》HPA的两次地址转换:

CPU首先查找客户机CR3寄存器指向的页表,CR3寄存器给出的是GPA,然后CPU查找EPT TLB将客户机CR3中的GPA转换为HPA,若EPT TLB没有相应的记录,就进一步查找EPT页表,如果还没有,CPU抛出EPT Violation异常交给VMM处理。EPT硬件通过增大EPT TLB来尽量减少内存访问。

页池;

4. I/O设备虚拟化

VT-x技术允许客户机直接访问物理的I/O空间,实现了让客户机直接访问设备真实的I/O地址空间(包括端口I/O和MMIO内存映射I/O)

VT-d技术提供了DMA重映射技术,让设备的DMA操作直接访问到客户机的内存空间

v Intel VT-d

设备所有的DMA传输都会被DMA重映射硬件截获。

v DMA重映射

DMA:直接内存访问,包括同步DMA,即由设备驱动在设定好需要被DMA访问的内存地址后,写某个寄存器来通知设备发起DMA,设备会直接从该内存地址读取内容并操作。异步DMA,即设备将数据直接复制到一个事先设定好的内存地址,再通过一个中断通知驱动程序。

PCI总线:设备标识符、PCI配置空间、PCI设备枚举

① BDF:设备标识符,用来索引任何一条总线上的任何一个设备。

② 根条目:用于描述PCI总线,每条总线对应一个根条目,共256个。

③ 上下文条目:用于描述某个具体的PCI设备,共256个。

v DMA重映射过程

当DMA重映射硬件捕获到一个DMA传输时,通过其中的BDF的BUS字段索引根条目表,得到产生此DMA传输的总线对应的根条目,由此根条目的CTP字段索引上下文条目表,用BDF中的{Device:Funciton}字段索引该表得到产生此DMA传输的设备对应的上下文条目。由上下午条目的ASR字段,可以寻址到该设备对应的I/O页表,通过I/O页表中GPA到MPA的映射,DMA重映射硬件就可以做地址转换了,从而使设备能够直接访问指定客户机的内存区域。