Terminate and Stay Resident

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内, 検索

Terminate and Stay Resident (TSR) はDOSコンピュータオペレーティングシステムにおけるシステムコールの1つで、プログラムを終了させてシステムに制御を戻すが、そのプログラムはメモリに残しておくという機能を提供する。多くのソフトウェアベンダーがこれを利用し、一旦終了したプログラムに自動的または何らかのイベント(特定のキー押下など)を契機として制御を戻すことで、擬似的なマルチタスクを実現した。このシステムコールを利用するプログラムも一般にTSRと呼ばれる。TSRプログラムには、OSがサポートしていないハードウェア用のデバイスドライバとして機能するものや、スケジューリングやアドレス帳などのよく使う小さなユーティリティプログラムなどがある。

目次

[編集] 背景

通常、DOSでは一度に1つのプログラムしか実行できない。実行中のプログラムが終了する場合、制御をDOSの制御プログラム COMMAND.COM に戻すため、INT 21H/4CH というシステムコールを使う。そのプログラムが使っていたメモリやシステムリソースは未使用状態にマークされるため、最初からロードする以外に再び呼び出すことはできなくなる。しかし、プログラム終了時にシステムコール INT 27HINT 21H/31H を使うと、DOSはそのプログラムのメモリの指定された部分を再利用しなくなる。

[編集] TSRの使い方

システムコール INT 27H は 'Terminate But Stay Resident' と呼ばれるため、それを使うプログラムを 'TSR' と称した。これを使うと、プログラムは最大64KBのメモリだけをそのままの状態で残すことができる。MS-DOS 2.0 ではそれを改良したシステムコール INT 21H/31H ('Keep Process') が追加された。これは残すメモリ量の制限を外し、プログラムが exit コードを返せるようにしたものである。このシステムコールを実行する前に、プログラムは1つ以上の割り込みベクタが自分自身を指すよう書き換え、再び呼び出されるようにする。ハードウェア割り込みベクタを書き換えると、ハードウェアのイベントにプログラムを反応させることができる。ソフトウェア割り込みベクタを書き換えれば、現在動作中のプログラムから呼び出すことができる。タイマー割り込みを使えば、TSRを定期的に呼び出すこともできる。

割り込みベクタを連鎖させれば、TSRプログラム群でコンピュータを完全に制御することもできる。TSRは次のどちらかの振る舞いを見せる。

  • ある割り込みを完全に独占し、それ以前に同じ割り込みベクタを書き換えていた他のTSRは呼び出さない。
  • 以前の割り込みベクタに従って、他のTSRを連鎖的に呼び出す。これは、そのTSR自身のコードを実行する前でも実行した後でもよい。この場合、TSR群によってプログラムの連鎖が形成される。

'Terminate and Stay Resident' はMS-DOSでのコンピュータウイルスでもよく使われ、PCの制御を奪ったり、バックグラウンドに潜んだりといった動きをした。すなわち、ディスクI/Oや実行イベントに対応してウイルスが動き、実行ファイル (.EXE や .COM) が実行されるときにそのファイルに感染したり、データファイルをオープンしたときにそのファイルに感染した。

一部のDOS自身、特にバージョン5.0以降では、この手法をいくつかの便利な機能を実現するのに使った。例えば、DOSKEY コマンド行エディタや他のコマンド行からインストール可能なユーティリティである(ドライバとしてCONFIG.SYSに記述する必要がなく、AUTOEXEC.BATに記述するか、通常のコマンド行から手入力で常駐させる)。

TSRプログラムはどの時点でもロードできる。OSのブート直後にロードするには、AUTOEXEC.BATに記述する。ユーザーが必要に応じてロードすることもできる(例えば、Sidekick や Turbo Debugger)。それらプログラムはTSRであるため、他のプログラムを実行中もメモリに留まっている。一般にTSRプログラムは自身をアンロードさせるオプションを提供しないため、リブートするまでメモリに常駐し続ける。しかし、外部からアンロードすることは可能で、TurboPower Software の MARK.EXE/RELEASE.EXE というユーティリティの組み合わせを使うか、soft reboot TSR を使って、特定のキーの組み合わせを押下することで全TSRをアンロードすることができる。

[編集] 問題

