仮想86モード
仮想86モード(かそうはちろくモード)とはi386以降のCPUの命令セットアーキテクチャ (IA-32)の動作モードの一つである。
特徴はプロテクトモードのタスク保護の管理下で8086のコードを実行することによってその仮想機械の実装をハードウエア的に支援することである。
概要
仮想86モードの実行環境はプロテクトモードで動作する仮想86モニタおよび、仮想86モードで動作する仮想86タスクの二つで構成される。仮想86タスクにおいては、セグメントレジスタを使ったアドレスが単純な16ビットシフトしたアドレスのベースに加算されたり、普通の演算命令、ジャンプ命令等はプレフィックス無しで16ビットに解釈されるなど8086に似た動作をするが、仮想86モードは特権レベルが3に固定されているので、CPUの実行モードを制御する命令やソフトウエア割り込み命令、入出力命令、フラグレジスタへのアクセス等のシステムの動作にかかわる命令は制限がかかる。制限のかかった命令はCPUの実行モードを制御する命令等に関しては全てトラップされ、仮想86モニタによって処理される事になるが、入出力命令は仮想86タスクの制御構造体にある、許可ビットマップによってポートごとに直接ハードウエアにアクセスするか、トラップを起こして仮想86モニタに制御を移すかを選択する事が出来る。また、Pentium以降に実装された仮想モード拡張 (VME)を使うと、これに加えてソフトウエア割り込み命令をタスク内で処理するかどうかを割り込みの種類ごとに設定する事やフラグレジスタアクセスをトラップを起こすこと無く仮想化し、割り込み禁止区間のエミュレーションをすることが出来るなど、仮想86モードの実行を効率化する事が出来るようになっている。
使用状況
このモードは、非常に良く使われ、MS-DOSのデバイスドライバとして、仮想86モニタを含み、ページングを行う事によってEMSのインターフェイスを実装する仮想86EMSと呼ばれるものや、DOSエクステンダと呼ばれるプロテクトモードでDOSのシステムコールを用いたプログラムを動かすためのプログラム等において使われた。また、32ビットで動作するOSでDOSのプログラムを呼び出したり(仮想DOSマシン)、BIOSを呼び出す時に用いられている。しかしながら、後継アーキテクチャであるAMD64やIA-64に於いてはネイティブモードに移行するとこのモードには移行できないので、ブート後のBIOS呼び出し等には8086エミュレータを搭載するなどの対応が必要となって来ている。
仮想86モードの使用例
その他
CPUによる仮想化対応はIBM System/370が最初であり、インテルによるi386への仮想86モードの採用は、当時インテルに資本提携したIBMによる提案とも言われている。