虚拟机课程2CPU虚拟化.ppt

上传人:本田雅阁 文档编号:3306762 上传时间:2019-08-10 格式:PPT 页数:31 大小:1.18MB
返回 下载 相关 举报
虚拟机课程2CPU虚拟化.ppt_第1页
第1页 / 共31页
虚拟机课程2CPU虚拟化.ppt_第2页
第2页 / 共31页
虚拟机课程2CPU虚拟化.ppt_第3页
第3页 / 共31页
虚拟机课程2CPU虚拟化.ppt_第4页
第4页 / 共31页
虚拟机课程2CPU虚拟化.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《虚拟机课程2CPU虚拟化.ppt》由会员分享,可在线阅读,更多相关《虚拟机课程2CPU虚拟化.ppt(31页珍藏版)》请在三一文库上搜索。

1、E6998 虚拟机 课程 2 CPU 虚拟化,Scott Devine VMware, Inc.,提纲,CPU 背景 虚拟化技术 系统ISA虚拟化 指令解释 陷入模拟 二进制翻译 混合模型,计算机系统组成,CPU,MMU,内存,控制器,本地总线,I接口,高速I/O总线,NIC,控制器,桥,帧缓存,LAN,低速I/O总线,USB,CD-ROM,CPU 组成,指令系统结构(ISA) 定义: 对编程人员可见的状态 寄存器和内存 在这些状态上进行的操作指令 典型ISA划分为2部分 用户 ISA 主要用来计算 系统 ISA 主要用来管理系统资源,用户 ISA 状态,用户虚拟内存,程序计数器,条件码寄存器

2、,Reg 0,Reg 1,Reg n-1,FP 0,FP 1,FP n-1,专用寄存器,通用一般寄存器,浮点寄存器,用户 ISA 指令,取指,寄存器操作,发射,Integer,Integer,Memory,FP,典型指令流水线,译码,指令集,系统 ISA,特权级别 控制寄存器 陷入和中断 硬编码向量 分派表 系统时钟 内存管理单元MMU 页表 TLB I/O 设备访问,System,User,User,Extension,Kernel Level 0,Level 1,Level 2,提纲,CPU 背景 虚拟化技术 系统ISA虚拟化 指令解释 陷入模拟 二进制翻译 混合模型,Isomorphis

3、m,形式上讲,虚拟化就是从客户机状态到宿主机状态的同构构造,Guest,Host,e(Si),e(Si),V(Si),V(Sj),系统指令体系结构的虚拟化,监视器需要的硬件支持 例如: 监视器必须能够控制实际的硬件中断 访问硬件使得虚拟机(VM)破坏隔离性 例如: 访问MMU使得VM能够写任何页 因此 客户机所有对虚拟系统ISA访问的操作必须由监视器软件模拟实现。 系统的状态保存在内存中。 系统指令都由虚拟机监视器的相关函数实现相关函数实现在监视器中,示例:CPU状态,static struct uint32 GPR16; uint32 LR; uint32 PC; int IE; int I

4、RQ; CPUState; void CPU_CLI(void) CPUState.IE = 0; void CPU_STI(void) CPUState.IE = 1; ,CPU虚拟化技术的目标 能够尽可能快的处理一般指令 特权指令转交给模拟例程,指令解释,模拟 取指/译码/执行 软件流水线 优点 容易实现 复杂度最低 缺点 慢!,实例: 虚拟化中断标识 w/ 指令解释器,void CPU_Run(void) while (1) inst = Fetch(CPUState.PC); CPUState.PC += 4; switch (inst) case ADD: CPUState.GPRr

