仮想8086モード
別名:仮想86モード,V86モード,V86 mode
【英】virtual 8086 mode
仮想8086モードとは、Intelのプロセッサのモードの一つで、8086用のプログラムを実行するための仮想マシンを作り出すために設けられた動作モードのことである。Intel 80386から追加された。
仮想8086モードはプロテクトモードであるが、リアルモードと同じアドレッシングを行うことで、16ビットのプログラムが実行できる。8086では、セグメントアドレスを左に4ビットシフトしたものとオフセットアドレスとを加算してリニアアドレスを決める。仮想8086モードでは、プロテクトモードでありながら、同じアドレッシングを行うが、8086にはないページテーブルを経由して、物理アドレスに変換される。
仮想8086モードは、プロテクトモードの一種であるため、特権命令を使うと一般保護違反を引き起こすなど、オペレーティングシステムとの協調も前提としている。仮想8086モードでは、同じシステム上で複数のMS-DOSを並行に実行させることが可能であり、仮想8086モードを最大限に活用しているのがMicrosoft Windowsであるといえる。
Intel: | Intel Quark IA-32 Intel Core i7 vPro 仮想8086モード ミニカートリッジ Northwood Nehalem |
仮想86モード
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/12/29 07:26 UTC 版)
![]() | この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。(2020年10月) |
仮想86モード(かそうはちろくモード)は、IA-32アーキテクチャのプロテクトモードにおける特殊な動作モードで、16ビットx86(8086)の仮想化をハードウェア的にサポートすることが特徴である。このモードにより、プロテクトモード上で古いリアルモードのアプリケーションを実行できるようになる。
概要
仮想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]、仮想化やエミュレーションなどの別の技術が必要となっている。
具体例
- DOSエクステンダ
- Windows/386以降のDOS互換環境
- OS/2 2.0以降のDOS互換環境 (MVDM)
脚注
- ^ “インテル® エクステンデッド・メモリ64 テクノロジ・ソフトウェア・デベロッパーズ・ガイド第 1 巻(全 2 巻)リビジョン 1.1”. インテル. p. 1-3. 2024年9月14日閲覧。 “従来の保護モードの以下の機能は、互換モードではサポートされない。• 仮想 8086 モード、タスクスイッチ、スタック・パラメータのコピー機能”
仮想86モード
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/10/24 06:19 UTC 版)
詳細は「仮想86モード」を参照 386のプロテクトモードでは、インテルが仮想8086モード (virtual 8086 mode) と呼ぶものを提供している。仮想86モードは8086向けのコードを修正することなく、プロテクトモードのOS上のタスクの1つとして安全に動作させることができる。ただし完全な後方互換性があるわけではない。セグメント操作や特権命令、ハードウェアへの直接アクセス、自己書き換えコードなどを使っているプログラムの場合、例外が発生するのでOSがそれに対処しなければならない。さらに仮想86モードで動作するアプリケーションが入出力 (I/O) 関連命令を使用するとトラップ処理が行われるので、性能が低下する。そういった制約があるため、8086上のプログラムの一部は仮想86モードでは動作できない。結果としてシステムソフトウェアは、古いソフトウェアを扱う際にセキュリティか互換性のいずれかを犠牲にすることになった。例えば Windows NT では互換性を犠牲にし、行儀の悪いDOSアプリケーションをサポートしなくなった。
※この「仮想86モード」の解説は、「プロテクトモード」の解説の一部です。
「仮想86モード」を含む「プロテクトモード」の記事については、「プロテクトモード」の概要を参照ください。
- 仮想86モードのページへのリンク