70 年代と 80 年代に戻りましょう。リアルモードのフラット メモリ モデルでは、プログラムは 64K のメモリを完全に制御できます。つまり、DOS がプログラムを起動すると、プログラムは他のプログラムと同様に、DOS が保存されていたメモリを上書きできます。
それを踏まえると、プログラムが終了した後、DOS はどのようにして「戻る」ことができたのでしょうか?
答え1
まず、オリジナルの IBM DOS は 1981 年にオリジナルの IBM 5150 PC とともにリリースされましたが、そのベースとなった CP/M オペレーティング システムは 70 年代に存在していました。
これを説明する最も良い方法は、DOS がメイン メモリ (「一時プログラム領域」または TPA) をスタックとして扱うということだと思います。
通常、最初にロードされるプログラムは COMMAND.COM で、一番下にあります。COMMAND.COM は、DOS に別のプログラムをロードして制御を渡すように要求できます。バイナリは COMMAND.COM が終了するメモリに配置されます。この目的のために、DOS は「空きメモリの開始」ポインタを維持していると思います。バイナリが終了の DOS 呼び出しを実行すると、DOS は空きメモリ ポインタを減分し、メモリが「再利用」されます。
一度に実行されるプログラムは 1 つだけなので、この方式では穴や断片について心配する必要はありませんでした。
DOS は TSR をサポートしていました。つまり、終了して常駐するプログラムです。したがって、この場合、DOS は戻る前にそのポインタを減算せず、プログラムはメモリ内に残ります。特別なサードパーティのユーティリティなしでは、それを削除する方法はありません。TSR は DOS 関数またはシステム割り込みにフックして、限られたマルチタスクを実現できます。TSR に関する Wikipedia の記事より詳細な情報を提供します。
しかし、メモリ保護がないので、どのプログラムもいつでも DOS が存在する場所を含む RAM 全体を破壊することができます。その場合、DOS のリターン コールを実行するとクラッシュするか、予期しない動作をします。このスキームはプログラムの連携に依存しており、強制力はありません。DOS 全体を上書きすることさえ可能です。それがこのLOADLIN
プログラムの目的です。これは DOS 用の Linux ローダーです。Netware も同じだったと思います。起動には DOS を使用しましたが、基本的に Netware OS は読み込み時に RAM 内の DOS を置き換えました。