¿Cómo puede el BIOS bloquear la virtualización?

26

Estoy empezando a trabajar con Docker y después de algunas horas de intentar hacerlo funcionar, descubrí que mi BIOS lo estaba bloqueando y que necesitaba ajustar la configuración del BIOS. Me dijeron que el BIOS está relacionado de alguna manera con la placa base.

¿Cómo puede el BIOS bloquear este tipo de proceso, anulando el sistema operativo?

Alvaro Joao
fuente
14
Lo tienes al revés. La configuración del BIOS para la virtualización le dice a la CPU que permita un tipo específico de procesamiento. Si las extensiones de virtualización no están habilitadas en BIOS, la CPU no podrá ejecutar el programa. La situación es muy similar a intentar ejecutar un programa compilado para una arquitectura de procesador DEC Alpha en un sistema x64. sin las extensiones, el programa intentará ejecutar instrucciones que la CPU no comprende. Su Docker se está bloqueando de ejecutarse porque ha detectado que su CPU tal como está configurada actualmente no puede ejecutarla.
Frank Thomas

Respuestas:

37

No es que la CPU esté bloqueando un programa; no tiene un concepto de aplicaciones a ese nivel bajo. El problema es que Docker en sistemas operativos que no son Linux puede requerir virtualización de hardware. No ha especificado su sistema operativo, pero hice un poco de espionaje y descubrí que probablemente usa Windows.

La virtualización de hardware es una característica de la CPU que, como se puede adivinar por el nombre, permite que la CPU ayude con la virtualización. En muchas máquinas, debe habilitarlo en el BIOS. Esto es, en parte, para evitar problemas de seguridad . Básicamente, no pudo iniciar un programa porque intentó usar una función que estaba efectivamente ausente en lugar de bloqueada activamente.

Ben N
fuente
14
a tiny bit of snoopingJa..ha
bs677
Sí, estoy usando un Windows 7! ¡¡¡gracias por la explicación!!! ¡Ahora lo entiendo!
Alvaro Joao
Estoy familiarizado con esta configuración pero aún no estoy claro, ¿qué es exactamente la virtualización de hardware (en el contexto de la configuración del BIOS)?
Celeritas
2
La virtualización de hardware de @Celeritas es un conjunto de características proporcionadas por la CPU y el BIOS que hacen que la ejecución de máquinas virtuales sea más eficiente, como la gestión transparente de los accesos de memoria realizados por la VM de una manera más eficiente que la que se puede hacer a nivel de software puro, y manejo / captura de instrucciones "privilegiadas" tales como operaciones de E / S para que el software de virtualización las maneje de manera más eficiente.
Restablece a Mónica - ζ--
2
@ RACING121 La N significa NSA :)
Ben N
41

La respuesta de Ben N es claramente la más útil y clara.

Para aquellos que aún se preguntan, aquí está la historia completa.


La virtualización se logra con asistencia de hardware desde la CPU. Dado que un sistema operativo virtualizado interferiría con el host, ya que compiten por los mismos recursos, se necesita un mecanismo para evitar que el invitado tenga acceso incontrolado al hardware. Esto puede reducirse con software, lento, técnicas o con asistencia de la CPU.

La virtualización asistida por hardware se implementa con instrucciones específicas opcionales , puede leer sobre ella en los Capítulos 23, 24, 25, 26, 27 y 28 del Manual Intel 3B Parte 3 . El software primero debe verificar que estas instrucciones sean compatibles, antes de intentar usarlas.

Por razones de seguridad, la CPU tiene un registro especial, es un MSR , llamado IA32_FEATURE_CONTROL que contiene bits que dicen con la función para habilitar o deshabilitar.
Citando

El bit 0 es el bit de bloqueo. Si este bit es claro, VMXON provoca una excepción de protección general. Si se establece el bit de bloqueo, WRMSR a este MSR provoca una excepción de protección general; el MSR no puede modificarse hasta una condición de reinicio de encendido . El BIOS del sistema puede usar este bit para proporcionar una opción de configuración para que el BIOS desactive la compatibilidad con VMX. Para habilitar el soporte de VMX en una plataforma, el BIOS debe establecer el bit 1, el bit 2 o ambos (ver más abajo), así como el bit de bloqueo.

El punto fundamental es que una vez que el registro está bloqueado, no se puede desbloquear hasta que se enciende .

Dado que BIOS / UEFI es lo primero, tiene el poder de deshabilitar la virtualización al borrar los bits apropiados y bloquear el registro antes de que cualquier sistema operativo pueda evitarlo. Cuando la función de virtualización se deshabilita de esta manera, la CPU informa que falta la extensión de instrucción opcional (y en realidad falla si se usan) y, por lo tanto, el software no puede usar la virtualización de hardware.

Margaret Bloom
fuente
2
Ese es un muy buen complemento para la pregunta. La mayoría de las personas no tienen idea de que la configuración requiere un reinicio para cambiar, por lo que no se puede habilitar "sobre la marcha" mientras se ejecuta el sistema operativo.
Tonny
OHH, así es como funciona! Lo busqué en Google y encontré su respuesta (que es lo que me interesa, por mis conceptos personales)
Paul Stelian