DPMI (DOS Protected Mode Interface) とは
DPMI(DOS
プロテクトモードインターフェース)は、
マルチタスクOS(または擬似
マルチタスクOS)環境下の仮想DOSマシン上で、
プロテクトモードアプリケーション(主にDOSエクステンダ)を実行するための規格です。
概要
DPMIは、
MS-DOSの次世代OSとなる
マルチタスクOS環境において、メモリ保護などのシステム保護を施した上で、
プロテクトモードアプリケーションの実行環境を提供します。
マルチタスクOSでは、複数のアプリケーションを同時にメモリに読み込むことができますが、そのためにはメモリ領域の衝突を防ぐ必要があります。また、バグや悪意のあるアプリケーションが、他のアプリケーションのメモリ領域やシステムリソースを破壊しないよう、OSレベルでの保護が不可欠です。
DPMIは、システム保護を実現するために、
プロテクトモードアプリケーションを特権レベル1~3で実行させます。DPMIアプリケーションは特権命令を直接利用できないため、DPMIサーバーがすべての
プロテクトモードに関する管理を行います。そのため、VCPIと比較して多くのファンクションコールを提供し、結果としてDPMI環境はVCPIよりも重くなりました。しかし、DPMIサーバーが重くなった一方で、DPMI専用クライアントは従来のDOSエクステンダよりも大幅に軽量化されるというメリットがありました。
DPMIはVCPIを拡張した規格であるという誤解がありますが、実際には互換性はなく、独立した規格です。VCPI(Virtual Control Program Interface)は、i386の
仮想86モードを利用するため、386以上のCPU(
IA-32)が必須ですが、DPMIは一部機能を除き、80286でも動作する規格です。
DPMIの問題点
DPMIの最大の問題点は、登場時期が遅すぎたことです。DPMI 0.9の最初の実装はWindows 3.0でした。WindowsはGUIだけでなく、プロテクトメモリへのアクセスもアプリケーションに提供しました。これにより、
MS-DOSのメモリ不足を解消する手段として、Windowsアプリケーションが選択肢に加わりました。そのため、ユーザーインターフェースを持つ新しいアプリケーションを開発する場合、DPMIアプリケーションとして開発するよりも、将来性を考えてWindowsアプリケーションとして開発する方が望ましい時代になっていました。
ただし、既存のDOSエクステンダや
プロテクトモードアプリケーションをDPMIに対応させることは、製品寿命を延ばす上で価値がありました。また、
コンパイラやリンカーなどファイルしかアクセスしないアプリケーションを新規に開発することにも意味がありました。
さらに、最初に公開された仕様がバージョン0.9であったことも問題でした。DPMIの最初の仕様が1.0ではなく0.9だったのは、機能が不足していたためです。事実、DPMI 0.9公開後、多くのDOSエクステンダベンダーは、自社のDOSエクステンダをDPMI 0.9に対応させましたが、DPMI 0.9の機能不足を補うために、
仮想デバイスドライバ(VxD)を同時に開発するところが少なくありませんでした。例えば、Phar Lap社の386|DOS-Extenderは、バージョン4.0からDPMIをサポートするようになりましたが、386|DOS-ExtenderをWindowsで動作させる際に発生する問題に対処するために、VxDドライバ「PHARLAP.386」が開発されました。
関連項目
MS-DOS
Microsoft Windows
DOSエクステンダ
VCPI (Virtual Control Program Interface)
EMS (Expanded Memory Specification)
XMS (Extended Memory Specification)
プロテクトモード
参考文献
『
MS-DOSメモリ管理ソフト技法-メモリ常駐ソフト&拡張メモリ活用プログラミング』(CQ出版、1990年), ISBN 978-4-7898-3484-1
「インターフェース 1990年9月号」(CQ出版)
「インターフェース 1993年10月号」(CQ出版)
* Duncan, Ray (1992). Extending-DOS:A Programmer's Guide to Protected-Mode DOS (Addison-Wesley), ISBN 0-201-56798-9