仮想DOSマシン

仮想DOSマシン(Virtual DOS Machine:VDM)とは、マイクロソフトWindows等に実装されたIA-32仮想86モードを利用したMS-DOSシステムコールが動作し、いくつかの周辺機器を仮想化した仮想機械アーキテクチャである。

非NT系での仮想DOSマシン[編集]

非NT系のWindowsでは、いわゆる「DOSプロンプト」で見た目にはCOMMAND.COMが起動されるが実際にはそれはシェルであり、その中身がこの環境である(こちらでは、シェル毎に仮想マシンが作られている)。Windows 3.xWindows 95等では、オペレーティングシステムそのものに16ビットコードが残っており、ある機械で動いているWindowsのネイティブアプリケーションは全て、一つの仮想DOSマシンで動作していた。仮想マシンを実装する仮想マシンマネージャ(VMM)は、Windows3.xではWIN386.EXEでWindows 9x系ではVMM386.VXDである。この仮想DOSマシンに対して仮想的なデバイスを提供するのが、仮想デバイスドライバである。仮想DOSマシンにおいては、DOS自体も仮想化しており、多くの部分は調停の上DOSのシステムコールまたはデバイスへのリクエストに変換するが、一部のDOSのシステムコールは直接仮想デバイスドライバが取り扱う。代表的な例がWindows 95からサポートされたファイルシステムVFATである。

NT系での仮想DOSマシン[編集]

Windows NT系のOSに於いては、カーネルとユーザランドにおいて32ビット化されており、MS-DOSのシステムコールを使わない構成になっている。この上で、DOSアプリケーションを動作させる場合や16ビットWindowsアプリケーションを実行する場合、NTVDMと呼ばれるアプリケーションが起動し、そのプロセス内に仮想空間が作られ16ビットアプリケーションが実行される。DOSアプリケーションの場合は一つ一つ別のNTVDMが作られるが、Windowsアプリケーションの場合は、互換性のために、基本的には一つのNTVDM上で複数動作する。また安定性を重視するために別のNTVDMで動作させることも可能になった。いずれにせよ、Windows 95等との互換性は多少損なわれることになった。

NTVDMはINT 21h/AH=30(Get DOS VERSION)では5.00を返す[1]

なお、64ビットのWindowsが動くCPU及びそのモードでは仮想86モードが使えないため、64ビット版WindowsにはNTVDMは存在しない。

OS/2での仮想DOSマシン[編集]

OS/2バージョン1.xでは、DOSアプリケーションはリアルモードで動作し、同時に1つのDOSアプリケーションしか動作しない。正確には仮想DOSマシンではない。OS/2 1.xのDOS BOXはINT 21h/AH=30(Get DOS VERSION)では10.xを返す[1]

OS/2バージョン2.0以降では、仮想DOSマシンは仮想86モードを使用し、同時に複数のDOSアプリケーションを動作させることができる。MVDM(マルチ仮想DOSマシン)と呼ばれた。OS/2 1.xからDOS互換性が大幅に向上したため、IBMは、MVDMのことを"A Better DOS Than DOS"と呼んでいた。 OS/2 2.xのMVDMはINT 21h/AH=30(Get DOS VERSION)では20.xを返す[1]

脚注[編集]

出典

  1. ^ a b c GET DOS VERSION

関連項目[編集]