BIOS如何阻止虚拟化?


26

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

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


14
你落后了。用于虚拟化的BIOS设置告诉CPU允许进行特定类型的处理。如果BIOS中未启用虚拟化扩展,则CPU将无法执行程序。这种情况很像试图在x64系统上运行针对DEC Alpha处理器体系结构编译的程序。如果没有扩展名,程序将尝试运行CPU无法理解的指令。您的Docker阻止自己执行,因为它检测到当前配置的CPU无法运行它。
Frank Thomas

Answers:


37

并不是说CPU正在阻塞程序;而是CPU正在阻塞程序。它没有这么低的应用程序概念。问题在于非Linux操作系统上的 Docker 可能需要硬件虚拟化。您尚未指定操作系统,但是我做了一点监听,发现您可能使用Windows。

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


14
a tiny bit of snoopingHa..ha
bs677 '16

是的,我正在使用Windows 7!感谢您的解释!!!我明白了!
Alvaro Joao

我熟悉此设置,但仍不清楚,硬件虚拟化到底是什么(在BIOS设置的背景下)?
Celeritas

2
@Celeritas硬件虚拟化是CPU和BIOS提供的一组功能,它们使运行中的虚拟机更加高效,例如,以比在纯软件级别上更高效的方式透明地管理VM对内存的访问,以及处理/捕获“特权”指令,例如I / O操作,以便虚拟化软件更有效地处理。
–ζ

2
@ RACING121 N代表NSA :)
本N

41

Ben N答案显然是最有用和最明确的答案。

对于那些仍然感到疑惑的人,这里是全文。


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

硬件辅助虚拟化与具体,实施可选的说明,您可以在章节23,24,25,26,27和28读到它的英特尔手册3B第3部分。在尝试使用这些说明之前,软件必须首先检查该说明是否受支持。

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

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

基本要点是,一旦锁定了寄存器,就无法在上电之前将其解锁

由于BIOS / UEFI排在第一位,因此它可以通过清除适当的位并在任何OS可以阻止它之前锁定寄存器来禁用虚拟化。当以这种方式禁用虚拟化功能时,CPU报告它缺少可选的指令扩展名(如果使用了扩展名,则实际上是错误),因此软件无法使用硬件虚拟化。


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

OHH就是这样运作的!我在Google上搜索了一下,找到了您的答案(这是我感兴趣的个人概念)
Paul Stelian,2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.