WindowsXP:2つのMS−DOS環境

 「スタート」「アクセサリ」にあるコマンドプロンプトのリンク先は、\Windows\system32\cmd.exeになっていますが、同一フォルダ内を調べるとcommand.comがあります。どちらでもMS−DOS環境が起動します。
 何故MS−DOS環境が2つあるのでしょうか。


図1 コマンドプロンプトのリンク先のフォルダ内

1.cmd.exeとcommand.comを実行

 違いを確認するため、「ファイル名を指定して実行(R)」でcmd.exeとcommand.comを実行してみました。


図2 WindowsXPでファイル名を指定して実行する方法

 
図3 各々指定したファイル名


図4 DOS窓が起動した状態

2.見た目の違い

 command.comの起動時、cmd.exe(コマンド・プロンプト)には無いかな漢字変換のデバイス・ドライバの登録画面が表示されました。しかし、comman.com, cmd.exe 双方漢字変換は可能です。また、comman.comは一見ロングファイル名がきちんと表示されないように見えますが、dirコマンドを実行すれば問題なく表示されます。

3.MS−DOS側から見た違い

 MS−DOS環境内で各々 MEM (/P, /D, /C)コマンドを実行してメモリ割り当て状況を確認(*1)すると、メモリ常駐量、登録ドライバ、空きメモリ(EMS含む)に大きな違いは無い(*2)ようです。つまり、MS−DOSのコマンド、プログラムからはcommand.com上で動作しているのか、cmd.exe上で動作しているのか、MS−DOS環境の違いが認識できないと考えられます。

*1:cmd.exeでは何故かMEMコマンドの結果が表示されないようなので、リダイレクト(例:MEM /P > A.TXT) して確認した。
*2:MS−DOSシステムの常駐量が若干異なる。

表1 各DOS窓内のメモリ割り当て状況

DOS窓種類 MEM /Pの実行結果 MEM /Dの実行結果 MEM /Cの実行結果
cmd.exe memp_cmd.txt memd_cmd.txt memc_cmd.txt
command.com memp_command.txt memd_command.txt memc_command.txt

4.Windows側から見た違い

(1)プロセスの取り扱い
 タスクマネージャで起動プロセスを確認してみました。(表2)

表2 各DOS窓起動によるプロセス

DOS窓種類 タスクマネージャのプロセス・イメージ名
cmd.exe CMD.EXE
command.com NTVDM.EXE

 cmd.exeはファイル名そのままのプロセス・イメージ名となっています。しかし、command.comのプロセス・イメージ名はNTVDM.EXEとなっており、MS−DOS仮想モード・プロセスが立ち上がります。
 ※NTVDMは、NT Virtual Dos Machineと呼ぶ。

 cmd.exeで昔ながらのedlin(MS−DOSコマンド)を起動してみると、NTVDM.EXEが起動し、逆に、command.comでedlinを起動してみると、cmd.exeが起動するようです。cmd.exeの動作がイマイチわかりません。(別途調査)

(2)32bitプログラムのタスクの取り扱い
 MS−DOS環境からWindowsの電卓(calc.exe, 32bit-program)を起動してみると、タスク処理に次の違いがありました。
 ・cmd.exe プロンプト(コマンドラインの入力カーソル)が帰ってくる。
 ・command.com プロンプトが帰ってこない。


図5 cmd.exeの32bit-programタスク処理


図6 command.comの32bit-programタスク処理

なお、command.comのプロンプトは電卓を終了することで戻ってきます。

(3)Windowsによる終了
 DOS窓を「×」で閉じてみると、cmd.exeは終了しますが、command.comは強制終了モードの確認画面が表示されました。


図7 command.comの「×」による終了(Windowsタスクからの終了)

5.まとめ

 cmd.exe(コマンドプロンプト)は、MS−DOSの環境が手軽に利用可能で、Windowsと協調性があるマルチタスク処理用の環境に準備されているものであり、一方、command.comは処理手順やこれまでのMS−DOSとの互換性を重視したシングルタスク処理用の環境に準備されているものであると考えられます。
 ただ、一般ユーザーからは意識して使い分けることは必要なく、普通はコマンドプロンプトの利用で十分です。


<Back>