我开始使用 Docker,经过几个小时的尝试后,我发现我的 BIOS 阻止了它,我需要调整 BIOS 设置。我被告知 BIOS 与主板有某种关系。
BIOS 如何能阻止这种过程,并推翻操作系统的决定?
答案1
这并不是说 CPU 阻塞了程序;它没有那么低级别的应用程序概念。问题是 Docker在非 Linux 操作系统上可能需要硬件虚拟化。您尚未指定操作系统,但我做了一点调查,发现您可能使用 Windows。
硬件虚拟化是一项 CPU 功能,正如您从名称中猜到的那样,它允许 CPU 帮助进行虚拟化。在许多机器上,您必须在 BIOS 中启用它。这在一定程度上是为了预防安全问题基本上,您无法启动某个程序,因为它试图使用实际上不存在的功能(而不是主动阻止的功能)。
答案2
Ben N 的回答显然是最有用、最清晰的。
对于那些仍然感到疑惑的人来说,这里是完整的故事。
虚拟化是通过 CPU 的硬件辅助实现的。由于虚拟化操作系统会干扰主机操作系统,因为它们会争夺相同的资源,因此需要一种机制来阻止客户机对硬件进行不受控制的访问。这可以通过软件、速度慢、技术或 CPU 的辅助来实现。
硬件辅助虚拟化是通过特定的硬件实现的,选修的说明,您可以在第 23、24、25、26、27 和 28 章中阅读相关内容英特尔手册 3B 第 3 部分. 软件在尝试使用这些指令之前,必须首先检查该指令是否受支持。
出于安全原因,CPU有一个特殊的寄存器,它是一个磁共振,称为 IA32_FEATURE_CONTROL它保存了启用或禁用功能的位。
引用
第 0 位是锁定位。如果此位被清除,VMXON 会引起一般保护异常。如果锁定位被设置,则对该 MSR 的 WRMSR 会引起一般保护异常;MSR 不能被修改,直到上电复位条件。系统 BIOS 可以使用此位为 BIOS 提供设置选项以禁用对 VMX 的支持。要在平台中启用 VMX 支持,BIOS 必须设置位 1、位 2 或两者(见下文),以及锁定位。
根本点在于一旦寄存器被锁定,它不能被解锁,直到上电。
由于 BIOS/UEFI 是第一位的,因此它有权通过清除相应位并锁定寄存器来禁用虚拟化,而在任何操作系统阻止之前都无法实现。当以这种方式禁用虚拟化功能时,CPU 会报告缺少可选指令扩展(如果使用它们,实际上会出现故障),因此软件无法使用硬件虚拟化。