仮想86モード:レガシーアプリケーションとの橋渡し
仮想86モードは、32ビットIA-32アーキテクチャの
プロテクトモードにおいて、16ビットx86(8086)アプリケーションを動作させるための特殊な実行環境です。
ハードウェアレベルで16ビットアプリケーションの
仮想化をサポートすることで、現代の保護された環境においても、古いDOSアプリケーションなどを実行可能にしています。
実行環境
仮想86モードは、大きく分けて2つの要素から構成されます。一つは
プロテクトモードで動作する
仮想86モニタ、もう一つは仮想86モードで動作する
仮想86タスクです。仮想86タスクは、16ビットx86アプリケーションが動作する空間であり、セグメントレジスタを用いたアドレス計算や16ビット命令の実行など、8086とほぼ同様の動作を行います。
しかし、セキュリティ上の観点から、仮想86タスクの特権レベルは常に3に固定されています。そのため、
CPU制御、
ソフトウェア割り込み、
入出力、フラグレジスタへの直接アクセスといったシステムレベルの命令は制限され、これらの命令を実行しようとするとトラップが発生し、仮想86モニタによって処理されます。
入出力命令に関しては、仮想86タスクのタスクステートセグメントにある許可ビットマップによって、各ポートへのアクセスを直接許可するか、トラップを発生させて仮想86モニタに処理を委譲するかを選択できます。また、Pentium以降の
CPUでは仮想モード拡張(VME)によって、
ソフトウェア割り込みの処理をタスク内で行うかどうかの制御や、フラグレジスタへの直接アクセスが可能になり、効率的な仮想86モードの実行を可能にしています。
使用例
仮想86モードの主要な用途は、現代の保護モード環境でレガシーな16ビットアプリケーションを実行することです。代表的な例として、Windowsにおける
MS-DOSアプリケーション実行環境である仮想DOSマシン(VDM)が挙げられます。これは、Windows上でDOSアプリケーションをシームレスに動作させるために広く利用されています。
他にも、グラフィックカードの初期化処理において、ROMへのアクセスに仮想86モードが用いられるケースがあります。また、仮想86モニタとページング機構を組み合わせた仮想86EMSでは、実アドレス空間の一部を
仮想化してEMS(拡張メモリ仕様)を提供する
デバイスドライバとして機能します。さらに、DOSエクステンダは、
プロテクトモードアプリケーションが動作する環境において、システムコールやBIOS呼び出しをリアルモード相当で処理するために、仮想86モードを活用しています。
ただし、64ビットモード(ロングモード)のx64アーキテクチャでは仮想86モードはサポートされていません。そのため、64ビット環境で16ビットアプリケーションを実行するには、
仮想化技術やエミュレーション技術を用いる必要があります。
具体的な例
仮想86モードは、以下のようなシステムや環境で活用されています。
DOSエクステンダ
Windows/386以降のDOS互換環境
* OS/2 2.0以降のDOS互換環境 (MVDM)
これらの例からも分かるように、仮想86モードは、異なるアーキテクチャや世代の
ソフトウェア間の互換性を確保するための重要な技術であり、現代のコンピューティング環境においてもその役割は依然として重要です。特に、レガシーシステムの資産を有効活用する上で、仮想86モードは欠かせない存在となっています。