仮想86モード

仮想86モード（かそうはちろくモード）は、IA-32アーキテクチャのプロテクトモードにおける特殊な動作モードで、16ビットx86（8086）の仮想化をハードウェア的にサポートすることが特徴である。このモードにより、プロテクトモード上で古いリアルモードのアプリケーションを実行できるようになる。

 概要 
仮想86モードの実行環境は、プロテクトモードで動作する仮想86モニタと、仮想86モードで動作する仮想86タスクという2つの要素から成り立っている。

仮想86タスクでは、セグメントレジスタによるアドレス計算が8086と同様に行われる。例えば、セグメント:オフセット方式でアドレスが計算され、命令の多くは16ビットとして解釈される。ただし、仮想86モードでは特権レベルが3に固定されているため、CPU制御命令やソフトウェア割り込み命令、入出力命令、フラグレジスタへのアクセスなどのシステム関連の命令には制限がかかる。

制限がかかった命令は基本的にトラップされ、仮想86モニタで処理される。入出力命令に関しては、仮想86タスクのタスクステートセグメントにある許可ビットマップによって、各ポートに対するアクセスを直接許可するか、トラップを発生させ仮想86モニタに処理を移すかを選択できる。また、Pentium以降のプロセッサでは仮想モード拡張 (VME) により、ソフトウェア割り込みの処理をタスク内で行うかどうかを割り込みの種類ごとに制御したり、フラグレジスタへのアクセスをトラップさせずに行うことで、効率的に仮想86モードを実行できるようになっている。

 使用例 
仮想86モードは、通常のプロテクトモード環境で古いリアルモードのアプリケーションを動かすために使用される。代表的な使用例として、Windows環境でDOSアプリケーションを実行する仮想DOSマシン (VDM) がある。また、32ビットのオペレーティングシステム (OS) 上でグラフィックカードのROMにアクセスして初期化する際にも仮想86モードが活用される。

他にも、DOSのデバイスドライバとして、仮想86モニタを含みページングを行うことでEMSを提供する仮想86EMSでは、実アドレス空間の一部を仮想化することができる。さらに、DOSエクステンダではプロテクトモードでアプリケーションが動作しつつ、システムコールやBIOS呼び出しをリアルモード相当で処理するために、このモードを利用している。

ただし、x64（Intel 64やAMD64）の64ビットモード（）では仮想86モードは使用できないため、仮想化やエミュレーションなどの別の技術が必要となっている。

 具体例 
 DOSエクステンダ
 Windows/386以降のDOS互換環境
 OS/2 2.0以降のDOS互換環境 (MVDM)

 脚注 

Category:x86アーキテクチャ
Category:仮想化
Category:プログラミング言語の実装