仮想86モード
読み:かそう-はちろくモード
i386以降のIA-32における動作モードの一つ。
概要
プロテクトモードの一種で、その保護機能のもとで仮想環境を提供する。
リアルモードのように、セグメント:オフセットによるアドレッシングを提供したり、機械語の解釈でもプリフィックスがない場合はIA-16と同様に16ビットとして解釈するなどの動作をする。
これによって、32ビットのプロセッサーとそのネイティブな環境でありながら、旧来の16ビットアプリケーションをほぼそのまま動作させることができる。
特徴
機構
仮想86モードは、実行タスクである「仮想86タスク」と、その動作を監視する「仮想86モニター」から構成されている。
実際に動作させるアプリケーションである仮想86タスクは特権レベル3(ring 3)で動作する。
このためCPUの動作に影響を及ぼす命令は全て制限がかかっており、16ビットでは普通だった、I/Oへのアクセス、割り込み制御、フラグレジスターの参照/更新などは、全てトラップされ、仮想86モニターで処理される。
VME
Pentium以降では仮想86モード拡張機能VMEが搭載されており、トラップするかタスク内でそのまま処理するかを設定できるようになり、より動作が効率的になった。
VME機能の有無は、EAXレジスターに1を代入してCPUID命令を実行し、EDXレジスターに得られたフラグのビット1が1かどうかで確認できる。
用途
この動作モードは、32ビットOSからMS-DOSをエミュレートするために存在するといっても過言ではない。
最初にこの動作モードに本格的に対応したのは、1987(昭和62)年に登場したWindows/386で、ここでの仮想86モードの利用目的は、複数のDOS窓をWindows上で利用することだった。
x64
x64(AMD64 ISA/Intel 64)では、仮想86モードの機能はレガシーであるとして削除された。
このためWin32には16ビットアプリ実行環境WOW32が搭載されたが、Win64でのWOW64では16ビットアプリ実行環境の実装がされなかった。
再検索