(57)【特許請求の範囲】
【請求項１】
複数の処理装置と、それら処理装置がトレース処理の実行時にアクセスする一次記憶領域から構成されるノードを複数備え、それらノードがバスを介して接続されたシステムがそのシステム上で実行されるプログラムをトレースする方法において、
前記複数の処理装置のうちで、予め定められた処理装置が、一次記憶領域上のトレーサの格納先とトレース情報の出力先をトレース処理装置毎に対応付けたトレーサ格納先トレース情報出力先記憶領域を、自身のノードの一次記憶領域上に確保するステップと、
前記複数の処理装置が、自身のノードの一次記憶領域上に、トレース情報を出力する領域を確保するステップと、
前記複数の処理装置のうちで、トレースを実行するトレーサの格納元領域があるノードの処理装置を除く処理装置が、前記トレーサを格納する領域を自身のノードの一次記憶上に確保するステップと、
その確保した領域に、トレーサの格納元領域からトレーサをコピーするステップと、
前記複数の処理装置が、前記トレーサ格納先トレース情報出力先記憶領域に、自身の、トレース情報の出力先領域と、トレーサの格納先領域についての情報を書き込むステップと、
トレース対象とするプログラムのタスク制御ブロックの生成時に、前記トレーサ格納先トレース情報出力先記憶領域を基に、そのタスクを担当する処理装置が、自身の処理装置を識別する情報と、その自身の処理装置に対応する、前記トレーサの格納先および前記トレース情報の出力先を該タスク制御ブロックに書き込むステップと、
トレース対象とするプログラムの実行時に、前記担当する処理装置が、そのプログラムのタスク制御ブロックから、前記トレーサの格納先および前記トレース情報の出力先を取得するステップと、
前記担当する処理装置が、前記取得したトレーサの格納先のトレーサを実行するとともに、前記取得した出力先にトレース情報を出力するステップ、を備えることを特徴とする複数の処理装置を備えたシステム上で実行されるプログラムのトレース方法。
【請求項２】
前記複数の処理装置のうちで、予め定められた処理装置によって、ノードとそのノードが備える処理装置を対応付けたシステム構成情報記憶領域を自身のノードの一次記憶領域上に確保するステップと、
前記複数の処理装置によって、それぞれ自身の情報を前記システム構成情報記憶領域に書き込むステップをさらに備え、
前記トレースを実行するトレーサを格納する領域を自身のノードの一次記憶上に確保するステップを実行するに際して、自身が、トレーサの格納元領域があるノードに存在するかどうかを前記システム構成情報記憶領域確認を基に、確認することを特徴とする請求項１記載の複数の処理装置を備えたシステム上で実行されるプログラムのトレース方法。
【請求項３】
複数の処理装置と、それら処理装置がトレース処理の実行時にアクセスする一次記憶領域から構成されるノードを複数備え、それらノードがバスを介して接続されたシステムがそのシステム上で実行されるプログラムをトレースする方法において、
一次記憶領域上のトレーサの格納先とトレース情報の出力先を処理装置毎に対応付けたトレーサ格納先トレース情報出力先記憶領域を基に、前記プログラムを実行する処理装置が、そのプログラムに対応するタスク制御ブロックを生成するステップと、
前記タスクの移送が決定した場合に、前記タスクを担当していた移送元処理装置が、対応するタスク制御ブロックについて、担当の処理装置を移送先処理装置に書き換えるとともに、トレーサの格納先およびトレース情報の出力先についても、その移送先処理装置に対応するものに書き換えるステップ、を備えることを特徴とする複数の処理装置を備えたシステム上で実行されるプログラムのトレース方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の処理装置を備えたシステム上で実行されるプログラムのトレース方法、および、複数の処理装置を備えたシステムに関する。
【背景技術】
【０００２】
オペレーティング・システム（ＯＳ）自身の動作や、そのＯＳ上でのプログラムの動作をトレースする技術が知られている。例えば、Ｌｉｎｕｘの場合、Ｌｉｎｕｘカーネル内のイベントのトレーサとして、非特許文献１のＬＫＳＴ（Linux Kernel State Tracer）や、非特許文献２のＬＴＴ（Linux Trace Toolkit）がよく知られている。
【０００３】
また、一方で、ＳＭＰ（Symmetric Multiple Processor）システムや、ＮＵＭＡ（Non Uniform Memory Access）システムのような、複数のＣＰＵ（Central Processing Unit）を備えるシステムが知られている。
【０００４】
ＮＵＭＡシステムの場合、各ノード（ＣＰＵボード）上に、１以上のＣＰＵとメモリモジュールが配置されている。
従来のＮＵＭＡシステムでは、特定のノードのメモリモジュール内に、トレース情報を格納する領域が確保される。例えば、図１２に示すように、トレース処理を実行しているＣＰＵのノードが、トレース情報を格納する領域が確保されたメモリモジュールのノードと異なっている場合、ノード間でのメモリアクセスを行う必要があり、アクセスのオーバーヘッドが大きくなる。このため、そのノード間でのメモリアクセスが始まってから、ノード間のバスを使用する優先度の高い他の処理による割り込みが発生しても、その優先度の高い他の処理を待たせなければならない。
【０００５】
また、特許文献１には、複数のノードを持つＮＵＭＡシステムにおいて、コヒーレンスを検証する技術が開示されている。
【非特許文献１】http://sourceforge.jp/projects/lkst/
【非特許文献２】http://www.opersys.com/LTT/
【特許文献１】特開２００２−３３４０６７号公報  「複数ノード・システム内のコヒーレンスの検証方法、そのプログラムおよびデータ処理システム」
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明の課題は、オペレーティング・システムや、プログラムの動作をＮＵＭＡシステムにおいてトレースする場合に、ノード間のバスへの負荷を軽減させることを可能とした、ＮＵＭＡシステム上で実行されるプログラムのトレース方法、および、ＮＵＭＡシステムを提供することである。
【０００７】
本発明の別の課題は、オペレーティング・システムや、プログラムの動作をＮＵＭＡシステムにおいてトレースする場合に、そのタスクが移送された場合にも、ノード間のバスへの負荷を軽減させることを維持することを可能とした、ＮＵＭＡシステム上で実行されるプログラムのトレース方法、および、ＮＵＭＡシステムを提供することである。
【課題を解決するための手段】
【０００８】
本発明の第１態様のトレース方法は、複数の処理装置と、それら処理装置がトレース処理の実行時にアクセスする一次記憶領域から構成されるノードを複数備え、それらノードがバスを介して接続されたシステムがそのシステム上で実行されるプログラムをトレースする方法において、一次記憶領域上のトレーサの格納先とトレース情報の出力先を処理装置毎に対応付けたトレーサ格納先トレース情報出力先記憶領域を基に、前記プログラムを実行する処理装置が、そのプログラムに対応するタスク制御ブロックを生成するステップと、前記プログラムを実行する処理装置が、トレース処理の実行時に、そのタスク制御ブロックに指定されるトレース情報出力先領域にトレース情報を出力するように指定して、そのタスク制御ブロックに指定されるトレーサを実行するステップを備えることを特徴とする複数の処理装置を備えたシステム上で実行されるプログラムのトレース方法である。
【０００９】
ここで、一次記憶領域上のトレーサの格納先とトレース情報の出力先をトレース処理装置毎に対応付けたトレーサ格納先トレース情報出力先記憶領域を基に、タスク制御ブロックが生成される。よって、そのトレーサの格納先と、トレース情報の出力先を自身のノードのメモリモジュール上にそれぞれの処理装置が設定するようにするとともに、自身によるトレース処理の実行時には、そのタスク制御ブロックに指定されるトレース情報出力先領域にトレース情報を出力するように指定して、そのタスク制御ブロックに指定されるトレーサを実行するようにすれば、トレースの実行に伴うノード間でのアクセスが発生しなくなり、ノード間のバスへの負荷を軽減させることができる。
【００１０】
本発明の第２態様のトレース方法は、複数の処理装置と、それら処理装置がトレース処理の実行時にアクセスする一次記憶領域から構成されるノードを複数備え、それらノードがバスを介して接続されたシステムがそのシステム上で実行されるプログラムをトレースする方法において、一次記憶領域上のトレーサの格納先とトレース情報の出力先を処理装置毎に対応付けたトレーサ格納先トレース情報出力先記憶領域を基に、前記プログラムを実行する処理装置が、そのプログラムに対応するタスク制御ブロックを生成するステップと、前記プログラムに対応するタスクの移送が決定した場合に、前記タスクを担当していた移送元処理装置が、対応するタスク制御ブロックについて、担当の処理装置を移送先処理装置に書き換えるとともに、トレーサの格納先およびトレース情報の出力先についても、その移送先処理装置に対応するものに書き換えるステップ、を備えることを特徴とする複数の処理装置を備えたシステム上で実行されるプログラムのトレース方法である。
【００１１】
ここで、一次記憶領域上のトレーサの格納先とトレース情報の出力先をトレース処理装置毎に対応付けたトレーサ格納先トレース情報出力先記憶領域を基に、タスク制御ブロックが生成される。よって、そのトレーサの格納先と、トレース情報の出力先を自身のノードのメモリモジュール上にそれぞれの処理装置が設定するようにするとともに、そのプログラムに対応するタスクの移送が決定した場合に、そのタスクを担当していた移送元処理装置が、対応するタスク制御ブロックについて、担当の処理装置を移送先処理装置に書き換えるとともに、トレーサの格納先およびトレース情報の出力先についても、その移送先処理装置に対応するものに書き換えるようにすれば、そのタスクの移送後においても、トレースの実行に伴うノード間でのアクセスが発生しなくなり、ノード間のバスへの負荷を軽減させることを維持することが可能となる。
【００１２】
本発明の第３態様のＮＵＭＡシステムは、複数のトレース処理装置と、それら処理装置がトレース処理の実行時にアクセスする一次記憶領域から構成されるノードを複数備え、それらノードがバスを介して接続されたシステムにおいて、前記各ノードが備える一次記憶領域上には、トレース情報を出力する領域と、トレースを実行するトレーサを格納する領域が設けられ、前記複数のノードのうちの、予め定められたノードの一次記憶領域には、トレース処理装置毎に対応する一次記憶領域上のトレーサの格納先とトレース情報の出力先を対応付けたトレーサ格納先トレース情報出力先記憶領域がさらに設けられ、トレース対象とするプログラムのタスク制御ブロックの生成時に、前記トレーサ格納先トレース情報出力先記憶領域を基に、そのタスクを担当する処理装置によって、自身の処理装置を識別する情報と、その自身の処理装置に対応する、前記トレーサの格納先および前記トレース情報の出力先が該タスク制御ブロックに書き込まれ、トレース対象とするプログラムの実行時に、前記担当する処理装置によって、そのプログラムのタスク制御ブロックから、前記トレーサの格納先および前記トレース情報の出力先が取得され、前記担当する処理装置によって、前記取得されたトレーサの格納先からトレーサをフェッチされて実行されるとともに、前記取得された出力先にトレース情報が出力されることを特徴とする複数のトレース処理装置を備えたシステムである。
【００１３】
本発明の第４態様のＮＵＭＡシステムは、複数の処理装置と、それら処理装置がトレース処理の実行時にアクセスする一次記憶領域から構成されるノードを複数備え、それらノードがバスを介して接続されたシステムにおいて、前記各ノードが備える一次記憶領域上には、トレース情報を出力する領域と、トレースを実行するトレーサを格納する領域が設けられ、前記複数のノードのうちの、予め定められたノードの一次記憶領域には、処理装置毎に対応する一次記憶領域上のトレーサの格納先とトレース情報の出力先を対応付けたトレーサ格納先トレース情報出力先記憶領域がさらに設けられ、トレース対象とするプログラムのタスク制御ブロックの生成時に、前記トレーサ格納先トレース情報出力先記憶領域を基に、そのタスクを担当する処理装置によって、自身の処理装置を識別する情報と、その自身の処理装置に対応する、前記トレーサの格納先および前記トレース情報の出力先が該タスク制御ブロックに書き込まれ、タスクの移送が決定した場合に、前記タスクを担当していた移送元処理装置によって、対応するタスク制御ブロックについて、担当の処理装置を移送先処理装置に書き換えられるとともに、トレーサの格納先およびトレース情報の出力先についても、その移送先処理装置に対応するものに書き換えられることを特徴とする複数の処理装置を備えたシステムである。
【発明の効果】
【００１４】
本発明によれば、オペレーティング・システムや、プログラムの動作をＮＵＭＡシステムにおいてトレースする場合に、ノード間のバスへの負荷を軽減させることができる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の実施の形態を、図面を参照しながら詳細に説明する。
ＮＵＭＡシステムは、複数のノードを備えることができるシステムである。すなわち、ＮＵＭＡシステムは、１以上のノードによって構成される。それぞれのノードは、１以上のＣＰＵがメモリモジュールとともにボード上に搭載されて構成される。
【００１６】
図１は、本発明の一実施形態のＮＵＭＡシステムの構成を示す図である。
図１では、２つのＣＰＵがメモリモジュールとともにボード上に搭載されたノード１１及びノード１５がバス１９を介して接続されている。
【００１７】
すなわち、ノード１１は、ＣＰＵ１２、１３と、メモリモジュール１４により構成され、ノード１５は、ＣＰＵ１６、１７と、メモリモジュール１８により構成される。
ＮＵＭＡシステム上のいずれかのノード、例えば、ノード１１が後述のＢＯＯＴ  ＣＰＵが存在するノードとなる。このノード１１のメモリモジュール１４上には、例えば、タスク管理機構、そのタスク管理機構が生成したタスク制御ブロックのリスト、トレースを実行するプログラムであるトレーサ（コピー元のオリジナル）が存在する。
【００１８】
図２は、ＮＵＭＡシステムの初期化処理のフローチャートである。
図２において、まず、システムの電源がＯＮになったときに、ファームウェアによって、ＮＵＭＡシステムを構成する複数のＣＰＵのうちの１つがブート処理を行うＣＰＵとして決定される。このＣＰＵを以下ではブートＣＰＵ（ＢＯＯＴ  ＣＰＵ）と呼ぶ。
【００１９】
ＢＯＯＴ  ＣＰＵによって、ステップＳ１０１で、アーキテクチャに依存する部分の初期化が行われる。このステップでは、システムのメモリ容量、システムの各ＣＰＵのメーカ名、バージョン番号を基に、使用可能な機能が獲得される。また、ＢＯＯＴ  ＣＰＵがファームウェアに問い合わせることによって、メモリレイアウトが調べられる。
【００２０】
続く、ステップＳ１０２では、ＢＯＯＴ  ＣＰＵによって、獲得した機能を使用するための情報が設定される。
そして、ステップＳ１０３で、ＣＰＵをプロセス（ジョブ、タスクともいう）に割り当てる（プロセスを管理する）スケジューラがＢＯＯＴ  ＣＰＵによって初期化される。すなわち、プロセスを管理するのに必要なデータ構造が初期化される。
【００２１】
ステップＳ１０４では、例外（トラップ等）に対応するメモリの位置がＢＯＯＴ  ＣＰＵによって設定される。
ステップＳ１０５では、デバイスが発行する割り込みに対するメモリ上の位置を管理するテーブルの初期化がＢＯＯＴ  ＣＰＵによって実行される。
【００２２】
ステップＳ１０６では、ＢＯＯＴ  ＣＰＵによって、プロセスにメモリをページ単位で割り当てるページ管理情報が初期化される。
ステップＳ１０７では、ＮＵＭＡ用管理テーブルの初期化が行われる。このステップでは、ＢＯＯＴ  ＣＰＵによって、ＮＵＭＡ用管理テーブルの領域が自身の属するノードのメモリ上に確保されるとともに、ＢＯＯＴ  ＣＰＵ、および、システムが備える他のＣＰＵによって、自身の情報がそのＮＵＭＡ用管理テーブルに書き込まれる。
【００２３】
なお、図３に示すように、ＮＵＭＡ用管理テーブルでは、ノードＩＤ、そのノードＩＤを持つノードに含まれるＣＰＵのＩＤ（ＣＰＵ＿ＩＤ）、そのノードＩＤを持つノードのメモリの開始アドレスと終了アドレスの各項目が、ノード毎に一定の順番（例えば、ノードＩＤの昇順）に並んでいる。
【００２４】
ステップＳ１０８では、システムのそれぞれのノードのメモリ上での、トレースを実行するプログラム（トレーサ）の記憶領域と、そのトレーサが出力するトレース情報の出力先領域（トレース情報記憶領域）をＣＰＵ毎に対応付けて記憶する記憶領域（トレーサ格納先トレース情報出力先記憶領域）が、ＢＯＯＴ  ＣＰＵによって、そのＢＯＯＴ  ＣＰＵが存在するノードのメモリモジュール上に確保される。
【００２５】
そして、ステップＳ１０９において、システムのそれぞれのＣＰＵ（ＢＯＯＴ  ＣＰＵも含む）によって、トレーサ用の領域の初期化が行なわれる。
図４は、図２のステップＳ１０９の処理をより詳細に示すフローチャートである。
【００２６】
図４において、まず、ステップＳ２０１で、それぞれのノード中の１以上のＣＰＵのうちの予め定められたＣＰＵによって、まず、自身のノードの一次記憶領域上に、トレース情報を出力する領域が確保される。
【００２７】
続く、ステップＳ２０２では、上記それぞれのノード中の予め定められたＣＰＵによって、自身のＣＰＵ＿ＩＤが取得される。そして、ステップＳ２０３で、その予め定められたＣＰＵによって、図３のＮＵＭＡ用管理テーブルからＢＯＯＴ  ＣＰＵがあるノードについての情報が取得される。例えば、ＢＯＯＴ  ＣＰＵがあるノードのノードＩＤが「０」であることは（その予め定められたＣＰＵを含む）すべてのＣＰＵに既知であり、その予め定められたＣＰＵは、ノードＩＤが「０」であるノードの情報をＮＵＭＡ用管理テーブルから取得する。
【００２８】
ステップＳ２０４では、その予め定められたＣＰＵによって、ステップＳ２０３で取得したノードの情報中のＣＰＵ＿ＩＤのリスト（そのノードに含まれるＣＰＵのリスト）が取得される。
【００２９】
そして、ステップＳ２０５で、その予め定められたＣＰＵによって、ステップＳ２０４で取得したＣＰＵ＿ＩＤのリスト中に、ステップＳ２０２で取得した自身のＣＰＵ＿ＩＤがあるかが判定される。
【００３０】
なお、本実施形態では、ＢＯＯＴ  ＣＰＵのあるノードのメモリモジュール内にトレーサ・プログラムのオリジナルが存在している。したがって、ステップＳ２０５において、ステップＳ２０４で取得したＣＰＵ＿ＩＤのリスト中に、ステップＳ２０２で取得した自身のＣＰＵ＿ＩＤがないと判定された場合は、ＢＯＯＴ  ＣＰＵのあるノードから自身のノードにトレーサ・プログラムをコピーする必要がある。すなわち、この場合、ステップＳ２０７において、ＢＯＯＴ  ＣＰＵのあるノード以外のノード存在する、１以上のＣＰＵのうちの予め定められたＣＰＵによって、自身のノードのメモリモジュール内に、トレーサ・プログラムを格納するための領域が確保される。
【００３１】
そして、ステップＳ２０８で、ＢＯＯＴ  ＣＰＵのあるノード以外のノードに存在する、１以上のＣＰＵのうちの予め定められたＣＰＵによって、そのＢＯＯＴ  ＣＰＵのあるノードのメモリモジュールからトレーサ・プログラムがコピーされる。
【００３２】
ステップＳ２０９では、ＢＯＯＴ  ＣＰＵのあるノード以外のノードに存在する、それぞれのＣＰＵによって、ステップＳ２０７で取得した領域、すなわち、トレーサ・プログラムを格納する領域の先頭アドレスが上述のトレーサ格納先トレース情報出力先記憶領域に書き込まれ、ステップＳ２１０に進む。
【００３３】
一方、ステップＳ２０５において、ステップＳ２０４で取得したＣＰＵ＿ＩＤのリスト中に、ステップＳ２０２で取得した自身のＣＰＵ＿ＩＤがあると判定された場合は、自身のノードのメモリモジュール内にトレーサ・プログラムがすでに格納済みであるので、ステップＳ２０６において、ＢＯＯＴ  ＣＰＵのあるノードに存在する、（それぞれの）ＣＰＵによって、自身のノード上のトレーサ・プログラムを格納した領域の先頭アドレスがトレーサ格納先トレース情報出力先記憶領域に書き込まれ、ステップＳ２１０に進む。
【００３４】
ステップＳ２１０では、それぞれのＣＰＵによって、ステップＳ２０１で確保した、自身の属するノードのメモリモジュール内のトレース情報の出力先領域の先頭アドレスが、トレーサ格納先トレース情報出力先記憶領域に書き込まれる。
【００３５】
図５は、トレーサ格納先トレース情報出力先記憶領域のデータ構造を示す図である。
図５に示すように、トレーサ格納先トレース情報出力先記憶領域では、ＣＰＵ＿ＩＤ（ＣＰＵ番号）、そのＣＰＵ＿ＩＤのＣＰＵが属するノードのノードＩＤ（ノード番号）、そのノードＩＤを持つノードのメモリモジュール上に確保されたトレース情報を格納する領域へのポインタ、そのノードＩＤを持つノードのメモリモジュール上に確保されたトレース処理を実行するトレーサを格納する領域へのポインタの各項目が、ＣＰＵ＿ＩＤ毎に一定の順番（例えば、ＣＰＵ＿ＩＤの昇順）に並んでいる。
【００３６】
以上で、図２のステップＳ１０９まで説明したことになる。
再び図２の処理化処理の説明に戻る。
図２のステップＳ１１０では、ＢＯＯＴ ＣＰＵによって、各種デバイスドライバの初期化が行われる。続く、ステップＳ１１１では、ＢＯＯＴ ＣＰＵによって、アイドルタスクが生成され、ステップＳ１１２では、ＢＯＯＴ ＣＰＵによって、デフォルトで動作するプロセスが生成され、ステップＳ１１３では、ＢＯＯＴ ＣＰＵによって、タスクスイッチ、すなわち、スケジューラが実行される。
【００３７】
続いて、上記のようにして、初期化されたＮＵＭＡシステムについて、そのシステム自身（ＯＳ自身）または、そのＯＳ上で動作するプログラムに対して、トレース処理を実行する場合を説明する。
【００３８】
図６は、本実施形態のタスク管理機構（タスク管理部）の構成を示した図である。
図６に示すように、タスク管理部２１は、トレーサ格納先トレース情報出力先記憶領域を基に、タスク（プロセス、ジョブともいう）を管理するための情報であるタスク制御ブロックを生成するタスク制御ブロック生成部２２、タスク制御ブロックの情報を、例えば、そのタスクを担当するＣＰＵの移送時等に変更するタスク制御ブロック情報変更部２３、ＣＰＵをタスクに割り当てるスケジューラ２４を備える。
【００３９】
図７は、タスク制御ブロックのデータ構造を示す図である。
図７に示すように、タスク制御ブロックには、そのタスクを担当するＣＰＵのＣＰＵ＿ＩＤ（ＣＰＵ番号）、そのＣＰＵ＿ＩＤのＣＰＵが属するノードのノードＩＤ（ノード番号）、そのノードＩＤを持つノードのメモリモジュール上に確保されたトレース情報を格納する領域へのポインタ、そのノードＩＤを持つノードのメモリモジュール上に確保されたトレース処理を実行するトレーサを格納する領域へのポインタの各項目が、ＣＰＵ＿ＩＤ毎に一定の順番（例えば、ＣＰＵ＿ＩＤの昇順）に並んでいる。
【００４０】
図８は、タスク制御ブロック生成処理のフローチャートである。このフローチャートは、図６のスケジューラ２４によってタスク制御ブロック生成処理の実行を割り当てられたＣＰＵ（このＣＰＵは、通常、プログラムの実行を担当するＣＰＵと一致する）が、そのタスク制御ブロック生成処理を行うプログラムが存在するノード（通常、ＢＯＯＴ  ＣＰＵが存在するノード）のメモリモジュールからそのプログラムをフェッチしデコードすることで実行される。
【００４１】
すなわち、このＣＰＵによって、図６のステップＳ３０１で、例えば、ＢＯＯＴ  ＣＰＵが存在するノードのメモリモジュール上に、そのＣＰＵが実行するプログラムのタスク制御ブロック用の領域が確保される。
【００４２】
そして、ステップＳ３０２において、このＣＰＵによって、確保されたタスク制御ブロックのＣＰＵ＿ＩＤの項目に、トレース対象のプログラムを実行するＣＰＵが指定される。
【００４３】
ステップＳ３０３では、このＣＰＵによって、確保されたタスク制御ブロックのトレーサ・プログラムの格納先の項目に、プログラムを実行しているＣＰＵが存在するノードのメモリモジュール上のトレーサ・プログラムの先頭アドレスが指定される。
【００４４】
ステップＳ３０４では、このＣＰＵによって、確保されたタスク制御ブロックのトレース情報の出力先の項目に、プログラムを実行しているＣＰＵが存在するノードのメモリモジュール上のトレース情報記憶領域の先頭アドレスが指定される。
【００４５】
図９は、ＯＳ上で動作するアプリケーション・プログラムに対して行われるトレース処理を説明する図である。
図９では、例えば、アプリケーション・プログラムのそれぞれのサブルーチンに入った場合と、出た場合に、そのことを示すマークをトレース情報として出力する場合が想定されている。すなわち、図に示すように、アプリケーション・プログラムが実行中にサブルーチン「Ｓｕｂ１」に入った場合、“Ｓｕｂ１”という情報をトレース情報として出力する指示が、（１）で、アプリケーション・プログラムからＯＳになされる。
【００４６】
ＯＳは、その指示を受けて、（２）で、トレーサαに対して、トレース情報を書き込む領域のポインタＡと、その書き込み先に書き込む情報“Ｓｕｂ１”を渡す。トレーサは、（３）で、渡された情報“Ｓｕｂ１”を、指定されたポインタＡの位置に書き込む。
【００４７】
図１０は、ＯＳ自身に対して、または、ＯＳ上で動作するプログラムに対して行われるトレース処理のフローチャートである。この処理は、プログラムの実行およびそのプログラムのトレースを担当するＣＰＵによって実行される。
【００４８】
図１０において、まず、その担当のＣＰＵによって、ステップＳ４０１で、その実行しているプログラムのタスク制御ブロックから、トレーサ・プログラムのアドレスが取得される。なお、図６のタスク制御ブロック生成部２２がタスク制御ブロックを生成する方法には、様々な方法がある。例えば、タスク制御ブロック生成部２２が、タスク制御ブロックをＢＯＯＴ  ＣＰＵがあるノードのメモリモジュール内に生成する場合、そのメモリモジュール内には、タスク制御ブロックのリストが生成されることになる。このリストを検索することで、自身が実行しているプログラムに対するタスク制御ブロックを取得できる。
【００４９】
続く、ステップＳ４０２では、担当のＣＰＵによって、その実行しているプログラムのタスク制御ブロックから、トレース情報記憶領域のアドレスが取得される。
そして、ステップＳ４０３において、担当のＣＰＵによって、ステップＳ４０２で取得したトレース情報記憶領域にトレース情報を出力するように指定して、ステップＳ４０１で取得したアドレス上のトレーサ・プログラムを実行させる。
【００５０】
次に、例えば、あるタスクが、ＩＯ待ち、時間待ち、メモリの空き待ち等から復帰した場合などに、スケジューラの判断によって、そのタスクの移送が決定された場合の処理について説明する。
【００５１】
図１１は、スケジューラによってタスクの移送が決定された場合に行われる処理のフローチャートである。このフローチャートは、移送の決定前にそのタスクを担当していたＣＰＵ（移送元ＣＰＵ）および移送先ＣＰＵによって実行される。
【００５２】
図１１において、まず、ステップＳ５０１で、ＯＳのスケジューラから移送元ＣＰＵに対して移送先ＣＰＵが通知される。
この通知を受けて、移送元ＣＰＵによって、ステップＳ５０２で、移送されるタスクに対応するタスク制御ブロックの、そのタスクを担当するＣＰＵの項目が、移送先ＣＰＵのＣＰＵ＿ＩＤで上書きされる。
【００５３】
そして、ステップＳ５０３において、移送元ＣＰＵによって、ＢＯＯＴ  ＣＰＵが存在するノードのメモリモジュール上に存在する、トレーサ格納先トレース情報出力先記憶領域から、移送先ＣＰＵのトレーサ・プログラム記憶領域のアドレスが取得される。
【００５４】
ステップＳ５０４では、移送元ＣＰＵによって、ステップＳ５０３で取得されたトレーサ・プログラム記憶領域のアドレスが、移送されるタスクに対応するタスク制御ブロックの、トレーサを格納する領域へのポインタの項目に上書きされる。
【００５５】
そして、ステップＳ５０５において、移送元ＣＰＵによって、上記トレーサ格納先トレース情報出力先記憶領域から、移送先ＣＰＵのトレース情報記憶領域のアドレスが取得される。
【００５６】
ステップＳ５０６では、移送元ＣＰＵによって、ステップＳ５０５で取得されたトレース情報記憶領域のアドレスが、移送されるタスクに対応するタスク制御ブロックの、トレース情報を格納する領域へのポインタの項目に上書きされる。
【００５７】
そして、ステップＳ５０６の処理を完了した移送元ＣＰＵが、移送先でタスクを再開するための準備が済んだことを示すトラップを移送先ＣＰＵに発行する。
移送先ＣＰＵは、このトラップを受け取って、ステップＳ５０７で、そのタスクを再開する。
【００５８】
本発明は下記構成でもよい。
（付記１）  複数の処理装置と、それら処理装置がトレース処理の実行時にアクセスする一次記憶領域から構成されるノードを複数備え、それらノードがバスを介して接続されたシステムがそのシステム上で実行されるプログラムをトレースする方法において、
一次記憶領域上のトレーサの格納先とトレース情報の出力先を処理装置毎に対応付けたトレーサ格納先トレース情報出力先記憶領域を基に、前記プログラムを実行する処理装置が、そのプログラムに対応するタスク制御ブロックを生成するステップと、
前記プログラムを実行する処理装置が、トレース処理の実行時に、そのタスク制御ブロックに指定されるトレース情報出力先領域にトレース情報を出力するように指定して、そのタスク制御ブロックに指定されるトレーサを実行するステップを備えることを特徴とする複数の処理装置を備えたシステム上で実行されるプログラムのトレース方法。
（付記２）  前記各処理装置は、前記トレーサ格納先トレース情報出力先記憶領域に、自身のトレーサの格納先とトレース情報の出力先を書き込むに際して、自身が属するノードの一次記憶領域上に存在する、トレーサの格納先およびトレース情報の出力先を指定することを特徴とする付記１記載の複数の処理装置を備えたシステム上で実行されるプログラムのトレース方法。
（付記３）  複数の処理装置と、それら処理装置がトレース処理の実行時にアクセスする一次記憶領域から構成されるノードを複数備え、それらノードがバスを介して接続されたシステムがそのシステム上で実行されるプログラムをトレースする方法において、
前記複数の処理装置のうちで、予め定められた処理装置が、一次記憶領域上のトレーサの格納先とトレース情報の出力先をトレース処理装置毎に対応付けたトレーサ格納先トレース情報出力先記憶領域を、自身のノードの一次記憶領域上に確保するステップと、
前記複数の処理装置が、自身のノードの一次記憶領域上に、トレース情報を出力する領域を確保するステップと、
前記複数の処理装置のうちで、トレースを実行するトレーサの格納元領域があるノードの処理装置を除く処理装置が、前記トレーサを格納する領域を自身のノードの一次記憶上に確保するステップと、
その確保した領域に、トレーサの格納元領域からトレーサをコピーするステップと、
前記複数の処理装置が、前記トレーサ格納先トレース情報出力先記憶領域に、自身の、トレース情報の出力先領域と、トレーサの格納先領域についての情報を書き込むステップと、
トレース対象とするプログラムのタスク制御ブロックの生成時に、前記トレーサ格納先トレース情報出力先記憶領域を基に、そのタスクを担当する処理装置が、自身の処理装置を識別する情報と、その自身の処理装置に対応する、前記トレーサの格納先および前記トレース情報の出力先を該タスク制御ブロックに書き込むステップと、
トレース対象とするプログラムの実行時に、前記担当する処理装置が、そのプログラムのタスク制御ブロックから、前記トレーサの格納先および前記トレース情報の出力先を取得するステップと、
前記担当する処理装置が、前記取得したトレーサの格納先のトレーサを実行するとともに、前記取得した出力先にトレース情報を出力するステップ、を備えることを特徴とする複数の処理装置を備えたシステム上で実行されるプログラムのトレース方法。
（付記４）  前記複数の処理装置のうちで、予め定められた処理装置によって、ノードとそのノードが備える処理装置を対応付けたシステム構成情報記憶領域を自身のノードの一次記憶領域上に確保するステップと、
前記複数の処理装置によって、それぞれ自身の情報を前記システム構成情報記憶領域に書き込むステップをさらに備え、
前記トレースを実行するトレーサを格納する領域を自身のノードの一次記憶上に確保するステップを実行するに際して、自身が、トレーサの格納元領域があるノードに存在するかどうかを前記システム構成情報記憶領域確認を基に、確認することを特徴とする付記３記載の複数の処理装置を備えたシステム上で実行されるプログラムのトレース方法。
（付記５）  複数の処理装置と、それら処理装置がトレース処理の実行時にアクセスする一次記憶領域から構成されるノードを複数備え、それらノードがバスを介して接続されたシステムがそのシステム上で実行されるプログラムをトレースする方法において、
一次記憶領域上のトレーサの格納先とトレース情報の出力先を処理装置毎に対応付けたトレーサ格納先トレース情報出力先記憶領域を基に、前記プログラムを実行する処理装置が、そのプログラムに対応するタスク制御ブロックを生成するステップと、
前記タスクの移送が決定した場合に、前記タスクを担当していた移送元処理装置が、対応するタスク制御ブロックについて、担当の処理装置を移送先処理装置に書き換えるとともに、トレーサの格納先およびトレース情報の出力先についても、その移送先処理装置に対応するものに書き換えるステップ、を備えることを特徴とする複数の処理装置を備えたシステム上で実行されるプログラムのトレース方法。
（付記６）  前記各処理装置は、前記トレーサ格納先トレース情報出力先記憶領域に、自身のトレーサの格納先とトレース情報の出力先を書き込むに際して、自身が属するノードの一次記憶領域上に存在する、トレーサの格納先およびトレース情報の出力先を指定することを特徴とする付記５記載の複数の処理装置を備えたシステム上で実行されるプログラムのトレース方法。
（付記７）  複数の処理装置と、それら処理装置がトレース処理の実行時にアクセスする一次記憶領域から構成されるノードを複数備え、それらノードがバスを介して接続されたシステムがそのシステム上で実行されるプログラムをトレースする方法において、
前記複数の処理装置のうちで、予め定められた処理装置が、一次記憶領域上のトレーサの格納先とトレース情報の出力先を処理装置毎に対応付けたトレーサ格納先トレース情報出力先記憶領域を、自身のノードの一次記憶領域上に確保するステップと、
前記複数の処理装置が、自身のノードの一次記憶領域上に、トレース情報を出力する領域を確保するステップと、
前記複数の処理装置のうちで、トレースを実行するトレーサの格納元領域があるノードの処理装置を除く処理装置が、前記トレーサを格納する領域を自身のノードの一次記憶上に確保するステップと、
その確保した領域に、トレーサの格納元領域からトレーサをコピーするステップと、
前記複数の処理装置が、前記トレーサ格納先トレース情報出力先記憶領域に、自身の、トレース情報の出力先領域と、トレーサの格納先領域についての情報を書き込むステップと、
トレース対象とするプログラムのタスク制御ブロックの生成時に、前記トレーサ格納先トレース情報出力先記憶領域を基に、そのタスクを担当する処理装置が、自身の処理装置を識別する情報と、その自身の処理装置に対応する、前記トレーサの格納先および前記トレース情報の出力先を該タスク制御ブロックに書き込むステップと、
前記タスクの移送が決定した場合に、前記タスクを担当していた移送元処理装置が、対応するタスク制御ブロックについて、担当の処理装置を移送先処理装置に書き換えるとともに、トレーサの格納先およびトレース情報の出力先についても、その移送先処理装置に対応するものに書き換えるステップ、を備えることを特徴とする複数の処理装置を備えたシステム上で実行されるプログラムのトレース方法。
（付記８）  複数の処理装置と、それら処理装置がトレース処理の実行時にアクセスする一次記憶領域から構成されるノードを複数備え、それらノードがバスを介して接続されたシステムにおいて、
前記各ノードが備える一次記憶領域上には、トレース情報を出力する領域と、トレースを実行するトレーサを格納する領域が設けられ、
前記複数のノードのうちの、予め定められたノードの一次記憶領域には、処理装置毎に対応する一次記憶領域上のトレーサの格納先とトレース情報の出力先を対応付けたトレーサ格納先トレース情報出力先記憶領域がさらに設けられ、
トレース対象とするプログラムのタスク制御ブロックの生成時に、前記トレーサ格納先トレース情報出力先記憶領域を基に、そのタスクを担当する処理装置によって、自身の処理装置を識別する情報と、その自身の処理装置に対応する、前記トレーサの格納先および前記トレース情報の出力先が該タスク制御ブロックに書き込まれ、
トレース対象とするプログラムの実行時に、前記担当する処理装置によって、そのプログラムのタスク制御ブロックから、前記トレーサの格納先および前記トレース情報の出力先が取得され、
前記担当する処理装置によって、前記取得されたトレーサの格納先からトレーサをフェッチされて実行されるとともに、前記取得された出力先にトレース情報が出力されることを特徴とする複数の処理装置を備えたシステム。
（付記９）  複数の処理装置と、それら処理装置がトレース処理の実行時にアクセスする一次記憶領域から構成されるノードを複数備え、それらノードがバスを介して接続されたシステムにおいて、
前記各ノードが備える一次記憶領域上には、トレース情報を出力する領域と、トレースを実行するトレーサを格納する領域が設けられ、
前記複数のノードのうちの、予め定められたノードの一次記憶領域には、処理装置毎に対応する一次記憶領域上のトレーサの格納先とトレース情報の出力先を対応付けたトレーサ格納先トレース情報出力先記憶領域がさらに設けられ、
トレース対象とするプログラムのタスク制御ブロックの生成時に、前記トレーサ格納先トレース情報出力先記憶領域を基に、そのタスクを担当する処理装置によって、自身の処理装置を識別する情報と、その自身の処理装置に対応する、前記トレーサの格納先および前記トレース情報の出力先が該タスク制御ブロックに書き込まれ、
タスクの移送が決定した場合に、前記タスクを担当していた移送元処理装置によって、対応するタスク制御ブロックについて、担当の処理装置を移送先処理装置に書き換えられるとともに、トレーサの格納先およびトレース情報の出力先についても、その移送先処理装置に対応するものに書き換えられることを特徴とする複数の処理装置を備えたシステム。
【図面の簡単な説明】
【００５９】
【図１】本発明の一実施形態のＮＵＭＡシステムの構成を示す図である。
【図２】ＮＵＭＡシステムの初期化処理のフローチャートである。
【図３】ＮＵＭＡ用管理テーブルのデータ構造を示す図である。
【図４】図２のステップＳ１０９の処理をより詳細に示すフローチャートである。
【図５】トレーサ格納先トレース情報出力先記憶領域のデータ構造を示す図である。
【図６】本実施形態のタスク管理機構（タスク管理部）の構成を示した図である。
【図７】タスク制御ブロックのデータ構造を示す図である。
【図８】タスク制御ブロック生成処理のフローチャートである。
【図９】ＯＳ上で動作するアプリケーション・プログラムに対して行われるトレース処理を説明する図である。
【図１０】ＯＳ自身に対して、または、ＯＳ上で動作するプログラムに対して行われるトレース処理のフローチャートである。
【図１１】移送処理の決定に対応して行われる処理のフローチャートである。
【図１２】従来のＮＵＭＡシステムの問題点を説明する図である。
【符号の説明】
【００６０】
１１、１５  ノード
１２、１３、１６、１７  ＣＰＵ
１４、１８  メモリモジュール
１９  バス
２１  タスク管理機構（タスク管理部）
２２  タスク制御ブロック生成部
２３  タスク制御ブロック情報変更部
２４  スケジューラ
【図１】
0004594889.tif 000002
【図２】
0004594889.tif 000003
【図３】
0004594889.tif 000004
【図４】
0004594889.tif 000005
【図５】
0004594889.tif 000006
【図６】
0004594889.tif 000007
【図７】
0004594889.tif 000008
【図８】
0004594889.tif 000009
【図９】
0004594889.tif 000010
【図１０】
0004594889.tif 000011
【図１１】
0004594889.tif 000012
【図１２】
0004594889.tif 000013