仮想86モード

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

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

概要[編集]

仮想86モードの実行環境はプロテクトモードで動作する仮想86モニタおよび、仮想86モードで動作する仮想86タスクの二つで構成される。仮想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ビットモードではこのモードが同居できないため、エミュレーションなど、新たな対応が必要になっている。

具体例[編集]