Como o BIOS pode bloquear a virtualização?

26

Estou começando a trabalhar com o Docker e depois de algumas horas tentando fazer isso funcionar, descobri que meu BIOS estava bloqueando e que eu precisava ajustar as configurações do BIOS. Foi-me dito que o BIOS está de alguma forma relacionado com a placa-mãe.

Como o BIOS pode bloquear esse tipo de processo, anulando o sistema operacional?

    
por Alvaro Joao 20.02.2016 / 01:07

2 respostas

37

Não é que a CPU esteja bloqueando um programa; ele não tem um conceito de aplicativos no nível mais baixo. O problema é que o Docker em sistemas operacionais não Linux pode exigir virtualização de hardware. Você não especificou o seu sistema operacional, mas eu fiz um pouco de espionagem e descobri que você provavelmente usa o Windows.

A virtualização de hardware é um recurso de CPU que, como você pode imaginar a partir do nome, permite que a CPU ajude com a virtualização. Em muitas máquinas, você precisa ativá-lo no BIOS. Isto é, em parte, para evitar problemas de segurança . Basicamente, você não pode iniciar um programa porque ele tentou usar um recurso que estava efetivamente ausente, em vez de bloqueado ativamente.

    
por 20.02.2016 / 01:19
41

A resposta do Ben N é claramente a mais útil e clara.

Para aqueles que ainda se perguntam, no entanto, aqui está a história completa.

A virtualização é obtida com assistência de hardware da CPU. Como um sistema operacional virtualizado interferiria no sistema operacional host, pois eles competem pelos mesmos recursos, é necessário um mecanismo para impedir que o convidado tenha acesso descontrolado ao hardware. Isso pode ser baixo com software, lento, técnicas ou com assistência da CPU.

A virtualização assistida por hardware é implementada com instruções específicas, opcionais , você pode ler sobre isso nos capítulos 23, 24, 25, 26, 27 e 28 de Manual Intel 3B Parte 3 . O software deve primeiro verificar se há suporte para essas instruções, antes de tentar usá-las.

Por motivo de segurança, a CPU tem um registrador especial, é um MSR , chamado IA32_FEATURE_CONTROL que impede que o recurso de bits seja ativado ou desativado. Citando

Bit 0 is the lock bit. If this bit is clear, VMXON causes a general-protection exception. If the lock bit is set, WRMSR to this MSR causes a general-protection exception; the MSR cannot be modified until a power-up reset condition. System BIOS can use this bit to provide a setup option for BIOS to disable support for VMX. To enable VMX support in a platform, BIOS must set bit 1, bit 2, or both (see below), as well as the lock bit.

O ponto fundamental é que uma vez que o registrador esteja bloqueado, ele não pode ser desbloqueado até um power-up .

Como o BIOS / UEFI vem em primeiro lugar, ele tem o poder de desabilitar a virtualização limpando os bits apropriados e bloqueando o registro antes que qualquer SO possa impedir isso. Quando o recurso de virtualização é desativado dessa maneira, a CPU informa que está faltando a extensão de instrução opcional (e, na verdade, falha se for usada) e, portanto, o software não pode usar a virtualização de hardware.

    
por 20.02.2016 / 17:37