BIOS 如何阻止虚拟化?

Alv*_*oao 26 bios operating-systems virtualization docker

我开始使用 Docker,在尝试让它工作几个小时后,我发现我的 BIOS 阻止了它,我需要调整 BIOS 设置。有人告诉我 BIOS 以某种方式与主板有关。

BIOS 如何阻止这种进程,否决操作系统?

Mar*_*oom 43

Ben N 的答案显然是最有用和最清晰的答案。

对于那些仍然想知道的人,这里是完整的故事。


虚拟化是通过 CPU 的硬件辅助实现的。由于虚拟化操作系统会干扰主机,因为它们会竞争相同的资源,因此需要一种机制来阻止来宾对硬件的不受控制的访问。这可能会因软件、缓慢、技术或 CPU 的帮助而降低。

硬件辅助虚拟化是通过特定的可选指令实现的,您可以在英特尔手册 3B 第 3 部分的第 23、24、25、26、27 和 28 章中阅读相关内容。在尝试使用这些指令之前,软件必须首先检查是否支持这些指令。

出于安全原因,CPU 有一个特殊的寄存器,它是一个MSR,称为 IA32_FEATURE_CONTROL,它保存位告诉功能启用或禁用。
引用

位 0 是锁定位。如果该位清零,VMXON 会导致一般保护异常。如果设置了锁定位,则此 MSR 的 WRMSR 会导致通用保护异常;在上电复位条件之前不能修改 MSR。系统 BIOS 可以使用此位为 BIOS 提供设置选项以禁用对 VMX 的支持。要在平台中启用 VMX 支持,BIOS 必须设置位 1、位 2 或两者(见下文)以及锁定位。

基本点是,一旦寄存器被锁定,直到上电才能解锁

由于 BIOS/UEFI 首先出现,它有能力通过在任何操作系统阻止虚拟化之前清除适当的位并锁定寄存器来禁用虚拟化。当以这种方式禁用虚拟化功能时,CPU 报告它缺少可选指令扩展(如果使用它们实际上会出错),因此软件无法使用硬件虚拟化。

  • 这是对这个问题的一个很好的补充。大多数人不知道设置需要重置才能更改,因此在操作系统运行时无法“即时”启用它。 (3认同)

Ben*_*n N 38

并不是 CPU 阻塞了程序;它没有那么低级别的应用程序概念。问题在于非 Linux 操作系统上的Docker可能需要硬件虚拟化。你没有指定你的操作系统,但我做了一点窥探,发现你可能使用 Windows。

硬件虚拟化是一种 CPU 功能,正如您从名称中猜到的那样,它让 CPU 帮助实现虚拟化。在许多机器上,您必须在 BIOS 中启用它。这部分是为了防止出现安全问题。基本上,您无法启动程序,因为它试图使用实际上不存在的功能,而不是主动阻止的功能。

  • `一点点窥探` Ha..ha (14认同)
  • @RACING121 N 代表 NSA :) (3认同)
  • @Celeritas 硬件虚拟化是 CPU 和 BIOS 提供的一组功能,可以使运行虚拟机更高效,例如通过以比纯软件级别更有效的方式透明地管理 VM 进行的内存访问,以及处理/捕获“特权”指令,例如虚拟化软件的 I/O 操作,以便更有效地处理。 (2认同)