【问题标题】:What are "non-virtualizable" instructions in x86 architecture?x86 架构中的“不可虚拟化”指令是什么?
【发布时间】:2015-12-24 00:07:29
【问题描述】:

在硬件辅助虚拟化出现之前,由于各种原因,存在无法虚拟化的指令。有人可以解释一下这些指令是什么以及为什么它们不能被虚拟化吗?

【问题讨论】:

标签: x86 intel virtualization computer-architecture xen


【解决方案1】:

要虚拟化 ISA,必须满足某些要求。 Popek and Goldberg 使用如下内容:

一台机器至少有两种模式(a)用户模式和(b)系统模式。通常,应用程序运行在用户模式,操作系统运行在系统模式。在系统模式下,代码/程序可以不受限制地查看和操作机器。在用户模式中,代码/程序的功能有一些限制,例如未经许可,它不能访问机器的所有内存。

指令是 (a) 特权 或 (b) 非特权特权指令陷阱用户模式下执行。陷阱意味着机器被强制进入系统模式,它执行操作系统的一些代码来处理这种情况。从某种意义上说,它们在执行时会提醒操作系统。

说明也可以是 (a) 敏感 或 (b) 不敏感敏感指令会修改部分机器资源,或者根据它们是在用户模式还是系统模式中执行而表现出不同的行为。

在虚拟化 ISA 时,重要的是虚拟机监视器 (VMM) 可以检测并顺利处理程序或客户操作系统修改机器资源的任何尝试。它必须能够看到敏感指令何时被执行。为此,所有敏感指令都需要特权,因此在执行时会陷入陷阱。当被困时,我们可以进入系统模式并从VMM调用代码来处理资源修改。

问题在于并非所有 X86 的敏感指令都是特权指令。这意味着资源修改可以在 VMM 没有看到和处理的情况下发生,这可能很危险。或者,这可能意味着在 用户模式 中执行来宾操作系统中的指令并看到与在 系统模式 中执行指令不同的效果。根据this paper,x86 中有 17 条指令敏感,但没有特权。一个例子是POPF,根据机器的模式有不同的语义。

【讨论】:

  • 感谢您的精彩回答!解释清楚。
猜你喜欢
  • 1970-01-01
  • 2020-01-04
  • 2019-06-20
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
相关资源
最近更新 更多