検索に移動この記事には参考文献や外部リンクの一覧が含まれていますが、脚注によって参照されておらず、情報源が不明瞭です。脚注を導入して、記事の信頼性向上にご協力ください。(2019年8月)DOSエクステンダ(ドスエクステンダ)とは、MS-DOSなどのオペレーティングシステムを拡張するためのプログラムのことであり、アプリケーションプログラムの操作・実行環境である。概要[編集]DOSエクステンダは、アプリケーションソフトウェアが、MS-DOS環境下においてx86CPUのプロテクトモードを利用するためのプログラムである。通常は、MS-DOSより起動され、DOSエクステンダ専用のアプリケーションソフトの実行を可能にする。他にも、MS-DOS用のプログラムをマルチタスクで稼働させるものや、グラフィカルユーザインタフェースを提供するものなど、DOSエクステンダと、その上で実行されるプログラムの種類に応じて、様々な機能が提供される。MS-DOS上では通常、メモリアドレスは1メガバイト以内、CPU命令も16bit用のそれしか用いることができず、例え32bitCPUであっても、実質的には高速な16bitCPUとしてのみ利用され、CPUが32bitである意味は薄かった。32bit命令/メモリアドレスに対応したDOSエクステンダを用いる事により、MS-DOSを経由して32bit環境を構築する事が可能となり、種々の制約に縛られながらも、16bit環境と比較すればアプリケーションのパフォーマンスは大幅に向上した。8086由来の制限による複雑なメモリモデルやC言語でのポインタ制御、セグメント切り替えなどの必要性が、事実上ほぼ撤廃され、これにより開発効率の向上や、更なる速度面での優位性も確保されている。このことは、従来のMS-DOS環境では、連続して扱えるメモリ領域(リニアメモリ)が64KiB、もしくは1MiBに過ぎなかったことに起因する。9x系も、技術的にはDOSから起動されプロテクトモードで稼働する、DOSエクステンダの一種、ないし、一体化しているDOSエクステンダ上で稼働するデスクトップ環境と言える。プロテクトモードで稼働するアプリケーションは、通常のEXEフォーマットのプログラムではなく、提供されるDOSエクステンダ専用にコンパイルされたプログラムでないと実行できない。DOSエクステンダごとに実行可能なプログラムの形式は異なり、たとえばRUN386でGO32用にコンパイルされたプログラムを実行することはできない。この事は、DOSエクステンダが、その有用性が認識されながらも、大きく普及が進まなかった要因の1つとなった。(RUN386)等がある。TOWNS用が存在し、機種依存のBIOS等を直接利用しない限りどの機種でも同じプログラムを実行できる。Programの略とされている)である。現在ではWindowsの普及で、DOSエクステンダはその役目を失いつつある。(PC-H98等)であった。8086はアドレス空間が1Mバイトしか無かったため、最大で16Mバイトまで使用できる80286をインテルは発表するが、16Mバイトまでメモリが使用できる16ビットプロテクトモードをサポートしたのは、当初はOS/2等のマルチタスクOSだけであった。80286や上位互換の80386は、マルチタスクOSを快適に使用するには速度不足であったし、当時のPCは複数のアプリケーションソフトウェアを同時に実行するには実装しているメモリが不足していた。そのため多くのユーザーはMS-DOSを利用しつづけたのである。MS-DOS上でメモリ容量が不足してくると、様々な方法でMS-DOSで利用可能なメモリ容量を拡張する試みがなされた。それらの内、80286で導入されたプロテクトモードを使用してアドレス空間の大きさそのものを拡張することにより、MS-DOS上でアプリケーションで利用可能なメモリ容量を拡張するソフトウェアがDOSエクステンダである。一般にDOSエクステンダはシングルタスクであったので、これらの低速なCPUでも快適に利用できたし、せいぜい数Mバイト程度しかプロテクトメモリが実装されていなかったPCにおいても、1つのアプリケーションでそれらのメモリを独占的に利用できたので十分な容量であったといえた。メモリの拡張方法としてはアドレス空間そのものを拡張するため、バンク切り換え処理とページフレームに出現しているメモリのページ管理が不要な分EMSより高速でありメモリ管理に手間がかからない方法であった。DOSエクステンダは擬似OSと呼ばれMS-DOSを拡張するものである。プロテクトメモリの管理は独自に行うもののファイルシステム等はMS-DOSに依存する。そのため同時にオープン可能なファイル数はMS-DOSと変わるところは無いなど、MS-DOSの制限をかなり受けた。DOSエクステンダは、プロテクトモードアプリケーションからは、プロテクトメモリをサポートするMS-DOSのように見え、一方MS-DOSからは、DOSアプリケーションとして振舞う。アプリケーションとOSの両方の性質をもったソフトウェアであった。DOSエクステンダの動作[編集]プロテクトモードアプリケーションがDOSエクステンダに対してファイルアクセスなどのファンクションコールを実行すると、DOSエクステンダはCPUをリアルモード(場合によっては仮想86モード)に切替えて、自身が受けたDOSエクステンダのファンクションコールをMS-DOSのファンクションコールに翻訳してMS-DOSを呼び出す。ファイルアクセスのような、大量のデータをMS-DOSとやり取りするファンクションコールのために、コンベンショナルメモリ上にリアルモードとプロテクトモード間のデータ通信用のバッファ領域が必要となることに注意しなくてはならない。MS-DOSはプロテクトメモリを直接アクセスできないからである。ファイル読み出しの場合には、MS-DOSのファンクションコールを利用して、このコンベンショナルメモリ上にある通信バッファ領域にデータを読み出した後、DOSエクステンダはCPUをプロテクトモードに切替えて、読み込んだデータを通信バッファからプロテクトメモリに転送する。この時データサイズが大きくて、一度に通信バッファに読込みきれない場合には、CPUを再びリアルモードに切替えて、残りのデータを通信バッファに読み出すように再度MS-DOSにファンクションコールを発行して、ファイルデータの残りの部分の読み出しを行う。データサイズが極めて大きい場合には、このリアルモードとプロテクトモードの交互切替えの繰返しによるファイル上のデータのプロテクトメモリへの読込を行う。このように、アプリケーションの実行中に何度もプロテクトモードとリアルモードの切替えが行われることもDOSエクステンダの特徴の一つである。DOSエクステンダ起動時のプロテクトモードアプリケーションのプロテクトメモリへの読み出しも、上記と同様のシーケンスを経て行われる。アプリケーションをプロテクトメモリに全て読み込み終えると、DOSエクステンダはCPUをプロテクトモードに切替え、アプリケーションを実行する。アプリケーションが終了すると、確保したプロテクトメモリを全て開放しCPUをリアルモードへ切替えて、DOSエクステンダはMS-DOSアプリケーションとして終了する。DOSエクステンダの機種依存部分[編集]CPUをリアルモードからプロテクトモードに切替えることはCPU単体で行えるが、DOSエクステンダというものは基本的に機種依存するソフトウェアである。一つの実行ファイルで複数の機種に対応したDOSエクステンダも存在するが、それは対応する機種分だけ機種依存コードを内部に持っているだけのことである。以下にDOSエクステンダの機種依存部分について記す。プロテクトメモリ確保[編集]DOSエクステンダは、その性質上、起動時にそのハードウェアで利用可能なプロテクトメモリを確保する必要があるが、MS-DOSは元来リアルモード用のOSであるために、直接プロテクトメモリを管理する機能を有していない。そのため、DOSエクステンダがプロテクトメモリを確保するためには、プロテクトメモリ管理用のデバイスドライバを用意する方法もあるが、基本的にはプロテクトメモリBIOSあるいはMS-DOSの拡張としてメーカーが用意した固有のファンクションコールを直接呼び出して、そのハードウェアで利用可能なプロテクトメモリを確保することになる。プロテクトメモリBIOSおよびメーカー固有のファンクションコールの仕様は、機種依存するので、DOSエクステンダが直接プロテクトメモリBIOSを呼び出すということは、DOSエクステンダが機種依存することになる。アドレスライン20(A20)制御[編集]80286や上位互換のCPUを搭載したPC/AT互換機やPC-9800シリーズでは、8086/88を搭載した旧機種との互換性を取るために、起動直後はCPU周辺の回路によって外部に出力するアドレスライン20(A20)を強制的に0にしているが、プロテクトメモリを利用するためには、このアドレスライン20をCPUから出力されるアドレスに切り換える(A20オン)制御を行わなくてはならない。A20をオンにするためのI/Oポートアドレス等は機種によって異なるので、DOSエクステンダに限らずプロテクトメモリを利用するソフトウェアは基本的に機種依存することになる。ハードウェア割り込みの処理のために割り当ててしまった。そのため、80286が開発されて例外が追加されると、CPU例外とBIOSやハードウェア割り込みの割り込みベクトルが衝突するようになった。80286以降のCPUで追加された例外は、その殆どがプロテクトモードに関連したものであった。そのため、リアルモードで処理をしている場合には、この衝突は殆ど問題にならなかったのだが、プロテクトモードでは割り込みベクトルの衝突が問題になった。そのため、プロテクトモードを利用するために、割り込みコントローラの設定を変更して、効率的にハードウェア割り込みのハンドリングを行うためにハードウェア割り込みの割り込みベクトルを変更する実装があった。この割り込みベクトルの変更処理を割り込み再配置という(BIOSもプロテクトモードで利用するためには、割り込みベクトルの再配置が必要だが、プロテクトモードからはBIOSを呼び出さないことにして衝突を回避する方法もある)。割り込みコントローラは、PC/AT互換機もPC-9800シリーズもFMRシリーズも8259を使用していたが、その接続しているI/Oアドレスが異なるために、割り込みベクトル再配置処理は機種依存する。よって、プロテクトモードを使用するために割り込み再配置処理が必要なので、DOSエクステンダは機種依存することになる。シリーズは、予め割り込みベクトルが衝突しないように割り込みコントローラやBIOSの割り込みベクトルが割り当てられているので、割り込み再配置は必要ない。割り込みの再配置は必須ではなく、あくまでも効率的にハードウェア割り込みを処理するための手段の一つである。実際には割り込みを管理する8259に対して割り込み要因の確認(ポール・ワードの読み出し)を行うことで、ハードウェア割り込みを再配置しなくとも、割り込みハンドラはハードウェア割り込みなのかソフトウェア割り込み(フォルトおよびトラップ)なのかを認識することが可能である。仮想記憶対応[編集]32ビットDOSエクステンダは、標準またはオプションでIA-32のページング機能を利用した仮想記憶をサポートして、物理メモリより大きなメモリを利用可能にしている場合が多い。仮想記憶により物理メモリより大きいメモリを利用出来るようにするためには、ページ不在が検出されて該当ページをディスクからロードする必要が起こった場合に、ディスクにスワップアウトするページを決定する必要があるが、スワップアウトするページとなる利用頻度の低いページを探すために、ページの利用状況の統計を取っておかねばならない。この処理のためには、インターバルタイマーの割り込みハンドラを組み込む必要があるが、割り込みハンドラとその組込みプログラムは、機種毎にI/Oアドレスの異なる割り込みコントローラを制御する必要があるので、機種依存プログラムとなる。そのため仮想記憶をサポートするDOSエクステンダは機種依存する。CPUリセット回路(16ビットDOSエクステンダの場合)[編集]「DOSエクステンダの動作」の項で解説したように、DOSエクステンダはリアルモードとプロテクトモードを交互に切り換えながら動作する。ところが80286は、プロテクトモードからリアルモードに切り換える方法がCPUリセットしかない[1]ため、プロテクトモードからリアルモードへの切り換えが必要なプログラムのためにPC/AT互換機やPC-9800シリーズは、CPUのみをリセットする回路を装備していた。このCPUのみをリセットする回路は機種毎に異なっていたので、80286対応のDOSエクステンダ(当然16ビットDOSエクステンダとなる)のようなプロテクトモードからリアルモードへの切り換えが必要なプログラムは必然的に機種依存することとなった。0FFFFF0hにジャンプするが、リアルモードに遷移後、処理をDOSエクステンダに戻すためには、この領域にあるプログラム(プロテクトモードBIOSの一種)の助けを必要とするが、BIOSの仕様も機種によって異なるということに注意が必要である。32ビットよりも16ビットDOSエクステンダの方がPC/AT互換機対応版から他機種への移植の手間が多かったのである。PC/AT互換機対応の16ビットDOSエクステンダをPC-9800シリーズ等に移植する場合に、移植作業の手間を少しでも減らすために、サポートするCPUを386以上に限定することにより、CPUリセット回路の制御とCPUリセットBIOSに関する移植を回避しているケースもあった。TOWNSはMS-DOS上でRUN386を介してOSが動作しており、富士通から提供されていた開発ツールもエクステンダ用アプリケーションの開発を念頭に置かれていた。そのような環境であったため、市販アプリケーションやフリーソフトウェアの大多数がエクステンダ用プログラムであった点は、特筆に値する。286・386|DOS-Extender互換)これ以外にも286・386|DOS-Extender互換のDOSエクステンダは多数存在する。(Ver.4以降)にバンドルされていた。APIエミュレーション機能を搭載したDOSエクステンダで2005年まで開発が行われていた。TOWNSの標準Cコンパイラであり、富士通から様々なライブラリが提供されていた。32ビット版に相当する)。PharLap社のTNT|DOS-Extenderを使用することで、TNT|DOS-Extender用のアプリケーションを開発することが出来た。C386対応のソースコードデバッガ。PC-9800シリーズ版が存在した。Cコンパイラにバンドルされていた。Cコンパイラ(GCC)としてdjgppが存在する。これとは別に386|DOS-Extender・EXE386にも移植された。マルチプラットホームスクリプト言語でDOSエクステンダとしてCauseWayを使用している。C言語ソースも出力が可能。80286では、非公開のLOADALL命令を使用しても、プロテクトモードからリアルモードへ戻ることはできない。参考文献[編集]出典は列挙するだけでなく、脚注などを用いてどの記述の情報源であるかを明記してください。記事の信頼性向上にご協力をお願いいたします。Specification)DESQviewこの項目は、ソフトウェアに関連した書きかけの項目です。この項目を加筆・訂正などしてくださる協力者を求めています(PJ:コンピュータ/P:コンピュータ)。(日時は個人設定で未設定ならばUTC)。表示-継承ライセンスの下で利用可能です。追加の条件が適用される場合があります。詳細は利用規約を参照してください。Cookieに関する声明モバイルビュ。