コマンドラインパラメータとファイルI / O操作がCPU時間を消費する可能性はありますか?

コマンドラインパラメータとファイルI / O操作がCPU時間を消費する可能性はありますか?

定義によるとCPU時間:

CPU時間(またはCPU実行時間)は、指定されたプログラムの実行開始と終了の間の時間です。この時間は、プログラムに代わって実行されるオペレーティングシステムルーチンを含む、CPUが特定のプログラムをコンピューティングするのに費やす時間を説明しますが、I / Oを待つ時間と他のプログラムを実行する時間は含まれません。

プロセスのCPU時間を測定するときに、I / Oストリーム(コマンドライン引数とファイル用)の設定やクローズなどのタスクに関連する時間もCPU時間に含まれますか?

ベストアンサー1

はい(健全な実装と合理的な定義のため)

明らかに、そのようなコマンドがあれば、cat /etc/passwdプロセスはopen(2)ファイルを開くために呼び出しを行います。

やや明確ではないことは、ファイルを開くコストなどのコマンドがある場合、cat < /etc/passwd少なくとも一般的なシェル実装の場合、そのプロセスも変更されることです。シェルは次のようにコマンドを処理します。

  1. catこれは組み込みコマンドではないことがわかります。したがって、これを実行するための新しいプロセスが作成されます。伝統的に、これはfork(2)システムコールを使用していましたが、現在はシステムによってはvfork、clone、またはbuildシステムコールになります。
  2. コマンドがで始まらないため、元のプロセスはスタンバイシステムコールのいくつかのバージョンを呼び出します&
  3. 新しいプロセスはまだシェルを実行しています。開いているファイルを呼び出しopenて、ファイル記述子0に開いたファイルをスケジュールします。これを行う方法は少なくともいくつかありますが、重要なのは、この新しいプロセスがopenを呼び出すことです。
  4. catその後、新しいプロセスはいくつかのバージョンのexecシステムコールを使用します。
  5. 最終的にはcat終了し、元のシェルが呼び出しwaitから返されます。

したがって、この場合、新しいプロセスにはI / Oストリームを設定するコストも発生します。もちろん、I/O を設定するコストは、実際に I/O を実行するコストに比べて一般的に少ないです。

仕上げのためには、状況は少し複雑です。プログラムに関連するランタイムは通常、すべてのバッファをフラッシュし、開いているファイルを閉じます。これを行うのにかかる時間は、プロセスに従って計算されます。プロセスが終了すると、開いている残りのファイルはすべて閉じられます。これを行うための費用は、プロセスに含まれていても含まれなくてもよい。

他のプロセスがファイルシステムを提供するFUSEと同じ場合、他のプロセスでオープン操作を実行するのに費やされた時間は、オープン呼び出しを実行するプロセスではなくそのプロセスに書き込まれます。

おすすめ記事