| DOS 保護モード インターフェース | |
|---|---|
| 略語 | DPMI |
| ステータス | 発行済み |
| 開始年 | 1989 (1989年) |
| 組織 | DPMI委員会 |
| ドメイン | アプリケーション・プログラミング・インターフェース |
コンピューティングにおいて、DOS プロテクトモードインターフェース(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 ] Windows 3.0の 386 拡張モード用の DPMI のプロトタイプ バージョンに基づいていましたが、この実装のいくつかの機能は公式仕様から削除されました。これには、元の草案で Ralph Lipe によって提案されたMS-DOS 拡張機能[ 5 ]または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仕様の欠点を克服するための唯一の取り組みではありませんでした。マイクロソフトがWindows 3.0用にDPMIを開発したのと同時に、インテルのソフトウェアフォーカスグループ、[ 8 ] [ 1 ]ロータス、[ 8 ]デジタルリサーチ、インタラクティブシステムなどを含む別の業界団体が、386のメモリ管理とマルチタスク機能を拡張DOSアプリケーションで利用できるように、 Extended VCPI(XVCPI )という仕様を開発しました。[ 8 ] [ 1 ] [ 9 ] マイクロソフトの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」)[注 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を使用していました。これはDOS/4GのサブセットとしてRational Systemsによって開発され、 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 )と呼ばれる第二世代仕様の開発に取り組んでいました。数ヶ月の間、新興のDOS エクステンダー市場は互いに排他的な二つの方向に分裂するように見えました […] 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委員会のメンバーに配布されましたか?[…] [デイブ・コール:] これは絶対に文書化すべきではありません。[…]
最初の DPMI プロトタイプは、Windows カーネルを拡張メモリで実行できるようにすることで Windows のパフォーマンスを向上させる一般的な取り組みの一環として、Lotus Corporation と Rational Systems からの情報提供を受けて、Microsoft によって Windows バージョン 3.0 用に開発されました。並行して、Intel は、マルチタスク環境、EMS エミュレータ、および DOS エクステンダのメーカーと協力し、拡張 VCPI 仕様で 80386 の仮想化および保護機能をフルに活用できるように取り組んでいました。 1990年2月、上記の活動に携わる関係者はDPMI委員会を設立し、プロテクトモードDOSアプリケーションのための業界標準を策定することに合意しました。委員会は1990年5月に最初の公開DPMI仕様バージョン0.9をリリースしました。