web-dev-qa-db-ja.com

BIOSは仮想化をどのようにブロックできますか?

私はDockerを使い始めましたが、数時間動作させようとしたところ、BIOSがブロックしていて、BIOS設定を調整する必要があることがわかりました。 BIOSはマザーボードに何らかの関係があると言われました。

BIOSはこの種のプロセスをどのようにブロックし、オペレーティングシステムを無効にすることができますか?

26
Alvaro Joao

CPUがプログラムをブロックしているわけではありません。これほど低いレベルのアプリの概念はありません。問題は、Docker Linux以外のオペレーティングシステム でハードウェア仮想化が必要になる可能性があることです。あなたはあなたのOSを指定していませんが、私はほんの少しスヌーピングを行い、おそらくあなたがWindowsを使用していることを発見しました。

ハードウェア仮想化は、名前から推測できるように、CPUが仮想化を支援できるようにするCPU機能です。多くのマシンでは、BIOSで有効にする必要があります。これは、部分的には セキュリティの問題を防止する を行うためです。基本的に、プログラムがアクティブにブロックされるのではなく、事実上存在しない機能を使用しようとしたため、プログラムを開始できませんでした。

37
Ben N

ベンNの答えは明らかに最も有用で明確な答えです

まだ不思議に思う人のために、しかし、ここに完全な物語があります。


仮想化は、CPUからのハードウェア支援によって実現されます。仮想化されたOSはホストのOSと干渉するため、同じリソースを求めて競合するため、ゲストによるハードウェアへの制御されていないアクセスを防止するメカニズムが必要です。これは、ソフトウェア、スロー、テクニック、またはCPUの支援によってダウンする可能性があります。

ハードウェア支援の仮想化は、特定のオプション命令で実装されます。これについては、第23章、第24章、第25章、第26章、第27章、第28章で説明されています。 インテルマニュアル3Bパート 。ソフトウェアは、これらの命令を使用する前に、サポートされているかどうかを最初に確認する必要があります。

セキュリティ上の理由から、CPUには特別なレジスタがあり、それは[〜#〜] msr [〜#〜]と呼ばれ、IA32_FEATURE_CONTROLと呼ばれ、機能を有効にするように指示するビットを保持しますまたは無効にします。
引用

ビット0はロックビットです。このビットがクリアされている場合、VMXONは一般保護例外を発生させます。ロックビットが設定されている場合、このMSRへのWRMSRにより一般保護例外が発生します。 MSRは、パワーアップリセット条件まで変更できません。システムBIOSはこのビットを使用して、VMXのサポートを無効にするBIOSのセットアップオプションを提供できます。プラットフォームでVMXサポートを有効にするには、BIOSでビット1、ビット2、またはその両方(下記を参照)とロックビットを設定する必要があります。

基本的なポイントは、レジスタがロックされると、パワーアップまでロックを解除できません。

BIOS/UEFIが最初に来るので、OSがそれを防ぐ前に、適切なビットをクリアしてレジスターをロックすることにより、仮想化を無効にすることができます。この方法で仮想化機能を無効にすると、CPUはオプションの命令拡張が欠落していることを報告し(実際にそれらが使用されている場合は障害)、ソフトウェアはハードウェア仮想化を使用できません。

42
Margaret Bloom