2001/01/13 [土]
Windows のコマンドプロンプトではコマンドラインアプリケーションを実行することができます。この中には、DPMI を利用した 32bit DOS アプリケーションも含まれます。しかし、この DPMI を利用した DOS アプリケーションを単一のコマンドプロンプトの中で複数回呼び出すと、そのうちコマンドプロンプトが落ちてしまうといった現象が起こります。
実は、Windows の DPMI サーバはプロテクトモードに切り替えた直後のセレクタを、そのプログラムが終了した後でも開放しないのです。したがって、起動するたびに LDT のセレクタが開放されず、そのうち尽きてしまって、おかしくなるのです。そのようなことから、Windows 上で実行することを考慮している DPMI クライアントは終了時に明示的にセレクタを開放する必要があります。しかし、CS と SS はどうすることもできません。その結果として、「セレクタリーク」することになります。これを回避する方法は知られていないようです。
この現象は、Win95 や WinNT4、Win2K など、まずほとんどの Windows で発生しているようです。
実は、Windows の DPMI サーバはプロテクトモードに切り替えた直後のセレクタを、そのプログラムが終了した後でも開放しないのです。したがって、起動するたびに LDT のセレクタが開放されず、そのうち尽きてしまって、おかしくなるのです。そのようなことから、Windows 上で実行することを考慮している DPMI クライアントは終了時に明示的にセレクタを開放する必要があります。しかし、CS と SS はどうすることもできません。その結果として、「セレクタリーク」することになります。これを回避する方法は知られていないようです。
この現象は、Win95 や WinNT4、Win2K など、まずほとんどの Windows で発生しているようです。
by seclan