仮想86モード

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

仮想86モード(かそうはちろくモード)は、IA-32プロテクトモードの特殊なもので、16ビットx868086)のほぼ完全な仮想化の提供をハードウェア的に支援するものであることが特徴である。

概要[編集]

仮想86モードの実行環境はプロテクトモードで動作する仮想86モニタおよび、仮想86モードで動作する仮想86タスクの2つで構成される。

仮想86タスクにおいては、セグメントレジスタを使ったアドレスが単純な16ビットシフトしたアドレスのベースに加算されたり、普通の演算命令、ジャンプ命令等はプレフィックスが無い限り16ビットに解釈されるなど、8086およびリアルモードに似た動作をする。ただし、仮想86モードは特権レベルが3に固定されているので、CPUの実行モードを制御する命令やソフトウエア割り込み命令、入出力命令、フラグレジスタへのアクセスなどのシステムの動作に関わる命令は制限がかかる。

制限のかかった命令はCPUの実行モードを制御する命令等に関しては全てトラップされ、仮想86モニタによって処理される。このうち、入出力命令は、仮想86タスクの制御構造体にある、許可ビットマップによって、ポートごとに直接ハードウエアにアクセスするか、トラップを起こして仮想86モニタに制御を移すかを選択できる。また、これに加えて、Pentium以降に実装された仮想モード拡張 (VME)を使うと、ソフトウエア割り込み命令をタスク内で処理するかどうかを割り込みの種類ごとに設定することや、フラグレジスタへのアクセスをトラップを起こすこと無く仮想化し、割り込み禁止区間のエミュレーションができるなど、仮想86モードの実行の効率化ができるようになっている。

使用例[編集]

通常想定されるような、Windows(あるいはPC-UNIX等)でMS-DOSアプリを動かす(仮想DOSマシン)というような用途のほか、x86の制限を緩和する目的では各種トリックが必要であったため、他にも多くの利用があった。

MS-DOSデバイスドライバとして、仮想86モニタを含み、ページングを行うことによってEMSのインターフェイスを実装する仮想86EMSと呼ばれるものでは、実アドレスにはBIOS ROMなどが存在する640K〜1Mの領域を仮想化するために使われている。また、DOSエクステンダでは、プロテクトモードでプログラム本体は動作しつつ、DOSのシステムコールやBIOSのコードはリアルモード相当で動作させる必要があるために、このモードを使っている。

x64(Intel 64やAMD64)の64ビットモード(ロングモード)の下では、このモードは使用できない。そのため、エミュレーションなど、新たな対応が必要になっている。

具体例[編集]