什么是“非虚拟化”指令?

我正在为我的课堂演示研究虚拟化技术。

我不清楚术语 – “虚拟化指令”和“非虚拟化指令”。

有人可以解释吗?

简而言之:

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

那就是问题所在。 现在解决scheme:

  • 准虚拟化:修补操作系统,所以它不使用有问题的指示。 而是使用对底层系统的调用。 (这是用于Xen的PV客人,只有在开放的操作系统下才可行)
  • 仿真:在模拟CPU中运行代码,并用代码解释每条指令。 (由BOCHS和其他一些仿真器使用)
  • 重新编译:不是解释每条指令,而是生成与原始代码执行相同操作的新机器代码; 但是具有期望的诱捕。 (由QEMU使用)
  • 自动修补:扫描代码,如果有任何“问题”指令,请将其replace为对底层系统的调用。 (由KQEMU和VMWare使用)
  • “硬件虚拟化”:英特尔和AMD最近都增加了一个额外的模式,将所需的陷阱添加到那些不可虚拟化的指令中。 (由Xen HVM,KVM,VirtualBox使用)