1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CPU虚拟化

* * * 虚拟软件构造一个从客户机到宿主机的同构。 所有的客户状态S都通过某种函数功能V(S)对应到宿主状态S‘。 另外,每一个客户状态之间的转移操作e(S)也对应有e’(S’)操作在宿主机器上。 虚拟化软件必须负责实现其中的V和e功能函数。 * 直接执行 * 这又是一个实用性的定义。严格虚拟化的定义取决于陷入和模拟能否正常运行。 【再次又一个可使用的定义。严格虚拟化隐含着陷入和模拟能否正常运行。】 X86并不是严格的虚拟化。一个原因就是popf指令。Popf指令从栈中取出一个字并放入标识寄存器中。在标识寄存器中有一个中断允许位。在系统级时,这个中断允许位由popf更新。当X86设计者引入用户态时,意识到用户修改这个位会导致系统崩溃。因此,他们采取忽略用户态下的IF位更新操作来解决这个问题。当然,这也对客户操作系统中断VMM起作用。当VMM把客户操作系统运行在用户态时,客户操作系统所做的中断修改就被VMM忽视了,因此VMM也就不知道客户操作系统的中断状态了。解决的方法就是让popf陷入,或者是让popf在修改IF时陷入。 注意:这些条件都只是必要条件而非充分条件。例如:在x86上还存在其他陷入模拟不能有效工作的原因。 * * * 动态二进制翻译用于Cpu的虚拟化,通过把有潜在危险的指令序列逐一翻译成顺序的指令序列。 它是这样工作: 监视器监测下一个序列的指令。一个指令序列被定义为下一个基本块,就是指在下一个控制转移如分支前的所有指令。当然我们有理由可以提前结束指令序列或者跳过分支,而现在我们假定都会到下一个分支处。 每一条指令都被翻译,并且翻译都被拷贝到一个翻译缓存中去了。 指令是如下翻译的: 不会引发问题的指令可以修改后拷贝到翻译缓存中,这种称之为“等同”翻译。 一些简单的危险指令则是翻译为一个短的模拟代码序列。这些代码直接放入翻译缓存中。我们称这种方式位“内联”翻译。一个典型实例就是修改中断标识位操作。 其他危险指令需要由监视器中的模拟代码来实现。这些指令需要监视器的参与,通常称为“call out”调出翻译。页表的改变就是这种方式。 结束基本块的分支需要一个调出。 监视器可以通过与硬件寄存器对应的虚拟寄存器来跳到翻译好的基本块的开头。 因此危险指令可以是特权指令,不可虚拟化指令,控制流,内存访问指令。 * 动态二进制翻译用于Cpu的虚拟化,通过把有潜在危险的指令序列逐一翻译成顺序的指令序列。 它是这样工作: 监视器监测下一个序列的指令。一个指令序列被定义为下一个基本块,就是指在下一个控制转移如分支前的所有指令。当然我们有理由可以提前结束指令序列或者跳过分支,而现在我们假定都会到下一个分支处。 每一条指令都被翻译,并且翻译都被拷贝到一个翻译缓存中去了。 指令是如下翻译的: 不会引发问题的指令可以修改后拷贝到翻译缓存中,这种称之为“等同”翻译。 一些简单的危险指令则是翻译为一个短的模拟代码序列。这些代码直接放入翻译缓存中。我们称这种方式位“内联”翻译。一个典型实例就是修改中断标识位操作。 其他危险指令需要由监视器中的模拟代码来实现。这些指令需要监视器的参与,通常称为“call out”调出翻译。页表的改变就是这种方式。 结束基本块的分支需要一个调出。 监视器可以通过与硬件寄存器对应的虚拟寄存器来跳到翻译好的基本块的开头。 因此危险指令可以是特权指令,不可虚拟化指令,控制流,内存访问指令。 * * * * * * * * 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 – 状态 用户虚拟内存 程序计数器 条件码寄存器 Reg 0 Reg 1 Reg n-1 FP 0 FP 1 FP n-1 专用寄存器 通用[一般]寄存器 浮点寄存器 用户 ISA – 指令 加 减 与 比较 … 载入字节 载入字 多路存储 压栈 … 跳转 相等跳转 调用 返回 … 单精度加 双精度乘 双精度开根号 … 整数 内存 控制流[图] 浮点数 取指 寄存器操作 发射 Integer Integer Memory FP 典型指令流水线 译码 指令集 系统 ISA 特权级别 控制寄存器 陷入和中断 硬编码向量 分派表 系

文档评论(0)

busuanzi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档