5、d = GPRrn + GPRrm; break; case CLI: CPU_CLI(); break; case STI: CPU_STI(); break; if (CPUState.IRQ ,陷入和模拟,客户操作系统+ 应用,虚拟机监视器,缺页,未定义指令,虚拟中断,MMU 模拟,CPU 模拟,I/O 模拟,非特权态,特权态,“严格的可虚拟化”,处理器能够虚拟化的前提是:当运行一个不是很特权的模式时: 所有访问特权状态的指令都陷入 所有指令要么陷入,要么和原来一样的执行 ,陷入模拟的问题,并不是所有的体系结构都支持 陷入的代价比较高 监视器在特权级别 需要虚拟化保护级别,二进制翻译,翻

6、译器,客户代码,翻译缓存,翻译缓存TC 索引,CPU 模拟例程,基本块,vPC,mov ebx, eax,cli,and ebx, 0xfff,mov ebx, cr3,sti,ret,客户代码,Straight-line code,控制流图,基本块,二进制翻译,vPC,mov ebx, eax,cli,and ebx, 0xfff,mov ebx, cr3,sti,ret,mov ebx, eax,call HANDLE_CLI,and ebx, 0xfff,mov CO_ARG, ebx,call HANDLE_CR3,call HANDLE_STI,jmp HANDLE_RET,开始,客

7、户代码,翻译缓存,二进制翻译,vPC,mov ebx, eax,cli,and ebx, 0xfff,mov ebx, cr3,sti,ret,mov ebx, eax,mov CPU_IE, 0,and ebx, 0xfff,mov CO_ARG, ebx,call HANDLE_CR3,mov CPU_IE, 1,test CPU_IRQ, 1,jne,call HANDLE_INTS,jmp HANDLE_RET,start,客户代码,翻译缓存,基本二进制翻译器,void BT_Run(void) CPUState.PC = _start; BT_Continue(); void BT_

8、Continue(void) void *tcpc; tcpc = BTFindBB(CPUState.PC); if (!tcpc) tcpc = BTTranslate(CPUState.PC); RestoreRegsAndJump(tcpc); void *BTTranslate(uint32 pc) void *start = TCTop; uint32 TCPC = pc; while (1) inst = Fetch(TCPC); TCPC += 4; if (IsPrivileged(inst) EmitCallout(); else if (IsControlFlow(ins

9、t) EmitEndBB(); break; else /* ident translation */ EmitInst(inst); return start; ,基本二进制翻译器 第二部分,void BT_CalloutSTI(BTSavedRegs regs) CPUState.PC = BTFindPC(regs.tcpc); CPUState.GPR = regs.GPR; CPU_STI(); CPUState.PC += 4; if (CPUState.IRQ ,控制流的控制,vEPC,test eax, 1,jeq,add ebx, 18,mov ecx, ebx,mov ec

10、x, eax,test eax, 1,jeq,call END_BB,call END_BB,开始,客户代码,翻译缓存,ret,控制流的控制,vEPC,test eax, 1,jeq,add ebx, 18,mov ecx, ebx,mov ecx, eax,test eax, 1,jeq,call END_BB,call END_BB,客户代码,翻译缓存,ret,add ebx, 18,mov ecx, ebx,mov ecx, eax,call HANDLE_RET,eax = 0,查找下一个,控制流的控制,vEPC,test eax, 1,jeq,add ebx, 18,mov ecx,

11、 ebx,mov ecx, eax,test eax, 1,jeq,jmp,call END_BB,客户代码,翻译缓存,ret,add ebx, 18,mov ecx, ebx,mov ecx, eax,call HANDLE_RET,eax = 0,控制流的控制,vEPC,test eax, 1,jeq,add ebx, 18,mov ecx, ebx,mov ecx, eax,test eax, 1,jeq,jmp,call END_BB,客户代码,翻译缓存,ret,add ebx, 18,mov ecx, ebx,mov ecx, eax,call HANDLE_RET,eax = 1,

12、查找下一步,mov ecx, eax,call HANDLE_RET,控制流的控制,vEPC,test eax, 1,jeq,add ebx, 18,mov ecx, ebx,mov ecx, eax,test eax, 1,jeq,jmp,jmp,Guest Code,Translation Cache,ret,add ebx, 18,mov ecx, ebx,mov ecx, eax,call HANDLE_RET,eax = 1,mov ecx, eax,call HANDLE_RET,二进制翻译存在的问题,翻译缓存索引数据结构 PC(程序计数器) 在中断上的同步 自我修改(Self-m

13、odifying )的代码 将写操作转给翻译后的客户机代码在翻译好的客户代码的写通知,二进制翻译的其他使用,ISA交叉翻译器 Digital FX!32 优化翻译器 H.P. Dynamo 高级语言字节码翻译器 Java .NET/CLI,混合方式,内核代码为内核的二进制翻译 用户代码为用户的直接执行(陷入模拟) U.S. Patent 6,397,242,直接执行OK?,直接执行跳转到客户机PC,Yes,在TC中执行,TC 验证,处理特权指令,No,调出,陷入,作业 1 二进制补丁,用来分析的二进制补丁和代码覆盖 进程虚拟化 补丁代码能编译进程序 通过打入控制流指令补丁来跟踪执行 打入就地指令补丁 没有必要翻译或拷贝 指令解码需要判断 指令长度 控制流点 通过asm链接调用的调出 保存 EFLAGS 保存寄存器 调用C代码,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1