什么是“不可虚拟化”指令?

3 virtualization

我正在为我的课堂演示研究一些虚拟化。

我不清楚这些术语 - “可虚拟化指令”和“不可虚拟化指令”。

这里有人可以解释一下吗?

Jav*_*ier 6

简而言之:

  • 大多数处理器具有不同的特权级别;这让操作系统可以中断、限制和终止进程,而不会让任何用户级进程影响任何其他进程。
  • 有处理权限级别的指令,一些低级别的硬件管理。通常这些指令仅限于在最高特权级别工作,因此操作系统必须在此级别运行
  • 如果您尝试以较低权限运行低级操作系统代码,这些低级指令将失败。理想情况下,失败应该触发一些“真正的低级别”操作系统,这可能会产生任何需要的魔法来创造失败的代码在裸​​机上运行的错觉。
  • 不幸的是,在 x86 上,一些指令要么静默失败,要么触发全局失败,因此它们被称为“不可虚拟化”。

那就是问题所在。现在的解决方案:

  • 半虚拟化:修补操作系统,因此它不使用有问题的指令。相反,它使用对底层系统的调用。(这用于 Xen PV 客户机,仅适用于开放操作系统)
  • 仿真:在仿真 CPU 中运行代码,并带有解释每条指令的代码。(由 BOCHS 和其他一些模拟器使用)
  • 重新编译:不是解释每条指令,而是生成与原始代码执行相同操作的新机器代码;但带有所需的诱捕。(由 QEMU 使用)
  • 自动打补丁:扫描代码,如果有任何“问题”指令,就用对底层系统的调用替换它。(由 KQEMU 和 VMWare 使用)
  • “硬件虚拟化”:Intel 和 AMD 最近都添加了一个额外的模式,将所需的陷阱添加到那些不可虚拟化的指令中。(由 Xen HVM、KVM、VirtualBox 使用)