TSRプログラムは非常に便利でDOSの限界を超える効力を発揮したが、同時に問題の種とも言われてきた。TSRプログラムはある意味でOSをハイジャックするものであり、TSRとアプリケーションの組合せや、TSR同士の組合せによってはシステムがクラッシュする事態が発生した。また上述したように、コンピュータウイルスにもTSRプログラムの形態をとるものもあり、それらは故意に問題を引き起こした。さらに、DOSシステムにおけるプログラムのコードは、たとえハードウェアに大量のRAMが搭載されていたとしても、RAMの先頭640KBにロードしなければならなかった(コンベンショナルメモリ)。TSRも例外ではなく、先頭640KBにコードが置かれるため、アプリケーションが利用できるメモリ範囲がそのぶんだけ減ってしまう。したがって、TSRプログラムを作成する場合、第一にそのサイズをなるべく小さくしなければならず、さまざまなベンダーのソフトウェア製品との相性を調べなければならなかった。

1980年代末から1990年代初め、PC上の多くのコンピュータゲームはますますメモリを必要とするようになり、TSRに残されたメモリ領域はますます小さくなっていった。TSRを常駐させつつゲームに必要なメモリを確保するテクニックはどんどん難しくなっていった。多くのゲーマーはそれぞれのゲーム用に異なった構成設定のブートディスクを用意した。1990年代中盤以降もDOS向けゲームがいくつも登場して640KBの限界を突破し、先頭1MBより上位のメモリにゲームのデータやコードの一部を置き、オーバーレイとして下位1MBの領域にスワップインさせて実行するという技法が使われた。オーバーレイを多用したプログラミングは非常に複雑であるため、プログラムが約512KBを超える場合、1MBの制限を超えるもっと簡単な方法として、VCPIDPMIを実装したサードパーティ製DOSエクステンダが使われた。それによって、x86プロセッサがリアルモードからプロテクトモードに移行すると1MBを超える領域でコードを実行することができた。しかしDOSとDOSプログラムは全てリアルモードで動作するものであり(VCPIやDMPIはプロテクトモードのプログラムをDOSに対してリアルモードであるように見せる)、TSRやデバイスドライバもリアルモードで動作する。従って、それらに制御が渡る際には、DOSエクステンダはリアルモードに戻してから制御を渡す必要があり、時間的なペナルティが発生した。

[編集] 復権

EMSボードと Intel 80386 プロセッサが1980年代後半に登場し、先頭640KBより上位のアドレスにTSRをロードできるようになった。これにはソフトウェアの複雑化(拡張メモリマネージャ)を伴ったが、数年間はこれで何とか間に合った。有名なメモリマネージャとしては、クォーターデックのQRAMQEMM、Qualitas の 386Max、コンパックCEMM、後発だがマイクロソフトEMM386などがある。TSRをロード可能な640KBより上位のメモリを "Upper Memory Block" (UMB) と呼ぶ。その後、メモリマネージャがTSRの最適配置を自動的に行い、先頭640KBをなるべく空けるようになった(クォーターデックの Optimize、マイクロソフトの memmaker)。

[編集] 終焉

DOSエクステンダを使ったゲームが開発されるようになり(初期の例として DOOM がある)、TSRに関連したメモリ容量問題の多くは解消された。そして Microsoft Windows が広まり、特に Windows 95 が登場すると、TSRの多くは不要となり、一部のTSRは非互換によって使えなくなった。ただし、Win16アプリケーションではTSR風の技法が可能で、IDTにパッチを当てるものもあった(リアルモードの Windows では可能だったため)。TSR はほとんど完全に消えてしまった。マルチタスク型のOS(Windows XPMac OS XLinuxなど)がPC向けにも登場し、複数のプログラムやデバイスドライバが同時並行して動作できるようになり、その際にTSRのような特殊な技法は不要となった。割り込みは、カーネルが独占的に処理するようになった。

[編集] Macintosh

実装は全く異なるが、似たような目的のものとして Macintosh のデスクアクセサリ (DA) がある。初期のMacintoshのOSはMS-DOSのようにシングルタスクで、その制限に対処するべくDAが生まれた。DAは任意の時点で動作中のアプリケーションの中で動作できる小さなプログラムで、「計算機」などがある。さまざまなサードパーティがアプリケーションをDAフォーマットで開発した。例えば、ワードプロセッサから抜け出さずに挿絵を描くためのお絵かきソフトなどがあり、擬似的なマルチタスクを実現していた。

[編集] 関連項目

[編集] 外部リンク

個人用ツール
名前空間

変種
操作
案内
ヘルプ
ツールボックス
他の言語