(57)【特許請求の範囲】
【請求項１】
情報記録媒体と、マルチスレッド化プログラムを実行するプロセッサと、を備えたプロファイル装置における、マルチスレッドのプロファイル方法であって、
前記マルチスレッドのスレッド毎に前記情報記録媒体にスタックを確保する工程と、
前記スレッドのコンテキストスイッチングを行う工程と、
前記コンテキストスイッチング時に動作していたスレッドのスタックポインタのレジスタ値を、前記情報記録媒体の特定領域に書き出す工程と、
前記コンテキストスイッチング時の時間と前回のスイッチングコンテキスト時の時間と、の差分に基づき前記スレッド毎の動作時間を求める工程と、
を含むマルチスレッドのプロファイル方法。
【請求項２】
前記動作時間を求める工程におけるスレッドのコンテキストスイッチング時の時間は、前記プロセッサの動作クロックに基づいてカウントされるフリーランカウンタより求める請求項１記載のマルチスレッドのプロファイル方法。
【請求項３】
前記マルチスレッド化プログラム終了時に前記情報記録媒体に書き出されたレジスタ値を読み出し、スレッドプロファイル情報として出力させる工程を含む請求項１記載のマルチスレッドのプロファイル方法。
【請求項４】
実行中の前記マルチスレッド化プログラムにかかるプロセスに対して割り込みその他の通信方法により、前記情報記録媒体に書き出されたレジスタ値をスレッドプロファイル情報として出力開始を送付する工程と、
前記出力開始の送付に基づき前記情報記録媒体に書き出されたレジスタ値を読み出し、前記スレッドプロファイル情報として出力させる工程と、
を含む請求項１記載のマルチスレッドのプロファイル方法。
【請求項５】
前記送付する工程と前記出力させる工程とをネットワーク経由で行わせる請求項４記載のマルチスレッドのプロファイル方法。
【請求項６】
情報記録媒体と、マルチスレッド化プログラムを実行するプロセッサと、を備えたプロファイル装置において、
前記プロセッサは、前記マルチスレッドのスレッド毎に前記情報記録媒体にスタックを確保する手段と、
前記スレッドのコンテキストスイッチングを行う手段と、
前記コンテキストスイッチング時に動作していたスレッドのスタックポインタのレジスタ値を、前記情報記録媒体の特定領域に書き出す手段と、
前記コンテキストスイッチング時の時間と前回のスイッチングコンテキスト時の時間との差分に基づき前記スレッド毎の動作時間を求める手段と、
を備えるマルチスレッドのプロファイル装置。
【請求項７】
前記動作時間を求める手段におけるスレッドのコンテキストスイッチング時の時間は、前記プロセッサの動作クロックに基づいてカウントされるフリーランカウンタより求める請求項６記載のマルチスレッドのプロファイル装置。
【請求項８】
前記プロセッサは、前記マルチスレッド化プログラム終了時に前記情報記録媒体に書き出されたレジスタ値を読み出し、スレッドプロファイル情報として出力させる手段を備える請求項６記載のマルチスレッドのプロファイル装置。
【請求項９】
前記プロセッサは、実行中の前記マルチスレッド化プログラムにかかるプロセスに対して割り込みその他の通信方法により、前記情報記録媒体に書き出されたレジスタ値をスレッドプロファイル情報として出力開始を送付する手段と、
前記出力開始の送付に基づき前記情報記録媒体に書き出されたレジスタ値を読み出し、前記スレッドプロファイル情報として出力させる手段と、
を備えた請求項６記載のマルチスレッドのプロファイル装置。
【請求項１０】
前記送付する手段と前記出力させる手段とをネットワーク経由で行わせる請求項９記載のマルチスレッドのプロファイル装置。
【請求項１１】
情報記録媒体と、マルチスレッド化プログラムを実行するプロセッサと、を備えたプロファイル装置のコンピュータに、
前記マルチスレッドのスレッド毎に前記情報記録媒体にスタックを確保する機能と、
前記スレッドのコンテキストスイッチングを行う機能と、
前記コンテキストスイッチング時に動作していたスレッドのスタックポインタのレジスタ値を、前記情報記録媒体の特定領域に書き出す機能と、
前記コンテキストスイッチング時の時間と前回のスイッチングコンテキスト時の時間との差分に基づき前記スレッド毎の動作時間を求める機能と、
を実現させるコンピュータ・プログラム。
【請求項１２】
前記動作時間を求める工程におけるスレッドのコンテキストスイッチング時の時間は、前記プロセッサの動作クロックに基づいてカウントされるフリーランカウンタより求める請求項１１記載のコンピュータ・プログラム。
【請求項１３】
前記コンピュータに、
前記マルチスレッド化プログラム終了時に前記情報記録媒体に書き出されたレジスタ値を読み出し、スレッドプロファイル情報として出力させる機能をさらに実現させる請求項１１記載のコンピュータ・プログラム。
【請求項１４】
前記コンピュータに、
実行中の前記マルチスレッド化プログラムにかかるプロセスに対して割り込みその他の通信方法により、前記情報記録媒体に書き出されたレジスタ値をスレッドプロファイル情報として出力開始を送付する機能と、
前記出力開始の送付に基づき前記情報記録媒体に書き出されたレジスタ値を読み出し、前記スレッドプロファイル情報として出力させる機能と、
をさらに実現させる請求項１１記載のコンピュータ・プログラム。
【請求項１５】
前記送付する機能と前記出力させる機能とをネットワーク経由で行わせるようにした請求項１４記載のコンピュータ・プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えば画像形成装置等においてソフトウェア品質管理、ソフトウェア開発ツール等に役立つマルチスレッドのプロファイル方法、プロファイル装置及びコンピュータ・プログラムに関する。
【０００２】
【従来の技術】
現在では、オペレーティングシステムなどでマルチスレッドがサポートされていない場合でも、ソフトウェアマルチスレッドなどの方法で、マルチスレッドプログラミングが可能となっている。
【０００３】
マルチスレッドプログラミングは、オペレーティングシステムがサポートするマルチタスクとは異なり、その実装が軽いため、利用する資源も少なく、見掛け上、たくさんのプログラムを並行して動作させることが可能である。
【０００４】
【発明が解決しようとする課題】
ところが、ソフトウェアマルチスレッドなどでは、オペレーティングシステムのサポートが受けられないため、そのデバッグには困難を極める。また、どのように動作しているかなどのプロファイルの取得も難しい。
【０００５】
どのように動作しているかの情報の一つに、スタックの消費量がある。スレッドの生成時に或る一定量のスタック領域の割り当てをスレッド毎に行っているが、最初に割り当てられるスタックを大きくすると、利用されることのない無駄なリソースが発生する一方、少なすぎるとスタックの自動拡張が頻繁に発生してスレッドの動作効率が悪化してしまう。
【０００６】
本発明の目的は、プログラミングが終了した後に、最も一般的に使われているような方法で、プログラムを動作させてスタックの消費量を測定し、その消費量よりも少し多めの量をスレッド生成時に割り当てるスタック量とすることにより、プログラムを効率よく動作させることができるマルチスレッドのプロファイル方法、プロファイル装置及びコンピュータ・プログラムを提供することである。
【０００７】
また、スレッド単位の実行時間を測定することにより、どのスレッドが多くの時間を消費しているかを明確にし、プログラムのチューニングを容易にすることを目的とする。
【０００８】
また、スレッドプログラミングの長所として、同一プロセス内で、複数の待ち合わせが簡単に記述できることが挙げられるが、このように記述されるスレッドは消費時間が少ない故に、そのスレッド実行中にオペレーティングシステムによるタスクスイッチングが殆ど発生しないため、ＣＰＵが持つフリーランカウンタなどを使った時間測定でないと正確に測定できないようなスレッドがある点を考慮し、このようなスレッドの消費時間を正確に測定できるようにすることを目的とする。
【０００９】
さらに、プログラム実行終了時に自動的にスレッドプロファイル情報を取得できるようにすることを目的とする。
【００１０】
また、一度実行を始めたらそのシステム全体の電源が断たれるまで動き続けるようなプログラムについて、スレッドプロファイル情報を取得できるようにすることを目的とする。
【００１１】
さらには、外部ストレージなどの記憶装置を持たないシステムでは、プログラムの実行が終了する際などに出力されるスレッドプロファイル情報を保管しておくことができない点を考慮し、外部ストレージなどの記憶装置を持たないシステムでもスレッドプロファイル情報を取得できるようにすることを目的とする。
【００１２】
【課題を解決するための手段】
請求項１記載の発明は、情報記録媒体と、マルチスレッド化プログラムを実行するプロセッサと、を備えたプロファイル装置における、マルチスレッドのプロファイル方法であって、前記マルチスレッドのスレッド毎に前記情報記録媒体にスタックを確保する工程と、前記スレッドのコンテキストスイッチングを行う工程と、前記コンテキストスイッチング時に動作していたスレッドのスタックポインタのレジスタ値を、前記情報記録媒体の特定領域に書き出す工程と、前記コンテキストスイッチング時の時間と前回のスイッチングコンテキスト時の時間と、の差分に基づき前記スレッド毎の動作時間を求める工程と、を含む。
【００１３】
従って、コンテキストスイッチングによる自スレッドから他スレッドへの移行時の処理は自スレッド内で行われるため、コンテキストスイッチング時に動作していた当該スレッドのスタックポインタのレジスタ値を特定領域に書き出すことにより、スレッドで使用するスタック量を推定できることとなり、そのスタック量よりも少し多めの量をスレッド生成時に割り当てるスタック量とすることにより、プログラムを効率よく動作させることが可能となる。
【００１５】
また、スレッド単位の実行時間を測定することにより、どのスレッドが多くの時間を消費しているかを明確にすることができ、プログラムのチューニングが容易となる。
【００１６】
請求項２記載の発明は、請求項１記載のマルチスレッドのプロファイル方法において、前記動作時間を求める工程におけるスレッドのコンテキストスイッチング時の時間は、前記プロセッサの動作クロックに基づいてカウントされるフリーランカウンタより求める。
【００１７】
従って、請求項１記載の発明を実現する上で、ＣＰＵ等のハードウェアが持つフリーランカウンタを利用して時間測定を行うことで、正確に測定でき、どのスレッドが多くの時間を消費しているかを正確に把握でき、プログラムのチューニングやスレッド間の時間配分が推定できるため、負荷分布等の検討を適切に行える。
【００１８】
請求項３記載の発明は、請求項１記載のマルチスレッドのプロファイル方法において、前記マルチスレッド化プログラム終了時に前記情報記録媒体に書き出されたレジスタ値を読み出し、スレッドプロファイル情報として出力させる工程を含む。
【００１９】
従って、プログラムの実行終了時に自動的にスレッドプロファイル情報を取得できる。
【００２０】
請求項４記載の発明は、請求項１記載のマルチスレッドのプロファイル方法において、実行中の前記マルチスレッド化プログラムにかかるプロセスに対して割り込みその他の通信方法により、前記情報記録媒体に書き出されたレジスタ値をスレッドプロファイル情報として出力開始を送付する工程と、前記出力開始の送付に基づき前記情報記録媒体に書き出されたレジスタ値を読み出し、前記スレッドプロファイル情報として出力させる工程と、を含む。
【００２１】
従って、一度実行を始めたらそのシステム全体の電源が断たれるまで動き続けるようなプログラムについても、そのプログラムの実行途中経過について、スレッドプロファイル情報を取得することができる。
【００２２】
請求項５記載の発明は、請求項４記載のマルチスレッドのプロファイル方法において、前記送付する工程と前記出力させる工程とをネットワーク経由で行わせる。
【００２３】
従って、外部ストレージなどの記憶装置を持たないシステムでもネットワークを利用することによりスレッドプロファイル情報を取得することができる。
【００２４】
請求項６記載の発明は、情報記録媒体と、マルチスレッド化プログラムを実行するプロセッサと、を備えたプロファイル装置において、前記プロセッサは、前記マルチスレッドのスレッド毎に前記情報記録媒体にスタックを確保する手段と、前記スレッドのコンテキストスイッチングを行う手段と、前記コンテキストスイッチング時に動作していたスレッドのスタックポインタのレジスタ値を、前記情報記録媒体の特定領域に書き出す手段と、前記コンテキストスイッチング時の時間と前回のスイッチングコンテキスト時の時間との差分に基づき前記スレッド毎の動作時間を求める手段と、を備える。
【００２５】
従って、コンテキストスイッチングによる自スレッドから他スレッドへの移行時の処理は自スレッド内で行われるため、コンテキストスイッチング時に動作していた当該スレッドのスタックポインタのレジスタ値を特定領域に書き出すことにより、スレッドで使用するスタック量を推定できることとなり、そのスタック量よりも少し多めの量をスレッド生成時に割り当てるスタック量とすることにより、プログラムを効率よく動作させることが可能となる。
【００２７】
また、スレッド単位の実行時間を測定することにより、どのスレッドが多くの時間を消費しているかを明確にすることができ、プログラムのチューニングが容易となる。
【００２８】
請求項７記載の発明は、請求項６記載のマルチスレッドのプロファイル装置において、前記動作時間を求める手段におけるスレッドのコンテキストスイッチング時の時間は、前記プロセッサの動作クロックに基づいてカウントされるフリーランカウンタより求める。
【００２９】
従って、請求項６記載の発明を実現する上で、ＣＰＵ等のハードウェアが持つフリーランカウンタを利用して時間測定を行うことで、正確に測定でき、どのスレッドが多くの時間を消費しているかを正確に把握でき、プログラムのチューニングやスレッド間の時間配分が推定できるため、負荷分布等の検討を適切に行える。
【００３０】
請求項８記載の発明は、請求項６記載のマルチスレッドのプロファイル装置において、前記プロセッサは、前記マルチスレッド化プログラム終了時に前記情報記録媒体に書き出されたレジスタ値を読み出し、スレッドプロファイル情報として出力させる手段を備える。
【００３１】
従って、プログラムの実行終了時に自動的にスレッドプロファイル情報を取得できる。
【００３２】
請求項９記載の発明は、請求項６記載のマルチスレッドのプロファイル装置において、前記プロセッサは、実行中の前記マルチスレッド化プログラムにかかるプロセスに対して割り込みその他の通信方法により、前記情報記録媒体に書き出されたレジスタ値をスレッドプロファイル情報として出力開始を送付する手段と、前記出力開始の送付に基づき前記情報記録媒体に書き出されたレジスタ値を読み出し、前記スレッドプロファイル情報として出力させる手段と、を備える。
【００３３】
従って、一度実行を始めたらそのシステム全体の電源が断たれるまで動き続けるようなプログラムについても、そのプログラムの実行途中経過について、スレッドプロファイル情報を取得することができる。
【００３４】
請求項１０記載の発明は、請求項９記載のマルチスレッドのプロファイル装置において、前記送付する手段と前記出力させる手段とをネットワーク経由で行わせる。
【００３５】
従って、外部ストレージなどの記憶装置を持たないシステムでもネットワークを利用することによりスレッドプロファイル情報を取得することができる。
【００３６】
請求項１１記載の発明は、情報記録媒体と、マルチスレッド化プログラムを実行するプロセッサと、を備えたプロファイル装置のコンピュータに、前記マルチスレッドのスレッド毎に前記情報記録媒体にスタックを確保する機能と、前記スレッドのコンテキストスイッチングを行う機能と、前記コンテキストスイッチング時に動作していたスレッドのスタックポインタのレジスタ値を、前記情報記録媒体の特定領域に書き出す機能と、前記コンテキストスイッチング時の時間と前回のスイッチングコンテキスト時の時間との差分に基づき前記スレッド毎の動作時間を求める機能と、を実現させる。
【００３７】
従って、コンテキストスイッチングによる自スレッドから他スレッドへの移行時の処理は自スレッド内で行われるため、コンテキストスイッチング時に動作していた当該スレッドのスタックポインタのレジスタ値を特定領域に書き出すことにより、スレッドで使用するスタック量を推定できることとなり、そのスタック量よりも少し多めの量をスレッド生成時に割り当てるスタック量とすることにより、プログラムを効率よく動作させることが可能となる。
【００３９】
また、スレッド単位の実行時間を測定することにより、どのスレッドが多くの時間を消費しているかを明確にすることができ、プログラムのチューニングが容易となる。
【００４０】
請求項１２記載の発明は、請求項１１記載のコンピュータ・プログラムにおいて、前記動作時間を求める工程におけるスレッドのコンテキストスイッチング時の時間は、前記プロセッサの動作クロックに基づいてカウントされるフリーランカウンタより求める。
【００４１】
従って、請求項１１記載の発明を実現する上で、ＣＰＵ等のハードウェアが持つフリーランカウンタを利用して時間測定を行うことで、正確に測定でき、どのスレッドが多くの時間を消費しているかを正確に把握でき、プログラムのチューニングやスレッド間の時間配分が推定できるため、負荷分布等の検討を適切に行える。
【００４２】
請求項１３記載の発明は、請求項１１記載のコンピュータ・プログラムにおいて、前記コンピュータに、前記マルチスレッド化プログラム終了時に前記情報記録媒体に書き出されたレジスタ値を読み出し、スレッドプロファイル情報として出力させる機能をさらに実現させる。
【００４３】
従って、プログラムの実行終了時に自動的にスレッドプロファイル情報を取得できる。
【００４４】
請求項１４記載の発明は、請求項１１記載のコンピュータ・プログラムにおいて、前記コンピュータに、実行中の前記マルチスレッド化プログラムにかかるプロセスに対して割り込みその他の通信方法により、前記情報記録媒体に書き出されたレジスタ値をスレッドプロファイル情報として出力開始を送付する機能と、前記出力開始の送付に基づき前記情報記録媒体に書き出されたレジスタ値を読み出し、前記スレッドプロファイル情報として出力させる機能と、をさらに実現させる。
【００４５】
従って、一度実行を始めたらそのシステム全体の電源が断たれるまで動き続けるようなプログラムについても、そのプログラムの実行途中経過について、スレッドプロファイル情報を取得することができる。
【００４６】
請求項１５記載の発明は、請求項１４記載のコンピュータ・プログラムにおいて、前記送付する機能と前記出力させる機能とをネットワーク経由で行わせる。
【００４７】
従って、外部ストレージなどの記憶装置を持たないシステムでもネットワークを利用することによりスレッドプロファイル情報を取得することができる。
【００４８】
【発明の実施の形態】
本発明の第一の実施の形態を図１及び図２に基づいて説明する。本実施の形態は、例えばデジタル複写機、複合機等のマルチタスクシステムに適用されており、図１はそのハードウェア構成の概略を示すブロック図である。
【００４９】
まず、マイクロコンピュータ１の主体としてＣＰＵ(Central Processing Unit)２を有しており、このＣＰＵ２には、バスライン３により、ＲＯＭ(Read Only Memory)４、ＲＡＭ(Random Access Memory)５、ＨＤＤ(Hard Disc Drive)６、ＣＤ(Compact Disc)−ＲＯＭ７が装填されるＣＤ−ＲＯＭドライブ８が接続されている。また、ＣＰＵ２に対しては、バスライン３を介して、原稿画像を読取るスキャナ９、画像データに基づき転写紙等に印刷処理を行う電子写真プロセスを利用したレーザプリンタ等によるプリンタ１０が接続されている他、外部に対するインタフェース、例えば、イーサネットＩ／Ｆ１１が接続されている。
【００５０】
また、予め記録されたコンピュータ・プログラム（ソフトウェア）をＣＰＵ２に提供できる情報記憶媒体として、ＲＯＭ４、ＲＡＭ５、ＨＤＤ６、ＣＤ−ＲＯＭ７等を有している。この他、特に図示しないが、予め記録されたコンピュータ・プログラム（ソフトウェア）をＣＰＵ２に提供できる情報記憶媒体としては、ＭＯ，ＭＤ，ＣＤ−Ｒ／ＲＷ，ＤＶＤ−Ｒ／ＲＷ，メモリカード等であってもよい。
【００５１】
このマイクロコンピュータ１では、ＣＰＵ２に各種の処理動作を実行させるためのコンピュータ・プログラムがソフトウェアとして予め設定されており、例えば、ＣＤ−ＲＯＭ７に予め記録されている。このようなソフトウェアは、マイクロコンピュータ１の起動時にＲＡＭ５に複写されて動作時にＣＰＵ２に読み取られる。特に、本実施の形態においては、このＣＰＵ２がマルチスレッド化プログラムを実行するプロセッサとして機能する。このようにＣＰＵ２が各種のプログラムを読み取って対応するデータ処理を実行することにより、後述する各種工程、各種手段及び各種機能が実現される。
【００５２】
次に、このようなマルチタスクシステム中で構築されている本実施の形態のスレッド機構構成例を図２に示す。図２を参照して、スレッドの生成から起動までを簡単に説明する。
【００５３】
スレッド生成部２１によるスレッド生成を受けたら、まず、スレッド（スレッド０，１，２）毎に用意されるスタックをスタック生成部２２により準備する。次に、スレッド情報管理部２３によりスレッド毎に用意されるスレッド固有の情報（例えば、スレッドＩＤやスレッドネーム、スレッド属性など）を初期化する。最後に、スレッド自体を生成して、スレッド起動部２４により起動する（スレッドへ制御を移す）。
【００５４】
スレッド制御部２５では、或る一定時間経過したか或いはMutexロックなどの要求があったときには、スレッド切替部２６によりスレッドの切り替えを行う。スレッドプロファイル部２７はスレッドが動作している間は動作し続ける。
【００５５】
ここで、マルチスレッドのコンテキストスイッチングについて簡単に説明する。マルチスレッドのコンテキストスイッチングには、自発的に発生するVOLUNTARYコンテキストスイッチングと、スレッド相互で発生するPREEMPTIVEコンテキストスイッチングとがある。
【００５６】
前者のVOLUNTARYコンテキストスイッチングは、或るスレッドが演算を繰り返しており、ＣＰＵ２を一人占めしているような場合に、或る一定時間経過後にＣＰＵ２を他のスレッドに割り当てる時に発生する。
【００５７】
後者のPREEMPTIVEコンテキストスイッチングは、スレッドについての或る特定の操作を行った場合に発生するもので、例えば、Mutexのロックやアンロック操作時に発生する。ここで、Mutexとは、MUTual Exclusionの略で、複数のスレッドが同時にスレッド間で共有しているリソースにアクセスできないようにするための機構である。スレッドから共有リソースにアクセスするためには、
▲１▼  共有リソースと結び付けられたMutexをロック
▲２▼  共有リソースにアクセス
▲３▼  ロックしたMutexをアンロック
なる手順で行う必要がある。
【００５８】
このようなことから、本実施の形態では、VOLUNTARYコンテキストスイッチングとPREEMPTIVEコンテキストスイッチングとの何れであっても、自スレッドから他のスレッドへの移行時の処理は、自スレッド内で行われるため、このようなコンテキストスイッチング直前のスレッドのスタックポインタの最小値をＲＡＭ５等のメモリの特定領域に書き出すことにより保存させるようにしたものである。この処理により、本発明にいうスタックプロファイル方法におけるスタックポインタのレジスタ値を特定領域に書き出す工程、手段又は機能が実現されている。
【００５９】
このようなマルチスレッドのスタックプロファイル方法によれば、自スレッドのスタック消費量を厳密に正確ではないが、或る程度推定可能となる。このようにスレッドで使用するスタック量が推定できるため、プログラムを効率よく動作させることができる。なお、この時、各スレッドに割り当てられているスタックは、アドレスが大きい方から小さい方へ順に利用されるものとする。
【００６０】
また、本実施の形態では、同じタイミング（スレッドのコンテキストスイッチング時）で時間を測定しておくことで、前回のコンテキストスイッチング時の時間との差分をとり、スレッドの動作時間を求めるようにしている。この処理により、本発明にいうタイムプロファイル方法における動作時間を求める工程、手段又は機能が実現されている。このようなマルチスレッドのタイムプロファイル方法によれば、スレッドの消費時間の目安を得ることにより、どのスレッドが多くの時間を消費しているかを明確にでき、プログラムのチューニングが容易となる。
【００６１】
この時間を測定する場合、ハードウェア上に実装されているフリーランカウンタを用いれば、マイクロ秒（μｓｅｃ）単位で正確に時間を測定することができる。ここに、フリーランカウンタとは、ハードウェア、具体的には、ＣＰＵ２内に用意された３２bitないし６４bitのカウンタで、その加算処理をＣＰＵ２の動作クロックをｎ倍したタイミングで行うものである。これによれば、どのスレッドが多くの時間を消費しているかを正確に把握でき、プログラムのチューニングやスレッド間の時間配分が推定できるため、負荷分散等の検討に役立つ。
【００６２】
本発明の第二の実施の形態を図３及び図４に基づいて説明する。本実施の形態は、スレッドプロファイル方法の内、その情報の出力方法に関するもので、ネットワーク経由でスレッドプロファィル情報を取得する場合への適用例を示す。
【００６３】
まず、図３にシステム構成例を示す。このシステムは、例えば、図１で前述したようなデジタル複写機や複合機等の画像形成装置のマルチタスクシステムへの適用例を示し、まず、ＰＣクライアント３１は、このデジタル複写機や複合機等の画像形成装置なるマルチタスクシステム３２から得られたスレッドプロファイル情報をネットワーク３３を経由して取り出し、ＨＤＤ、ディスク等のメモリ３４に蓄積させる機能を有する。プログラムを実行するマルチタスクシステム３２とＰＣクライアント３１とは、ＴＣＰ／ＩＰなどの通信プロトコルで接続されている。
【００６４】
このような構成において、大まかな手順としては、ＰＣクライアント３１により起動されるスレッドプロファイル情報読出プロセス３５が対象プロセス３６に対してソフトウェア割り込みを発生させると、対象プロセス３６中のスレッドプロファイル情報書出処理がスレッドプロファイル情報を共有メモリ３７に書き込む。共有メモリ３７に書き込まれたスレッドプロファイル情報はスレッドプロファイル情報読出プロセス３５が読み出してＰＣクライアント３１に転送する、という手順が採られる。
【００６５】
図４に示すフローチャートを参照して詳細に説明する。まず、スレッドプロファイル情報読出プロセス３５をＰＣクライアント３１から起動する（ステップＳ１）。ＰＣクライアント３１とマルチタスクシステム３２とがＴＣＰ／ＩＰの特定ポートで接続されると、スレッドプロファイル情報読出プロセス３５が起動される。この起動後に、スレッドプロファイル情報のための共有メモリ３７が確保される（Ｓ２）。
【００６６】
次に、スレッドプロファイル情報読出プロセス３５上でテストカバレージを行いたい対象プロセス３６を起動し、スレッドプロファイル情報を取得できるようにしておく（Ｓ３）。
【００６７】
スレッドプロファイル情報読出プロセス３５が、対象プロセス３６に対してソフトウェア割り込みを発生させ（Ｓ４）、ソフトウェア割り込みを受けた対象プロセス３６中のスレッドプロファイル情報書出処理がスレッドプロファイル情報を共有メモリ３７に書き込む。共有メモリ３７は限られた領域しかないため、領域を使い切ったら、領域の最初に戻って書き込むようにする。これらのステップＳ１ないしＳ４の処理により、本発明にいうプロファイル情報出力方法における出力開始を送付する工程、手段又は機能が実現されている。
【００６８】
スレッドプロファイル情報を共有メモリ３７に転送する際に、転送する量の空きが共有メモリ３７上にあるか否かをチェックし（Ｓ５）、空きがあれば（Ｓ５のＹ）、スレッドプロファイル情報を共有メモリ３７に転送し、転送終了シグナルをスレッドプロファイル情報読出プロセス３５に送信する（Ｓ６）。スレッドプロファイル情報読出プロセス３５は、対象プロセス中のスレッドプロファイル情報書出処理から読出要求シグナル又は転送終了シグナルを受け取ったら、共有メモリ３７から通信内容を読み出して、ＴＣＰ／ＩＰを介してＰＣクライアント３１に転送し、処理を終了する（Ｓ１１）。これらのステップＳ６，Ｓ１１の処理により、本発明にいうスレッドプロファイル情報を出力させる工程、手段又は機能が実現されている。
【００６９】
一方、共有メモリ３７上に空きがなければ（Ｓ５のＮ）、スレッドプロファイル情報読出プロセス３５に読出要求シグナルを送信し、共有メモリ３７が空になったという書込可能シグナルをスレッドプロファイル情報読出プロセス３５から受け取るまでは、転送処理を中断する（Ｓ７）。スレッドプロファイル情報読出プロセス３５が、スレッドプロファイル情報転送処理から読出要求シグナルを受け取った時には、即座に、共有メモリ３７の全てを読み出し、その読み出しが終了したら、対象プロセス３６へ書込可能シグナルを送信する（Ｓ１２）。
【００７０】
【発明の効果】
請求項１，６及び１１記載の発明によれば、コンテキストスイッチングによる自スレッドから他スレッドへの移行時の処理は自スレッド内で行われるため、コンテキストスイッチング時に動作していた当該スレッドのスタックポインタのレジスタ値を特定領域に書き出すようにしたので、スレッドで使用するスタック量を推定できることとなり、そのスタック量よりも少し多めの量をスレッド生成時に割り当てるスタック量とすることにより、プログラムを効率よく動作させることができる。
【００７１】
また、スレッド単位の実行時間を測定するようにしたので、どのスレッドが多くの時間を消費しているかを明確にすることができ、プログラムのチューニングを容易にすることができる。
【００７２】
請求項２，７及び１２記載の発明によれば、各々、請求項１，６及び１１記載の発明を実現する上で、ＣＰＵ等のハードウェアが持つフリーランカウンタを利用して時間測定を行うようにしたので、正確に測定でき、どのスレッドが多くの時間を消費しているかを正確に把握でき、プログラムのチューニングやスレッド間の時間配分が推定できるため、負荷分布等の検討を適切に行わせることができる。
【００７３】
請求項３，８及び１３記載の発明によれば、プログラムの実行終了時に自動的にスレッドプロファイル情報を取得することができる。
【００７４】
請求項４，９及び１４記載の発明によれば、一度実行を始めたらそのシステム全体の電源が断たれるまで動き続けるようなプログラムについても、そのプログラムの実行途中経過について、スレッドプロファイル情報を取得することができる。
【００７５】
請求項５，１０及び１５記載の発明によれば、請求項４，９及び１４記載の発明において、外部ストレージなどの記憶装置を持たないシステムでもネットワークを利用することによりスレッドプロファイル情報を取得することができる。
【図面の簡単な説明】
【図１】本発明の第一の実施の形態のマルチタスクシステムのハードウェア構成例を示すブロック図である。
【図２】そのスレッド機構構成例を示す概略ブロック図である。
【図３】本発明の第二の実施の形態のネットワーク経由でスレッドプロファイル情報を取得するためのシステム構成例を示す概略ブロック図である。
【図４】その処理制御例を示すフローチャートである。
【符号の説明】
２      ハードウェア、プロセッサ
【図１】
0003884237.tif 000002
【図２】
0003884237.tif 000003
【図３】
0003884237.tif 000004
【図４】
0003884237.tif 000005