コンピューティングにおいて、DOS Protected Mode Interface ( DPMI ) は 1989 年に導入された仕様で、DOSプログラムを保護モードで実行できるようにし、当時の新しい PC プロセッサのリアル モードでは利用できない多くの機能へのアクセスを可能にします。当初はMicrosoftがWindows 3.0用に開発しましたが、後に Microsoft は仕様の管理をオープン メンバーの業界委員会に委ねました。[ 1 ] [ 2 ]現代のほとんどすべてのDOS エクステンダーはDPMI に基づいており、DOS プログラムが PC で使用可能なすべてのメモリをアドレス指定し、保護モード (主にリング3、最小特権) で実行できるようにします。[ 3 ]
DPMI は DOS Protected Mode Interface の略です。これは、80286 シリーズ以降のプロセッサでプログラムを保護モードで実行し、これらの CPU モードを手動で設定することなくリアル モードへの呼び出しを実行できるようにするAPIです。DPMI は、特にメモリなどのさまざまなリソースを管理するための機能も提供します。これにより、DPMI 対応プログラムは マルチタスクOS で動作し、OS カーネルが複数のアプリケーション間でリソースを分配できるようになります。DPMI は、スーパーバイザ モードで実装する必要のある機能のみを提供します。これは、シングルタスクのマイクロカーネルと考えることができます。残りの機能は、リアル モードDOSおよびBIOSサービスへの呼び出しを介して DPMI 対応プログラムから利用できるため、DPMI API 自体はほとんど DOS から独立しています。DPMI API が DOS に固有のものである理由は、DOS メモリを管理するための 3 つの関数と、「DPMI」の頭文字の「D」だけです。
DPMIサービスは、16ビット、32ビット、または「ユニバーサル」のいずれかであり、DPMIカーネル、DPMIホスト、またはDPMIサーバーと呼ばれます。これは、ホストオペレーティングシステム(仮想DPMIホスト)またはDOSエクステンダー(実DPMIホスト)によって提供されます。DPMIカーネルは、 DOS/4GWやDOS/32AのようにDOSエクステンダーの一部である場合もあれば、CWSDPMIやHDPMIのように独立したものである場合もあります。
DPMI API の主な用途は、DOS エクステンダーがホスト OS に依存しない環境を提供できるようにすることです。DOS エクステンダーは DPMI カーネルの存在を確認し、インストールされていない場合にのみ独自のカーネルをインストールします。これにより、DOS 拡張プログラムは、独自の DPMI カーネルを提供するマルチタスク OS 内、またはベアメタルDOS 上で直接実行できます。ベアメタル DOS の場合は、DOS エクステンダーが独自の DPMI カーネルを使用します。Windows 3.x および 9x のユーザーモード カーネルは DOS エクステンダーを使用して構築されているため、Windows のリング 0 カーネルが提供する DPMI API に完全に依存しています。
最初の DPMI 仕様の草案は、1989 年に Microsoft のRalph Lipeによって公開されました。[ 4 ] [ 1 ]これは、386 拡張モードのWindows 3.0用の DPMI のプロトタイプ バージョンに基づいていましたが、この実装のいくつかの機能は公式仕様から削除されました。これには、 MS-DOS 拡張機能[ 5 ]または、Ralph Lipe が元の草案で提案したDOS API 変換という機能が含まれます。 [ 6 ]そのほとんどは、DOS および BIOS インターフェースの実装でした (この経緯により、4Ch などの一部の INT 21h API はすべての DPMI 実装で実装する必要があります)。DPMI バージョン 0.9 は、新しく設立されたDPMI 委員会によって 1990 年に公開されました。結果として得られた仕様のバージョン番号 0.9 は、DPMI 委員会のメンバーが合意できた標準の簡素化された性質と不完全な状態を反映するために選択されました。[ 1 ] Windows は互換性のために DPMI バージョン 0.9 を報告していますが、実際にはシステムの重要な部分であるため、他の部分も実装しています。[ 5 ] [ 1 ] DPMI のこの文書化されていない完全な性質は、業界では「真の DPMI 」として知られるようになりました。 [ 7 ] DPMI 標準は、VCPI 仕様の欠点を克服するための唯一の取り組みではありませんでした。Microsoft が Windows 3.0 用に DPMI を開発したのと同時に、Intel の Software Focus Group、[ 8 ] [ 1 ] Lotus、[ 8 ] Digital Research、Interactive Systemsなどを含む別の業界連合が、拡張 DOS アプリケーションで 386 のメモリ管理とマルチタスク機能を利用できるようにするために、Extended VCPI ( XVCPI )という仕様を開発しました。[ 8 ] [ 1 ] [ 9 ] MicrosoftのDPMI提案が多くの類似した問題に対処し、Windowsによって支持されていることが判明すると、これらの取り組みは1990年2月にサンタクララのインテルでの会議中にDPMI委員会の設立につながった。[ 8 ] [ 1 ]
1991年、DPMI委員会はDPMIをバージョン1.0に改訂し、多くの明確化と拡張を取り入れましたが、Windowsで実装されていた「真のDPMI」に必要な要素は依然として含まれていませんでした。実際、「真のDPMI」は公式のDPMI仕様の一部にはならず、WindowsもDPMI 1.0の拡張機能を実装しませんでした(そして、多くのDPMIホストも実装しませんでした)。
DPMI は拡張 DOS アプリケーション ソフトウェアを保護モードおよび拡張メモリで実行するように設計されているが、[ 10 ]常駐システム拡張機能にはあまり適していない。1992年頃にDigital Research / Novellによって開発されたDPMSという別の仕様[ 10 ]は、変更された DOS ドライバ ソフトウェアを拡張メモリに簡単に移動して保護モードで実行し、従来のメモリ フットプリントを小さなスタブにまで削減するという要件に特化している。これはHelix Cloakingでもサポートされている。
DPMIの「方法」は、DOSとIBM PCに特有のものです。他のコンピュータは16ビットから32ビットにアップグレードされ、新しい32ビットAPIと新しいメモリ管理/アドレッシング機能を備えたオペレーティングシステムのアップグレードによって高度なプログラムサポートが提供されました。たとえば、OS/2コアシステムは32ビットプログラムをサポートしており、GUIなしで実行できます。DPMIソリューションは、主要なオペレーティングシステムベンダーであるMicrosoftが32ビットWindowsの将来に対応できる、あるいは対応しようとする前に、サードパーティがDOSプロテクトモードプログラムをWindows 3.x上で安定して実行できるようにする必要性に対応するために主に必要とされたようです。さらに、Microsoftは32ビット移行の解決策を32ビットDOSではなく、まったく異なる(そして互換性のない)APIを備えた32ビットWindowsと見なしていました。
Windows 3.0 は「真の DPMI」[ 5 ]を実装し、DPMI 0.9 のサポートを報告しているが[ 11 ] 、DPMI バージョン 1.0 はMicrosoft Windowsに実装されなかったため、ほとんどのプログラムと DOS エクステンダーは主にバージョン 0.9 用にのみ作成されました。ただし、「真の DPMI」を実装しているエクステンダーはごくわずかです。
Qualitas 386MAXのベータ版では「真の DPMI」が実装されており、コマンドラインから Windows の KRNL386.EXE を実行できましたが、リリース版では無効になっていると内部メールで主張されていました。[ 5 ]しかし、DPMIONE (386MAX コードをベースに Bob Smith が開発) ではそれが可能です。現在、DPMIONEと386 MAX は、DPMI 1.0 (例えば、未コミットのメモリ) を完全にサポートする唯一の DPMI ホストであり、DPMI 1.0 の主要なサポート元でもあります。[ 12 ]
1991年から開発が続けられているDR DOS "Panther"および"StarTrek"の KRNL386.SYS (別名 "MultiMAX") [ nb 1 ]とNovell DOS 7 [ 10 ] Caldera OpenDOSおよびDR-DOS 7.02 以降のEMM386.EXEメモリマネージャは、オプションを指定してロードするとDPMI のサポートが組み込まれています。KRNL386.SYS には、 DPMI 1.0 または 0.9 のいずれかをサポートするコマンドライン オプションもありました[ 13 ] DOS API の変換は、「保護モードから割り込み 21 を呼び出す」と呼ばれていました。マルチユーザー DOS、システムマネージャ、およびREAL/32も DPMI をサポートしています。/DPMI[=ON]/VER=0.9|1.0
最も有名な独立した DPMI カーネルはおそらくCWSDPMIでしょう。これは DPMI 0.9 をサポートしていますが、文書化されていない「DOS API 変換」はありません。「TRAN」ことThomas Pytelによる PMODE と呼ばれる別のバリアントは、1990 年代のデモシーンで 32 ビット プログラマーの間で人気がありました。多くのゲームは DOS/4GW を使用していましたが、これはRational SystemsがDOS/4Gのサブセットとして開発し、 Watcom C コンパイラとともに配布されました。
HDPMI( HX DOS Extenderの一部)は、「DOS API変換」機能と、ほぼ完全なDPMI 1.0の実装を提供します。
DPMI 1.0委員会は1990年から1991年にかけて会合を開き、12のグループで構成されていた。
VCPI
の作成者はその制限をよく認識しており、
Microsoft がWindows 3.0 のベータ テスト
バージョン
と DPMIで登場したとき、
Extended VCPI
(
XVCPI
)
と呼ばれる第 2 世代の仕様にすでに懸命に取り組んでいました
。数か月間、新興の
DOS エクステンダー
市場は相互に排他的な 2 つの方向に分裂するように見えました […] Microsoft は DPMI 仕様の管理をオープン メンバーの業界委員会に委ね、XVCPI の取り組みの支持者は DPMI の背後で協力することにしました。 […] マイクロソフトは、DPMI のうち DOS エクステンダー領域に踏み込む部分、具体的には
保護モード
でのDOS および
ROM BIOS
割り込みの直接サポートを削除することに同意しました。その結果、1990 年 5 月に DPMI 委員会によってリリースされた最初の公開バージョンである DPMI バージョン 0.9 では、低レベルまたは構成要素の機能のみが定義されています […] 当然ながら、Windows 3.0 の高レベルまたは DOS エクステンダー インターフェイスはまだ存在しますが、文書化されていない機能の暗黒領域へと後退しています。文書化されてはいませんが、決して使用できないわけではありません […]
Win386
プロジェクトにチェックインされていると思います
。ルート MSDOS.DOC (ルートにあるすべての .DOC ファイルを参照) […] いいえ!これは非常にデリケートな問題です。なぜなら、基本的に
ISV
(別名
DR-DOS
と
IBM
)に標準モードの
Windowsを
実行する方法を指示するものだからです。配布する前に
BradSi[lverberg]
に確認する必要があります。[Greg Lowney:]
SoftNetは
リミッタを
作成しています
。彼らは
C7
マニュアルで、リミッタがDPMI仕様のMS-DOS拡張機能をサポートしていれば、C7 dos-extendedを実行できると読みました。そこで[…]彼らは、それらの拡張機能が正確に何であるかの仕様を入手するために私たちに連絡してきました。どうやらそれらは文書化されていないようです。[…]それらはそれほど複雑ではなく、主にアプリケーション用にマッピングするMS-DOSとBIOSコールであり、
Qualitasは
それらをリバースエンジニアリングするのに何の問題もありませんでした。 (新しい
386MAXは
ベータ版ではコマンドラインからKRNL386を実行できたが、最終製品では私たちの権利を侵害しないようにその機能を無効にしたのだと思う。もちろん、386MAXはC7をサポートしている。) […] ラルフ、仕様書はDPMI委員会のメンバーに配布されたのか? […] [デイブ・コール:] これは絶対に文書化すべきではない。 […]
拡張メモリで実行できるようにすることで Windows のパフォーマンスを向上させる一般的な取り組みの一環として、Microsoft が、Lotus Corporation および Rational Systems からのインプットを受けて、Windows バージョン 3.0 用に開発しました。並行して、Intel は、拡張 VCPI 仕様が 80386 の仮想化および保護機能を完全に利用できるようにするために、マルチタスク環境、EMS エミュレータ、および DOS エクステンダーの製造業者と協力していました。 1990年2月、上記活動に関与した関係者は、DPMI委員会を設立し、保護モードDOSアプリケーションに関する業界標準を策定することに合意した。同委員会は、1990年5月に最初の公開版DPMI仕様書であるバージョン0.9をリリースした。
{{cite journal}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク){{cite web}}: CS1メンテナンス: 非推奨のアーカイブサービス (リンク) ( PC-98プラットフォーム向け日本語版MS-DOS 5.00AのMSDPMI )