(57)【要約】【課題】プロセッサのローカルメモリ内のプログラムモジュールを特定する。【解決手段】デバッグ装置１００は、各プロセッサが独立して共有メモリにアクセスしプログラムモジュールを自身のローカルメモリにロードして動作するように構成されたマルチプロセッサシステムに接続される。プログラムモジュールを構成するコードには予めシステム内で一意に定まる識別子が含められている。ＧＵＩＤ検出部１１８は、検査対象プロセッサのローカルメモリのメモリイメージから識別子がフィールドに記述されている識別情報付加命令を選択し、識別子を取り出す。コード検索部１２０は、取り出された識別子に対応するプログラムモジュールのコードをコード保持部１１４から選択する。メモリレイアウト出力部１２２は、ローカルメモリ内におけるモジュールのメモリアドレスと対応させて、コード検索部１２０により選択されたコードを出力する。【選択図】図１０
2008065707.tif 000002
【特許請求の範囲】
【請求項１】
各プロセッサが独立して共有メモリにアクセスし該共有メモリに格納されているプログラムモジュールを自身のローカルメモリにロードして動作するように構成されたマルチプロセッサシステムに接続される検査装置であって、
プログラムモジュールを構成するコードには予めマルチプロセッサシステム内で一意に定まる識別子が含められており、
前記共有メモリ内のすべてのプログラムモジュールのコードを保持するコード保持部と、
検査対象プロセッサのローカルメモリのメモリイメージを複製するローカルメモリ複製部と、
前記メモリイメージから前記識別子がフィールドに記述されている識別情報付加命令を選択し、前記識別子を取り出す識別子検出部と、
前記識別子検出部によって取り出された識別子に対応するプログラムモジュールのコードを前記コード保持部から選択するコード検索部と、
前記検査対象プロセッサのローカルメモリ内におけるプログラムモジュールのメモリアドレスと対応させて、前記コード検索部により選択されたコードを出力するメモリレイアウト出力部と、
を備えることを特徴とする検査装置。
【請求項２】
前記識別情報付加命令は、当該命令を実行した後のプロセッサの動作に影響を及ぼさない命令であることを特徴とする請求項１に記載の検査装置。
【請求項３】
前記識別情報付加命令は定数生成命令であることを特徴とする請求項２に記載の検査装置。
【請求項４】
前記識別情報付加命令は分岐命令であることを特徴とする請求項２に記載の検査装置。
【請求項５】
前記識別情報付加命令はＮＯＰ命令であることを特徴とする請求項２に記載の検査装置。
【請求項６】
前記識別子は複数の前記識別情報付加命令のフィールドに分割されて記述されることを特徴とする請求項１ないし５のいずれかに記載の検査装置。
【請求項７】
前記識別情報付加命令のローカルメモリ内でのメモリアドレスが所定のバイト単位でアラインされていることを特徴とする請求項１ないし６のいずれかに記載の検査装置。
【請求項８】
前記識別情報付加命令のフィールドに、前記識別子の代わりにプログラムモジュールを構成するコードから算出される認証値が記述されることを特徴とする請求項１ないし７のいずれかに記載の検査装置。
【請求項９】
各プロセッサが独立して共有メモリにアクセスし該共有メモリに格納されているプログラムモジュールを自身のローカルメモリにロードして動作するように構成されたマルチプロセッサシステムにおいて、複数の前記プログラムモジュールから構成されるプログラムであって、
プログラムモジュールを構成するコードに対して予めマルチプロセッサシステム内で一意に定まる識別子が付与されており、
前記コードに含まれる命令のうちの少なくとも一部は、前記識別子がフィールドに記述されている識別情報付加命令となっており、
前記ローカルメモリ内のプログラムモジュールのコードから前記識別子が検出されることで該ローカルメモリ内でのプログラムモジュールの配置が特定されることを特徴とするプログラム。
【請求項１０】
各プロセッサが独立して共有メモリにアクセスし該共有メモリに格納されているプログラムモジュールを自身のローカルメモリにロードして動作するように構成されたマルチプロセッサシステムに接続されるプログラム改ざん検出装置であって、
プログラムモジュールを構成するコードには、予めコードにしたがって計算される認証値が含められており、
検査対象のプロセッサのローカルメモリのメモリイメージを複製するローカルメモリ複製部と、
前記メモリイメージ内のプログラムモジュールのコードから前記認証値がフィールドに記述されている認証情報付加命令を選択し、前記認証値を取り出す認証値検出部と、
前記メモリイメージ内のプログラムモジュールのコードにしたがって認証値を再計算する認証値再計算部と、
前記認証値検出部によって取り出された認証値と前記認証値再計算部によって計算された認証値とを比較し、プログラムモジュールのコードが改ざんされたか否かを判定する改ざん判定部と、
を備えることを特徴とするプログラム改ざん検出装置。
【請求項１１】
各プロセッサが独立して共有メモリにアクセスし該共有メモリに格納されているプログラムモジュールを自身のローカルメモリにロードして動作するように構成されたマルチプロセッサシステムにおいて、
プログラムモジュールを構成するコードに対して予めマルチプロセッサシステム内で一意に定まる識別子を付与しておき、
前記コードに含まれる命令のうちの少なくとも一部を前記識別子がフィールドに記述されている識別情報付加命令としておき、
前記ローカルメモリ内のプログラムモジュールのコードから前記識別子を検出することで該ローカルメモリ内でのプログラムモジュールの配置を特定することを特徴とするメモリレイアウト特定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステム内の任意のプロセッサのローカルメモリにロードされるプログラムコードに関する情報を取得する技術に関する。
【背景技術】
【０００２】
近年のコンピュータグラフィックス技術の発達に伴い、大型計算機や、パーソナルコンピュータ、ゲーム機器などの情報処理装置から出力される画像データは、ますます複雑化、高度化している。これらの情報処理装置において高性能な演算処理を実現するためには、メインプロセッサをマルチプロセッサで構成することが有効である。マルチプロセッサでは、複数のタスクを各プロセッサに割り当て並列処理を実行して演算速度を高める。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
マルチプロセッサシステムでは、各プロセッサが管理プロセッサによる制御を受けずに独立して命令やデータを処理することがある。このような構成では、デバッグ処理やプログラムの改ざん検出のために、マルチプロセッサシステム内の任意のプロセッサのローカルメモリにロードされるプログラムコードに関する情報が必要になる場合がある。
【０００４】
本発明はこうした課題に鑑みてなされたものであり、その目的は、マルチプロセッサシステム内の任意のプロセッサのローカルメモリにロードされるプログラムコードに関する情報を取得する技術を提供することにある。
【課題を解決するための手段】
【０００５】
本発明のある態様は、各プロセッサが独立して共有メモリにアクセスし該共有メモリに格納されているプログラムモジュールを自身のローカルメモリにロードして動作するように構成されたマルチプロセッサシステムに接続される検査装置である。プログラムモジュールを構成するコードには予めマルチプロセッサシステム内で一意に定まる識別子が含められている。検査装置は、共有メモリ内のすべてのプログラムモジュールのコードを保持するコード保持部と、検査対象プロセッサのローカルメモリのメモリイメージを複製するローカルメモリ複製部と、メモリイメージから識別子がフィールドに記述されている識別情報付加命令を選択し、識別子を取り出す識別子検出部と、識別子検出部によって取り出された識別子に対応するプログラムモジュールのコードをコード保持部から選択するコード検索部と、検査対象プロセッサのローカルメモリ内におけるプログラムモジュールのメモリアドレスと対応させて、コード検索部により選択されたコードを出力するメモリレイアウト出力部と、を備える。
【０００６】
ここで、「プログラムモジュール」とは、プログラムを構成するタスクまたはジョブのことをいう。
この態様によると、マルチプロセッサシステム内の任意のプロセッサのローカルメモリにロードされるプログラムモジュールを構成するコードに、プログラムモジュールを特定するための識別子を有する命令が含まれている。この命令を検出することによって、任意のプロセッサのローカルメモリ内のメモリレイアウトを取得することができる。
【０００７】
識別情報付加命令は、当該命令を実行した後のプロセッサの動作に影響を及ぼさない命令であることが好ましい。識別情報付加命令には、例えば、定数生成命令、分岐命令、ＮＯＰ命令が含まれる。
【０００８】
本発明の別の態様は、各プロセッサが独立して共有メモリにアクセスし該共有メモリに格納されているプログラムモジュールを自身のローカルメモリにロードして動作するように構成されたマルチプロセッサシステムに接続されるプログラム改ざん検出装置である。プログラムモジュールを構成するコードには、予めコードにしたがって計算される認証値が含められている。プログラム改ざん検出装置は、検査対象のプロセッサのローカルメモリのメモリイメージを複製するローカルメモリ複製部と、メモリイメージ内のプログラムモジュールのコードから認証値がフィールドに記述されている認証情報付加命令を選択し、認証値を取り出す認証値検出部と、メモリイメージ内のプログラムモジュールのコードにしたがって認証値を再計算する認証値再計算部と、認証値検出部によって取り出された認証値と認証値再計算部によって計算された認証値とを比較し、プログラムモジュールのコードが改ざんされたか否かを判定する改ざん判定部と、を備える。
【０００９】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、記録媒体、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１０】
本発明によれば、マルチプロセッサシステム内の任意のプロセッサのローカルメモリにロードされるプログラムコードに関する情報を、コード内の命令に埋め込むことができる。
【発明を実施するための最良の形態】
【００１１】
実施の形態１．
図１は、本発明の一実施形態に係るマルチプロセッサシステム１０の全体構成図である。マルチプロセッサシステム１０は、パワープロセッサユニット（ＰＰＵ）３０と、複数の共同（synergisitic）処理ユニット（ＳＰＵ）２０と、を含む。図１では、１つのＰＰＵ３０と複数のＳＰＵ２０が示されている。一例として、マルチプロセッサシステム１０は８つのＳＰＵ２０を備える。しかしながら、２つ以上のＰＰＵ、またはより多数またはより少数のＳＰＵを備えるマルチプロセッサシステムが使用されてもよい。
【００１２】
マルチプロセッサシステム１０では、システム全体を効率よく使用するための機能、環境を提供し、装置全体を統括的に制御するオペレーティングシステム（ＯＳ）が実行される。そのＯＳ上でアプリケーションソフトウェア（以下、単にアプリケーションという）が実行される。
【００１３】
ＰＰＵ３０はＳＰＵ２０のコントローラとして動作し、各ＳＰＵ２０は並列かつ独立してデータおよびアプリケーションを処理する。ＰＰＵ３０およびＳＰＵ２０は、既知のまたは今後開発されるコンピュータアーキテクチャのうち任意のものを使用して実現可能な任意のプロセッサである。複数のＳＰＵ２０のすべてが共通のコンピューティングモジュールで構成され、同一の命令セットアーキテクチャを使用することが好ましいが、ＳＰＵ２０の一部が異種の構成であってもよい。ＰＰＵ３０は、ＳＰＵ２０と同一チップ、同一のパッケージ、同一の回路基盤、同一の製品に位置してもよいし、互いに別の位置にあってもよい。
【００１４】
エクスチェンジインタフェースバス（ＥＩＢ）３６は、双方向に２つのチャネルを有するサーキュラーバスである。ＥＩＢ３６は、ＰＰＵ３０のキャッシュ、各ＳＰＵ２０のＤＭＡＣ２６、および外部通信用の入出力（Ｉ／Ｏ）インタフェース３４と接続される。ＰＰＵ３０とＳＰＵ２０は、ＥＩＢ３６とＤＭＡＣ２６とを介して、ＤＲＡＭ、ＳＲＡＭ等の任意のメモリである共有メモリ３２内に格納されたコードおよびデータを交換することができる。
【００１５】
ＳＰＵ２０はそれぞれローカルメモリ２４を備える。ローカルメモリ２４は一例では２５６ｋＢである。ＳＰＵ２０はこの他にも、例えば１２８ビットである複数のレジスタ、１つまたは複数の浮動小数点演算ユニット、および１つまたは複数の整数演算ユニットを備える。
【００１６】
各ＳＰＵ２０はそれぞれ専用のダイレクトメモリアクセス（ＤＭＡ）コントローラ２６を備える。ＤＭＡＣ２６は、共有メモリ３２と各ＳＰＵ２０との間のデータ転送、データ退避などを、ＰＰＵ３０またはＳＰＵ２０からのコマンドにしたがって制御する。
【００１７】
ＳＰＵ２０は、共有メモリ３２からコードおよびデータをロードし、または共有メモリ３２にコードおよびデータを退避する際には、ＤＭＡＣ２６を動作させる。共有メモリ３２から取得されたコードおよびデータはローカルメモリ２４にロードされ、これによりＳＰＵ２０はタスクまたはジョブであるプログラムモジュールを処理することができる。
【００１８】
デバッグ装置１００は、入出力（Ｉ／Ｏ）インタフェース３４を介してマルチプロセッサシステム１０に接続される。デバッグ装置１００は、ＳＰＵ２０で実行されているプログラムのバグの発見や修正を支援する。デバッグ装置１００は、プログラムの実行を特定の位置で中断するブレークポイント機能、一段階ずつ動作を確認しながら実行するステップ実行機能、実行中のメモリやレジスタ、変数などの状態を見るトレース機能などの機能を有している。
【００１９】
図２（ａ）、（ｂ）は、アプリケーションプログラムをタスクセットに構成する様子を示す図である。ＰＰＵ３０は、アプリケーションプログラムを複数のタスク４０に分解し、それらの依存関係を調査して、タスク４０をタスクセット４２に構成する。図２（ｂ）において、白抜きの丸がタスクを表し、タスク間を結ぶ線はタスクの依存関係を示している。このタスクセット４２にしたがって、各ＳＰＵ２０はタスクの並列処理を実行する。
【００２０】
図３（ａ）、（ｂ）は、アプリケーションプログラムおよびデータをジョブチェーンに構成する様子を示す図である。ＰＰＵ３０は、アプリケーションプログラムおよびデータを複数のジョブ５０に分解し、ジョブ間の依存関係を調査して、ジョブをジョブチェーン５２に構成する。図３（ｂ）において、細長の四角形が複数のジョブが並ぶジョブ列を表し、ジョブ列間を結ぶ矢印は処理の遷移を表している。このジョブチェーン５２にしたがって、各ＳＰＵ２０はジョブの処理を実行する。
【００２１】
なお、タスク、ジョブは、それぞれ性質または粒度の異なるプログラムの実行単位である。タスクセットはタスク（粒度の大きいプログラムモジュール）のグループであり、ジョブチェーンはジョブ（粒度の小さいプログラムモジュール）のグループである。後述するように、ＳＰＵのローカルメモリ上に常駐するポリシーモジュールが、タスクセットまたはジョブチェーンのなかから実行可能なプログラムの実行単位であるジョブまたはタスクを探し出す。
【００２２】
図４は、各ＳＰＵ２０が共有メモリ３２に格納されているワークロード６０を取得する様子を示す図である。
【００２３】
本実施形態において「ワークロード」とは、タスクセット４２またはジョブチェーン５２とポリシーモジュールの組み合わせを指す。ポリシーモジュールは、タスクまたはジョブの実行スキームを定義するマネージャオブジェクトである。ポリシーモジュールには、タスクを解釈し実行するタスクモジュール６２と、ジョブを解釈し実行するジョブモジュール６４があり、それぞれタスクセット４２、ジョブチェーン５２と関連づけられる。
【００２４】
ＰＰＵ３０は、タスクセット４２とタスクモジュール６２の組み合わせ、あるいはジョブチェーン５２とジョブモジュール６４の組み合わせであるワークロード６０を共有メモリ３２に格納する。各ＳＰＵ２０のローカルメモリ２４に常駐するカーネル７０が、共有メモリ３２からいずれかのワークロード６０をローカルメモリ２４にコピーしてくる。ロードされたタスクモジュール６２またはジョブモジュール６４は、ＳＰＵ２０のローカルメモリ２４内のコードおよびデータを管理し、タスク、またはジョブを実行する。こうすることで、ＳＰＵ２０はタスクベースまたはジョブベースのいずれのプログラムでも処理することができる。
【００２５】
ワークロード６０にはそれぞれＳＰＵ毎に優先度が与えられており、この優先度にしたがって各ＳＰＵ２０のカーネル７０はワークロード６０のスケジューリングを実行する。共有メモリ３２には、処理すべきワークロード６０と、そのワークロードの状態やワークロードの処理に必要なＳＰＵ数などの情報がリアルタイムで更新される通知情報とが配置されている。各ＳＰＵ２０のカーネル７０は、この通知情報を適当なタイミングでポーリングし、通知情報にしたがって実行可能なワークロードの中からワークロードを選択する。
【００２６】
選択されたワークロード内のタスクモジュール６２またはジョブモジュール６４が、ＤＭＡＣ２６によって共有メモリ３２から各ＳＰＵ２０のローカルメモリ２４へとＤＭＡ転送される。ローカルメモリ２４にロードされたタスクモジュール６２またはジョブモジュール６４は、あるタスクまたはジョブの処理が終わると、残りのタスクまたはジョブが実行可能かまたは待機状態かを判定し、実行可能なタスクまたはジョブを共有メモリ３２からローカルメモリ２４にロードして処理する。カーネル７０は、選択したワークロードのタスクセット４２またはジョブチェーン５２の処理が終了すると、共有メモリ３２から新たなワークロード６０を選択する。これによって、ＰＰＵ３０による管理を受けることなく、各ＳＰＵ２０が独立して共有メモリ３２にアクセスして最適なワークロードを選択することができる。
【００２７】
ＰＰＵ３０は、基本的にＳＰＵ２０のスケジューリングを行わない。各ＳＰＵ２０は独立して共有メモリ３２にアクセスし、共有メモリ３２に格納されているタスクまたはジョブを自身のローカルメモリにロードして動作するように構成される。こうすることで、各ＳＰＵ２０が高い独立性をもって動作しながらＳＰＵ間の協調動作が実現し、マルチプロセッサシステム１０全体として性能が向上する。また、ＳＰＵ２０はＰＰＵ３０に依存せず独立して動作するため、ＰＰＵ３０を呼び出すための帯域コストを低減できる。
【００２８】
ところで、マルチプロセッサシステム１０のように各ＳＰＵ２０が独立して動作するような構成では、各ＳＰＵ２０のローカルメモリ２４内にロードされているジョブやタスク、ポリシーモジュールが刻一刻と変化していく様子を、ＰＰＵ３０は把握することができない。そのため、プログラミングの段階でのデバッグ、またはマルチプロセッサシステムのパフォーマンス検査の場合などに、アプリケーションプログラムのステップ実行中におけるＳＰＵ２０のローカルメモリ２４のレイアウトなどに関する情報を簡単に取得することができない。この種の情報を取得するために、ＳＰＵ２０が実行中のタスク、ジョブの情報をＰＰＵ３０に伝えていたのでは、ＳＰＵ２０の動作効率が低下してしまう。さらに、各ＳＰＵ２０のローカルメモリ２４の容量の制約から、ローカルメモリ２４にはタスクやジョブなどの小さい単位でコードまたはデータがロードされるため、ローカルメモリ２４の構成は常に変化している。
【００２９】
そこで、本実施形態では、ＳＰＵ２０のローカルメモリ２４にロードされるタスク、ジョブ、またはポリシーモジュールを構成するコードに、マルチプロセッサシステム１０内で一意に定まるグローバルユニークＩＤ（以下、「ＧＵＩＤ」と表記する）を予め付与しておくようにした。ある時点におけるＳＰＵ２０のローカルメモリ２４のローカルイメージ内でこのＧＵＩＤを探索することによって、ローカルメモリ２４内のメモリレイアウトを知ることができる。
【００３０】
図５は、ＳＰＵ２０のカーネル７０がタスクセット４２とタスクモジュール６２からなるワークロードをロードしたときの、ローカルメモリ２４内のある時点でのレイアウトの一例を示す。上述したように、ローカルメモリ２４にはカーネル７０が常駐している。さらに、タスク４０、オーバーレイモジュール７２がある。
【００３１】
図６は、ＳＰＵ２０のカーネル７０がジョブチェーン５２とジョブモジュール６４からなるワークロードをロードしたときの、ローカルメモリ２４内のある時点でのレイアウトの一例を示す。ローカルメモリ２４にはカーネル７０が常駐しているほか、ジョブモジュール６４と複数のジョブ５０がある。
【００３２】
図５、図６とも、ローカルメモリ内でのタスク、ジョブ、ポリシーモジュールのロケーションを特定するために、それぞれのバイナリの先頭にＧＵＩＤ７６が配置されている。
【００３３】
このＧＵＩＤの配置は、以下のような問題を引き起こすおそれがある。すなわち、タスクやジョブを更新したときに、前のタスクやジョブのＧＵＩＤが上書きされずに残っていると、誤って特定されるおそれがある。また、ローカルメモリ２４の容量は非常に限られているため、ＧＵＩＤを例えば１２８バイトにアラインするために無用なパディングを入れたくない。
【００３４】
そこで、本実施形態ではさらに次のような工夫を施している。すなわち、各バイナリ（タスク、ジョブ、ポリシーモジュール）の先頭にＧＵＩＤを配置する。これによって、上書きされた後に以前のＧＵＩＤが残ることを回避できる。また、ＧＵＩＤをタスク、ジョブ、ポリシーモジュールの先頭に入れるために、当該命令を実行した後のプロセッサの動作に影響を及ぼさない命令にＧＵＩＤを記述し、この命令をコードの先頭に追加する。こうすることで、バイナリを先頭から実行できるほか、少ない命令数でＧＵＩＤを上書きすることができる。また、１２８バイトアラインにするためにパディングを入れる必要がない。
【００３５】
ＧＵＩＤを埋め込む命令（以下、これを「識別情報付加命令」という）のローカルメモリ２４内でのメモリアドレスは、所定のバイト単位、例えば１２８バイトにアラインされている。これは、ＧＵＩＤの位置が定まっていないと、ＧＵＩＤを検出するためにローカルメモリ全体を検索しなくてはならず処理時間が長くなるためである。１２８バイトアラインされていることで、１２８バイト毎にＧＵＩＤの有無を判定すればよいため、処理が高速化される。
【００３６】
また、ＧＵＩＤは複数の識別情報付加命令のフィールドに分割されて記述されることが好ましい。ＧＵＩＤの一部を含む複数の識別情報付加命令を、通常のプログラムでは出現しないような特殊な並びとすることで、デバッグ装置などの外部装置がＧＵＩＤの存在を検出しやすくなる。
【００３７】
次に、ＧＵＩＤを埋め込むための識別情報付加命令の例を具体的に説明する。命令のフォーマットは３２ビット長とするが、これに限定されない。
【００３８】
図７は、分岐命令のデータフォーマット１３０を示す。分岐命令は、アドレスで指定されたターゲット命令に実行を移す命令である。図中の数字はビット番号である。０〜８ビットに対応するフィールド１３２には、分岐命令であることを示すバイナリが指定される。９〜２４ビットに対応するフィールド１３４には、通常、ターゲット命令のアドレスが書き込まれる。ＧＵＩＤを埋め込む識別情報付加命令として分岐命令を用いるときには、このフィールド１３４にＧＵＩＤが記述される。
【００３９】
分岐命令を使用した場合のコード例を以下に示す。分岐命令「ｂｒ」でＧＵＩＤをスキップする。分岐命令に続いてＧＵＩＤが無用な命令としてパイプラインに投入され、また、十数サイクルの分岐ペナルティがあるが、その後のプログラムの実行に影響を与えることはない。
br GUID_END !GUID_START
.long data0
.long data1
.long data2
GUID_END
【００４０】
図８は、ＮＯＰ命令のデータフォーマット１４０を示す。ＮＯＰ命令は、何も処理をしない命令であり、実装定義による命令発行の制御を提供するために存在する。０〜１０ビットに対応するフィールド１４２には、ＮＯＰ命令であることを示すバイナリが指定される。１１〜１７ビットおよび１８〜２４ビットに対応するフィールド１４４、１４６は、アーキテクチャ上の予約領域である。ＧＵＩＤを埋め込む識別情報付加命令としてＮＯＰ命令を用いるときには、このフィールド１４４、１４６にＧＵＩＤが記述される。ＮＯＰ命令は、もともとプログラムの実行に全く影響を与えない命令なので、ＧＵＩＤが埋め込まれていてもその後の処理に影響を与えることはない。
【００４１】
ＮＯＰ命令を使用した場合のコード例を以下に示す。「ｎｏｐ」「ｌｎｏｐ」がＮＯＰ命令である。ｄａｔａ０〜ｄａｔａ３はそれぞれＧＵＩＤの一部であり、４つの命令から１つのＧＵＩＤを作成する。
nop data0 !GUID_START
lnop data1
nop data2
lnop data3 !GUID_END
【００４２】
ＮＯＰ命令は、例えばＶＬＩＷ（very long instruction word）方式の命令を作成するときに、意味のある命令を挿入できない部分に入れて固定長のＶＬＩＷ命令を作成するものであるから、通常はＮＯＰ命令のみが連続して生成されることはない。したがって、デバッグ装置側で連続するＮＯＰ命令を検出するように定めておけば、これらがＧＵＩＤが埋め込まれた識別情報付加命令であることを判別できる。
【００４３】
図９は、定数生成命令のデータフォーマット１５０を示す。定数生成命令は、指定されたレジスタにアドレスや定数などの即値を書き込む命令である。０〜６ビットに対応するフィールド１５２には、定数生成命令であることを示すバイナリが指定される。７〜２４ビットに対応するフィールド１５４は、定数を指定するフィールドである。ＧＵＩＤを埋め込む識別情報付加命令として定数生成命令を用いるときは、このフィールド１５４にＧＵＩＤが記述される。２５〜３１ビットに対応するフィールド１５６には、ＳＰＵ内の書き込み先のレジスタが指定される。ここで指定されるレジスタは、ＡＢＩ（Application Binary Interface）において特定の役割が定められておらず破壊可能なレジスタであることが好ましい。定数生成命令を実行することによってＳＰＵのレジスタに定数が書き込まれてしまうが、汎用レジスタへの書き込みの前に読み出しをするようなプログラムは通常は作成されないので、その後の処理に影響を与えることはない。
【００４４】
定数生成命令を使用した場合のコード例を以下に示す。「ｉｌａ」が定数生成命令である。「＄２」はターゲットレジスタを表す。４個の定数生成命令を連続して並べ、１命令の中の１６ビットをＧＵＩＤの一部として利用し、合計して６４ビット長のＧＵＩＤとしている。
ila $2, 0 !GUID_START
ila $2, 1
ila $2, 2
ila $2, 3 !GUID_END
【００４５】
通常、コンパイラは同じレジスタに対する定数生成命令を連続して生成することはない。したがって、デバッグ装置側で連続する定数生成命令を検出するように定めておけば、これらがＧＵＩＤが埋め込まれた識別情報付加命令であることを判別できる。
【００４６】
上述した三つの識別情報付加命令のうち１つのみを使用してもよいし、複数の命令を使用してＧＵＩＤを記述してもよい。列挙したもの以外でも、上記した要件を満たす別の命令を使用してＧＵＩＤを記述してもよい。
【００４７】
図１０は、図１に示したデバッグ装置１００のうち、ＧＵＩＤを使用してメモリレイアウトを出力する機能に関与する部分の構成を示す。デバッグ装置１００は、汎用のコンピュータとこれにインストールされたデバッガプログラムからなるが、図１０においては、様々な処理を行う要素を機能ブロックとして表している。各機能ブロックは、ハードウェア的には、ＣＰＵ、メモリ、その他のＬＳＩで構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組み合わせによっていろいろな形で実現できることは当業者には理解されるところである。
【００４８】
上述したように、マルチプロセッサシステム１０においては、多数の小さなプログラムがＳＰＵ２０のローカルメモリ２４に散在している。また、各ＳＰＵ２０が独立してローカルメモリ２４を書き換えていくため、ＳＰＵ２０の外部からは逐一その更新の状況を把握することができない。そこで、デバッグ装置１００は、検査対象のＳＰＵ２０のローカルメモリ２４のメモリレイアウトを知る手段として、ＧＵＩＤを活用する。
【００４９】
タスク／ジョブ取得部１１０は、共有メモリ３２内のタスク、ジョブ、ポリシーモジュールのコードを取得する。タスク、ジョブ、またはポリシーモジュールには、予めマルチプロセッサシステム１０内で一意に決まるＧＵＩＤが付与され、そのＧＵＩＤを埋め込んだ識別情報付加命令がそれらのコードの先頭に追加されている。ＧＵＩＤは、例えば６４ビット長である。ＧＵＩＤは乱数であってもユーザが指定するものでもよいし、またはコードのバイナリを用いてハッシュ値を計算し、それをＧＵＩＤとしてもよい。コード保持部１１４は、識別情報付加命令が追加されたすべてのタスク、ジョブ、ポリシーモジュールのコードを保持する。
【００５０】
ローカルメモリ複製部１１６は、検査対象とするＳＰＵのローカルメモリのメモリイメージを複製する。ＧＵＩＤ検出部１１８は、メモリイメージからＧＵＩＤが埋め込まれている識別情報付加命令を検出し、所定のフィールドに記述されているＧＵＩＤを取り出す。ＧＵＩＤ検出部１１８は、例えば、１２８バイト単位で出現する命令が図７ないし図９で述べたいずれかの命令列であれば、それらが識別情報付加命令であると判断する。コード検索部１２０は、ＧＵＩＤ検出部１１８によって取り出されたＧＵＩＤに対応するタスクまたはジョブのコードをコード保持部１１４から選択する。
【００５１】
メモリレイアウト出力部１２２は、ＳＰＵのローカルメモリ内におけるタスク、ジョブ、ポリシーモジュールのメモリアドレスと対応させて、コード検索部１２０により選択されたコードを出力する。これによって、ソースコードを参照できるようになる。
【００５２】
図１１は、図１０のデバッグ装置におけるメモリレイアウト表示の作成手順を示すフローチャートである。
デバッグ装置１００がマルチプロセッサシステム１０におけるプログラムの実行を特定の位置で中断すると、ローカルメモリ複製部１１６はデバッグの対象となるＳＰＵ２０のローカルメモリ２４のメモリイメージをＤＭＡＣ２６を介してコピーする（Ｓ１０）。続いて、ＧＵＩＤ検出部１１８は、コピーしたローカルメモリを１２８バイト単位でサーチし、予め定められた特徴のある命令列、例えば１２８バイト単位の位置から４つ連続して出現する定数生成命令を検出する（Ｓ１２）。ＧＵＩＤ検出部１１８は、検出した命令の所定のフィールドからそれぞれＧＵＩＤの一部を取り出し、それらを組み合わせてＧＵＩＤを取得する（Ｓ１４）。この段階で、ＳＰＵのローカルメモリ内の１２８バイト単位のアドレスに位置するコードのＧＵＩＤが特定される。
【００５３】
コード検索部１２０は、Ｓ１４で検出されたＧＵＩＤに対応するコードを、コード保持部１１４から検索する（Ｓ１６）。メモリレイアウト出力部１２２は、Ｓ１６で検索されたＧＵＩＤに対応するコードを組み合わせて、ローカルメモリ内のアドレスに対応させてその時点でのメモリレイアウトを作成し、ディスプレイに表示する（Ｓ１８）。
【００５４】
以上説明したように、本実施形態によれば、マルチプロセッサシステム内の任意のプロセッサのローカルメモリにロードされるタスクまたはジョブであるプログラムモジュールを構成するコードに、プログラムモジュールを特定するための識別情報を埋め込むことができる。識別情報であるＧＵＩＤは、命令を実行した後のプロセッサの動作に影響を及ぼさないような命令に記述される。これにより、ＧＵＩＤを処理するために特別な対策を施す必要がない。
【００５５】
実施の形態ではＧＵＩＤそのものを命令に記述しているが、命令のフィールドにＧＵＩＤのポインタを記述しておき、ポイントの指定先に実際のＧＵＩＤが配置されているような構成としてもよい。
【００５６】
サーチを高速化するために、ＧＵＩＤを含む識別情報付加命令を１２８バイト単位で配置することを述べたが、サーチに時間がかかることを許容すれば、これに限られず自由に配置してもよい。この場合、デバッグ装置でＧＵＩＤを検出できるようにするため、命令列のユニークさが必要となる。
【００５７】
また、４個の命令を連続して並べ、１命令の中の１６ビットをＧＵＩＤの一部として利用し、合計して６４ビット長のＧＵＩＤとすることを述べたが、ＧＵＩＤのサイズはこれに限られず、またＧＵＩＤを可変長としてもよい。例えば、識別情報付加命令の連続する数を適宜変更すれば、ＧＵＩＤのサイズを変えることができる。例えば、命令２つ分であれば３２ビット長のＧＵＩＤとなる。
【００５８】
実施の形態では、命令に埋め込まれたＧＵＩＤを利用するデバッグ装置について説明したが、マルチプロセッサシステムから収集されたパフォーマンスデータを解析してグラフィカルに表示するパフォーマンスアナライザにおいてＧＵＩＤを利用することもできる。
【００５９】
実施の形態２．
図１２は、実施の形態２に係るプログラム改ざん検出装置２００の構成を示す。プログラム改ざん検出装置２００は、Ｉ／Ｏインタフェース３４を介してマルチプロセッサシステム１０に接続される。この図についても、図中の機能ブロックはハードウェア、ソフトウェアの組み合わせによって様々な形で実現できる。
【００６０】
この実施の形態では、プログラムの改ざん検出手法として、実施の形態１で述べた識別情報付加命令のフィールドに、ＧＵＩＤの代わりにタスクまたはジョブであるプログラムモジュールを構成するコードから算出される認証値が記述される。以下、このような命令を「認証情報付加命令」という。
【００６１】
タスク、ジョブ、ポリシーモジュールを構成するコードには、予めコードにしたがって計算される認証値が含められている。例えば、１ＫＢ弱単位でコードのチェックサムを計算しておき、その値がフィールドに記述された認証情報付加命令が、１ＫＢ毎にコードに追加される。
【００６２】
ローカルメモリ複製部２１６は、検査対象とするＳＰＵのローカルメモリのメモリイメージを複製する。認証値検出部２１８は、メモリイメージ内のタスク、ジョブ、ポリシーモジュールのコードから認証値が埋め込まれている認証情報付加命令を検出し、所定のフィールドに記述されている認証値を取り出す。
【００６３】
認証値再計算部２１２は、メモリイメージ内のタスク、ジョブ、ポリシーモジュールのコードにしたがって認証値を再計算する。改ざん判定部２２０は、認証値検出部２１８によって取り出された認証値と、認証値再計算部２１２によって計算された認証値とを比較し、タスク、ジョブ、ポリシーモジュールのコードが改ざんされたか否かを判定する。両者が一致しなければ、コードが改ざんされたと判定する。改ざん判定部２２０は、コード内に含まれている認証値の総数が予め定められている数と一致するか否かを合わせて判定してもよい。結果出力部２２２は、改ざん判定部２２０による判定の結果をディスプレイなどに出力する。
【００６４】
図１３は、図１２のプログラム改ざん検出装置におけるプログラムの改ざんの検出手順を示すフローチャートである。
プログラム改ざん検出装置２００がマルチプロセッサシステム１０におけるプログラムの実行を特定の位置で中断すると、ローカルメモリ複製部２１６は検査の対象となるＳＰＵ２０のローカルメモリ２４のメモリイメージをＤＭＡＣ２６を介してコピーする（Ｓ３０）。続いて、認証値検出部２１８は、コピーしたローカルメモリをサーチし、予め定められた特徴のある命令列、例えば４つ連続して出現する定数生成命令を検出する。検出した命令の所定のフィールドからそれぞれ認証値の一部を取り出し、それらを組み合わせて認証値を取得する（Ｓ３２）。
【００６５】
認証値再計算部２１２は、認証値が取得されたタスク、ジョブ、ポリシーモジュールのコードにしたがって認証値を再計算する（Ｓ３４）。改ざん判定部２２０は、Ｓ３２で取得された認証値と、Ｓ３４で計算された認証値とを比較する（Ｓ３６）。両者が一致すれば（Ｓ３６のＹ）、タスク、ジョブ、ポリシーモジュールのコードは改ざんされていないと判定し（Ｓ３８）、両者が不一致であれば（Ｓ３６のＮ）、タスク、ジョブ、ポリシーモジュールのコードが改ざんされたと判定する（Ｓ４０）。
【００６６】
以上、いくつかの実施の形態をもとに本発明を説明した。これらの実施の形態は例示であり、各構成要素またはプロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００６７】
実施の形態で述べた構成要素の任意の組み合わせ、本発明の表現を方法、装置、システム、コンピュータプログラム、記録媒体などの間で変換したものもまた、本発明の態様として有効である。また、本明細書にフローチャートとして記載した方法は、その順序にそって時系列的に実行される処理のほか、並列的または個別に実行される処理をも含む。
【図面の簡単な説明】
【００６８】
【図１】マルチプロセッサシステムの全体構成図である。
【図２】（ａ）、（ｂ）は、アプリケーションプログラムをタスクセットに構成する様子を示す図である。
【図３】（ａ）、（ｂ）は、アプリケーションプログラムおよびデータをジョブチェーンに構成する様子を示す図である。
【図４】各ＳＰＵが共有メモリに格納されているワークロードを取得する様子を示す図である。
【図５】ある時点におけるローカルメモリ内のレイアウトの一例を示す図である。
【図６】ある時点におけるローカルメモリ内のレイアウトの一例を示す図である。
【図７】分岐命令のフォーマットを示す図である。
【図８】ＮＯＰ命令のフォーマットを示す図である。
【図９】定数生成命令のフォーマットを示す図である。
【図１０】本発明の一実施形態に係るデバッグ装置の構成を示す図である。
【図１１】図１０のデバッグ装置におけるメモリレイアウト表示の作成手順を示すフローチャートである。
【図１２】本発明の別の実施形態に係るプログラム改ざん検出装置の構成を示す図である。
【図１３】図１２のプログラム改ざん検出装置におけるプログラムの改ざんの検出手順を示すフローチャートである。
【符号の説明】
【００６９】
１０  マルチプロセッサシステム、  ２０  ＳＰＵ、  ２４  ローカルメモリ、  ２６  ＤＭＡＣ、  ３０  ＰＰＵ、  ３２  共有メモリ、  ４０  タスク、  ５０  ジョブ、  １００  デバッグ装置、  １１４  コード保持部、  １１６  ローカルメモリ複製部、  １１８  ＧＵＩＤ検出部、  １２０  コード検索部、  １２２  メモリレイアウト出力部、  １３０  分岐命令のデータフォーマット、  １４０  ＮＯＰ命令のデータフォーマット、  １５０  定数生成命令のデータフォーマット、  ２００  プログラム改ざん検出装置、  ２１６  ローカルメモリ複製部、  ２１２  認証値再計算部、  ２１８  認証値検出部、  ２２０  改ざん判定部。
【図１】
2008065707.tif 000003
【図２】
2008065707.tif 000004
【図３】
2008065707.tif 000005
【図４】
2008065707.tif 000006
【図５】
2008065707.tif 000007
【図６】
2008065707.tif 000008
【図７】
2008065707.tif 000009
【図８】
2008065707.tif 000010
【図９】
2008065707.tif 000011
【図１０】
2008065707.tif 000012
【図１１】
2008065707.tif 000013
【図１２】
2008065707.tif 000014
【図１３】
2008065707.tif 000015