TSRの使い方
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/09/03 03:43 UTC 版)
「Terminate and Stay Resident」の記事における「TSRの使い方」の解説
システムコール INT 27H は 'Terminate But Stay Resident' と呼ばれるため、それを使うプログラムを 'TSR' と称した。これを使うと、プログラムは最大64KBのメモリだけをそのままの状態で残すことができる。MS-DOS 2.0 ではそれを改良したシステムコール INT 21H/31H ('Keep Process') が追加された。これは残すメモリ量の制限を外し、プロセスの終了コードを指定できるようにしたものである。 終了後にコードを実行させるためのきっかけの一例としては、なんらかの割込みベクタを自分自身が持つ割込みハンドラを指すよう書き換え、再び呼び出されるようにする。たとえば、ハードウェア割込を利用すれば、ハードウェアのイベントにプログラムを反応させることができる。ソフトウェア割込を利用すれば、別のプログラム中からINT命令で簡単に呼出ができる。(ハードウェア割込の一種であるが)タイマー割込やVSYNC割込により、定期的に呼出すこともできる。割込みの利用は一例であって、他の方法もある(MS-DOSにデバイスドライバとして登録する等)。 実行させるコードは持たず、単にデータ領域としてメモリを確保するだけという利用法もある。例えばPC-9801は比較的後期の機種になるまでパレットの読出しができなかったため、ユーザにより考案された「常駐パレット」などはそういった用法である。 割込みベクタは、連鎖させる利用法もある。一般に、次のどちらかのように利用する。 ある割り込みを完全に独占し、それ以前に同じ割り込みベクタを書き換えていた他の割り込みハンドラは呼ばない。 そのTSR自身のコードを実行する前、あるいは実行した後に、以前の割り込みベクタに従って、他の割り込みハンドラを連鎖的に呼ぶ。 前者では競合するTSRの機能が停止するし、後者では共存できるかもしれないが必ずしも全てうまくゆくとは限らない(グラフィックなどの似たような機能を、複数のTSRがまずいタイミングで利用してしまうかもしれないし、連鎖による処理時間の遅れによりうまく働かなくなるかもしれない。そういったように一般に「相性問題」と言われるような現象を起こしやすい)。 'Terminate and Stay Resident' はコンピュータウイルスでもよく使われ、PCの制御を奪ったり、バックグラウンドに潜んだりといった動きをした。たとえば、ディスクI/Oや実行イベントに対応してウイルスが動き、実行ファイル (.EXE や .COM) が実行されるときにそのファイルに感染したり、データファイルをオープンしたときにそのファイルに感染した。 MS-DOSのバージョンが上がるにつれ、(あまり普及しなかったバージョン4や)特にバージョン5.0以降では、MS-DOS自身の標準添付ユーティリティ類にもこれを使ったものが増えた。例えば、DOSKEY コマンド行エディタや他のコマンド行からインストール可能なユーティリティである(ドライバとしてCONFIG.SYSに記述する必要がなく、AUTOEXEC.BATに記述するか、通常のコマンド行から手入力で常駐させる)。 TSRプログラムはどの時点でもロードできる。OSのブート直後にロードするには、AUTOEXEC.BATに記述する。ユーザーが必要に応じてロードすることもできる(例えば、Sidekick や Turbo Debugger)。それらプログラムはTSRであるため、他のプログラムを実行中もメモリに留まっている。TSRプログラムは自身をアンロードさせるオプションを提供しないものもあり、リブートするまでメモリに常駐し続ける。しかし、外部からアンロードすることは可能で、TurboPower Software の MARK.EXE/RELEASE.EXE というユーティリティの組み合わせを使うか、soft reboot TSR を使って、特定のキーの組み合わせを押下することで全TSRをアンロードすることができる。しかしこれらは実際には危険を伴うものであった。MS-DOSのメモリ管理システム的に整合性のある状態を復元するだけであれば簡単だが、割込みその他の資源に関してが問題である。TSRが自身の活動のきっかけのためにフックしているのが、既存のよく知られた割込みなどであることを前提として復元するわけだが、それらの判断は結局のところヒューリスティック(経験則)に頼らざるをえず、MS-DOSでは暴走・ハングアップのようなリセットするしかない異常を起こす危険が常に伴った。
※この「TSRの使い方」の解説は、「Terminate and Stay Resident」の解説の一部です。
「TSRの使い方」を含む「Terminate and Stay Resident」の記事については、「Terminate and Stay Resident」の概要を参照ください。
- TSRの使い方のページへのリンク