仮想86モード

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

概要

[編集]

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

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

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

使用例

[編集]

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

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

ただし、x64(Intel 64やAMD64)の64ビットモード(ロングモード英語版)では仮想86モードは使用できないため[1]仮想化エミュレーションなどの別の技術が必要となっている。

具体例

[編集]

脚注

[編集]
  1. ^ インテル® エクステンデッド・メモリ64 テクノロジ・ソフトウェア・デベロッパーズ・ガイド第 1 巻(全 2 巻)リビジョン 1.1”. インテル. p. 1-3. 2024年9月14日閲覧。 “従来の保護モードの以下の機能は、互換モードではサポートされない。• 仮想 8086 モード、タスクスイッチ、スタック・パラメータのコピー機能”