(57)【特許請求の範囲】
【請求項１】
プログラムに基づいて演算処理を行う第１プロセッサ、第１タスク管理ブロック、第１トレース領域、及び前記第１タスク管理ブロックを監視する第１トレース制御部を有する第１プロセッサエレメントと、プログラムに基づいて演算処理を行う第２プロセッサを有する第２プロセッサエレメントと、を備え、
前記第１プロセッサエレメントと前記第２プロセッサエレメントは、伝送経路である共有バスにより相互に接続し、
前記第２プロセッサは、前記第１プロセッサが実行するタスクの状態変更を指示するシステムコールを実行し、当該システムコールの実行により前記第１タスク管理ブロックへの第１メモリアクセス命令を前記共有バスを介して送信し、
前記第１メモリアクセス命令は、前記第２プロセッサの識別子を含み、
前記第１プロセッサは、前記第１メモリアクセス命令に応じて前記タスクにかかる処理を行い、
前記第１トレース制御部は、前記第１タスク管理ブロックへの前記第１メモリアクセス命令の書き込みを検出し、検出した前記第１メモリアクセス命令に対応する前記タスクにかかる処理を第１タスク処理情報として前記第２プロセッサの識別子と共に前記第１トレース領域に書き込む、
マルチプロセッサ装置。
【請求項２】
前記第１トレース制御部は、前記第１タスク処理情報の書き込みの際に前記共有バスにデータを送信することなく前記第１トレース領域への書き込みを行うことを特徴とする請求項１に記載のマルチプロセッサ装置。
【請求項３】
前記第２プロセッサエレメントは、第２タスク管理ブロック、第２トレース領域、及び前記第２タスク管理ブロックを監視する第２トレース制御部を有し、
前記第１プロセッサは、前記第２プロセッサが実行するタスクの状態変更を指示するシステムコールを実行し、当該システムコールの実行により前記第２タスク管理ブロックへの第２メモリアクセス命令を前記共有バスを介して送信し、
前記第２メモリアクセス命令は、前記第１プロセッサの識別子を含み、
前記第２プロセッサは、前記第２メモリアクセス命令に応じて前記タスクにかかる処理を行い、
前記第２トレース制御部は、前記第２タスク管理ブロックへの前記第２メモリアクセス命令の書き込みを検出し、検出した前記第２メモリアクセス命令に対応する前記タスクにかかる処理を第２タスク処理情報として前記第１プロセッサの識別子と共に前記第２トレース領域に書き込む、
ことを特徴とする請求項１または請求項２に記載のマルチプロセッサ装置。
【請求項４】
前記第１タスク管理ブロックには、アクセスロックの取得が成功した後に前記第１メモリアクセス命令が書き込まれ、前記第１メモリアクセス命令の書き込み終了後にアクセスロックが解放されることを特徴とする請求項１乃至請求項３のいずれか１項に記載のマルチプロセッサ装置。
【請求項５】
前記第１トレース制御部は、
前記第１タスク管理ブロックにおける前記第１メモリアクセス命令の書き込みアドレスを検出して通知する監視部と、
前記監視部による書き込みアドレスの通知を受信し、受信直後から前記書き込みアドレスに書き込まれたデータをワード単位で読み出したワードデータを送信するワード読み出し部と、
前記ワード読み出し部が送信した前記ワードデータを受信し、当該受信と並行して前記第１トレース領域へのワード単位での前記第１タスク処理情報の書き込みを実行するワード書き込み部と、
を備えることを特徴とする請求項１乃至請求項４のいずれか１項に記載のマルチプロセッサ装置。
【請求項６】
前記ワード書き込み部は、前記第１トレース領域に対するアクセスロックを行うことなく書き込み処理を実行することを特徴とする請求項５に記載のマルチプロセッサ装置。
【請求項７】
プログラムに基づいて演算処理を行う第３プロセッサを有する第３プロセッサエレメントと、を更に備え、
前記第１乃至前記第３プロセッサエレメントは、伝送経路である共有バスにより相互に接続し、
前記第３プロセッサは、前記第１プロセッサが実行するタスクの状態変更を指示するシステムコールを実行し、当該システムコールの実行により前記第１メモリアクセス命令を、前記共有バスを介して送信することを特徴とする請求項１乃至請求項６のいずれか１項に記載のマルチプロセッサ装置。
【請求項８】
前記第１プロセッサエレメントは、時刻情報を生成する時計部を有し、
前記第１トレース制御部は、前記時計部が生成した前記時刻情報を前記第１タスク処理情報及び前記第２プロセッサの識別子と共に前記第１トレース領域に書き込むことを特徴とする請求項１乃至請求項７のいずれか１項に記載のマルチプロセッサ装置。
【請求項９】
前記マルチプロセッサ装置は、前記第１及び前記第２プロセッサエレメント外に時刻情報を生成する時計部を有し、
前記第１トレース制御部は、前記時計部が生成した前記時刻情報を前記第１タスク処理情報及び前記第２プロセッサの識別子と共に前記第１トレース領域に書き込むことを特徴とする請求項１乃至請求項７のいずれか１項に記載のマルチプロセッサ装置。
【請求項１０】
前記第２プロセッサエレメントは、前記第２プロセッサの識別子を保持するレジスタを備えることを特徴とする請求項１乃至請求項９のいずれか１項に記載のマルチプロセッサ装置。
【請求項１１】
前記第１トレース領域からトレースデータを読み出し、読み出したトレースデータから表示情報を生成するトレース出力部を更に備える請求項１乃至請求項１０のいずれか１項に記載のマルチプロセッサ装置。
【請求項１２】
請求項１乃至請求項１１のいずれか１項に記載のマルチプロセッサ装置を搭載したマイクロコンピュータ。
【請求項１３】
プログラムに基づいて演算処理を行う第１プロセッサ、第１タスク管理ブロック、第１トレース領域、及び前記第１タスク管理ブロックを監視する第１トレース制御部を有する第１プロセッサエレメントと、プログラムに基づいて演算処理を行う第２プロセッサを有する第２プロセッサエレメントと、を備えるマルチプロセッサ装置の制御方法であって、
前記第１プロセッサエレメントと前記第２プロセッサエレメントは、伝送経路である共有バスにより相互に接続し、
前記第２プロセッサは、前記第１プロセッサが実行するタスクの状態変更を指示するシステムコールを実行し、当該システムコールの実行により前記第１タスク管理ブロックへの第１メモリアクセス命令を前記共有バスを介して送信し、
前記第１メモリアクセス命令は、前記第２プロセッサの識別子を含み、
前記第１プロセッサは、前記第１メモリアクセス命令に応じて前記タスクにかかる処理を行い、前記第１トレース制御部は、前記第１タスク管理ブロックへの前記第１メモリアクセス命令を検出し、検出した前記第１メモリアクセス命令に対応する前記タスクにかかるタスク処理情報を前記第２プロセッサの識別子と共に前記第１トレース領域に書き込む、マルチプロセッサ制御方法。
【請求項１４】
前記第１トレース制御部は、前記タスク処理情報の書き込みの際に前記共有バスにデータを送信することなく前記第１トレース領域への書き込みを行うことを特徴とする請求項１３に記載のマルチプロセッサ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサ装置及びマルチプロセッサ装置の制御方法に関する。
【背景技術】
【０００２】
近年では、家電製品等に利用するマイクロコンピュータ（いわゆるマイコン、マイクロコントローラとも呼称する。）にマルチプロセッサ（複数のプロセッサを有するシステム）を採用することが多い。マルチプロセッサシステムの採用は、組み込みシステムの低クロック化、応答性の向上、消費電力の低減等に有利である。マルチプロセッサシステムには、各プロセッサに負荷を分散させる対称型マルチプロセッサ型(ＳＭＰ, Symmetric Multiple Processor)と、各プロセッサに機能を分散させる非対称型マルチプロセッサ型(ＡＭＰ, Asymmetric Multi Processor)と、の２種類がある。
【０００３】
各プロセッサは、プロセッサエレメント（ＰＥ，Processor Element）内にそれぞれ配置される。各プロセッサエレメント内には、記憶部が備えられる。記憶部は、プログラムやデータを記憶するものであり、各プロセッサが読み出して実行するオペレーティングシステムが記憶されている。各プロセッサは、タスクと呼ばれる処理単位毎に処理を実行する。
【０００４】
多くのシステムでは、プロセッサは、タスクの実行を行う際に、当該タスクの情報（タスクの状態等）をトレースデータとしてトレースエリアに書き込む。ユーザは、このトレースデータを参照することにより、各プロセッサのタスクの処理状態等を把握することができる。以下、マルチプロセッサシステムにおけるトレースデータの取得に関連する技術について説明する。
【０００５】
特許文献１には、各プロセッサのトレース処理を一斉に停止でき、かつ全プロセッサのトレース情報を時刻順に並べることができるマルチプロセッサシステムが開示されている。各プロセッサは、プロセッサエレメント内部にトレースエリアを有し、時刻情報と共にトレースデータを自身のトレースエリアに書き込む。トレースデータの参照時には、各プロセッサエレメントのトレースエリアからトレースデータを取得し、時刻情報に応じてトレースデータがソートされる。
【０００６】
特許文献２には、トレース情報が発生した時刻を把握することができるマルチプロセッサシステムが開示されている。当該マルチプロセッサシステムは、トレース動作の開始からの時刻を計数するトレースタイマ装置を備えている。同様に、特許文献３には、各プロセッサ間で共通の時刻を使用したトレースデータを生成できるマルチプロセッサシステムが開示されている。
【０００７】
特許文献４には、各プロセッサの動作を、同一バスで接続された他のプロセッサの動作と関連付けることができるマルチプロセッサ装置を開示している。当該マルチプロセッサ装置では、各プロセッサが処理を実行し、当該プロセッサが属するプロセッサエレメント内にロケーショントレース情報を格納する。そして、各プロセッサがロケーショントレース情報を、共有バスを介して主記憶装置に送信する（ダンプ命令の実行）。これにより、主記憶装置内に、各プロセッサのロケーショントレース情報が集約される。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平５−１２８０７９号公報
【特許文献２】特開平０３−１２７２５３号公報
【特許文献３】特開２０００−３４８００７号公報
【特許文献４】特開２０００−１１２９０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
マルチプロセッサシステム内の各プロセッサは、他のプロセッサが動作させるタスクの状態変更操作をシステムコールの実行を介して行うことができる。特許文献１に記載のマルチプロセッサシステム等の一般的なシステムでは、システムコールの実行を行ったプロセッサの属するプロセッサエレメント内のトレースエリアに、タスクの状態変更に関するトレースデータが格納される。換言すると、状態変更がされるタスクを実行しているプロセッサに関連付けられたトレースエリアには、当該トレースデータが格納されない。
【００１０】
そのため、マイコンの動作を確認するためのツールは、各トレースエリアに格納されたトレースデータを取得する必要がある。さらに、当該ツールは、あるタスクの実行（タスクの処理開始、状態変更呼び出し等）に関する情報を表示するために、取得したトレースデータを解析して必要なデータのみを取得し、取得したデータをソートする必要がある。このような処理により、ツールのオーバーヘッドが増加してしまう。
【００１１】
一方、特許文献４に記載のマルチプロセッサ装置では、前述のように主記憶装置に各プロセッサのトレースデータを全て集約することができる。ユーザは、この主記憶装置内のトレースデータのみを参照することにより、各プロセッサの動作を把握することができる。
【００１２】
ここで、特許文献４に記載のマルチプロセッサ装置では、各プロセッサがダンプ命令を実行する。すなわち、当該マルチプロセッサ装置内では、各プロセッサが逐次ロケーショントレース情報を、共有バスを介して主記憶装置に転送する。共有バスとは、各プロセッサエレメントを接続する情報伝達経路である。ダンプ命令は一定時間毎に行われるため、共有バスを介して転送されるデータ量が増加してしまう。これにより、共有バスの使用率が上昇してしまい、情報の伝達に支障をきたす恐れがある。
【課題を解決するための手段】
【００１３】
本発明にかかるマルチプロセッサ装置の一態様は、
プログラムに基づいて演算処理を行う第１プロセッサ、第１タスク管理ブロック、第１トレース領域、及び前記タスク管理ブロックを監視する第１トレース制御部を有する第１プロセッサエレメントと、プログラムに基づいて演算処理を行う第２プロセッサを有する第２プロセッサエレメントと、を備え、
前記第１プロセッサエレメントと前記第２プロセッサエレメントは、伝送経路である共有バスにより相互に接続し、
前記第２プロセッサは、前記第１プロセッサが実行するタスクの状態変更を指示するシステムコールを実行し、当該システムコールの実行により前記第１タスク管理ブロックへのメモリアクセス命令を前記共有バスを介して送信し、
前記メモリアクセス命令は、前記第２プロセッサの識別子を含み、
前記第１プロセッサは、前記メモリアクセス命令に応じて前記タスクにかかる処理を行い、前記第１トレース制御部は、前記第１タスク管理ブロックへの前記メモリアクセス命令を検出し、検出した前記メモリアクセス命令に応じてタスク処理情報を前記第２プロセッサの識別子と共に前記第１トレース領域に書き込む、ものである。
【００１４】
本発明にかかるマルチプロセッサ装置の制御方法の一態様は、
プログラムに基づいて演算処理を行う第１プロセッサ、第１タスク管理ブロック、第１トレース領域、及び前記第１タスク管理ブロックを監視する第１トレース制御部を有する第１プロセッサエレメントと、プログラムに基づいて演算処理を行う第２プロセッサを有する第２プロセッサエレメントと、を備えるマルチプロセッサ装置の制御方法であって、
前記第１プロセッサエレメントと前記第２プロセッサエレメントは、伝送経路である共有バスにより相互に接続し、
前記第２プロセッサは、前記第１プロセッサが実行するタスクの状態変更を指示するシステムコールを実行し、当該システムコールの実行により前記第１タスク管理ブロックへの第１メモリアクセス命令を前記共有バスを介して送信し、
前記第１メモリアクセス命令は、前記第２プロセッサの識別子を含み、
前記第１プロセッサは、前記第１メモリアクセス命令に応じて前記タスクにかかる処理を行い、前記第１トレース制御部は、前記第１タスク管理ブロックへの前記第１メモリアクセス命令を検出し、検出した前記第１メモリアクセス命令に応じてタスク処理情報を前記第２プロセッサの識別子と共に前記第１トレース領域に書き込む、ものである。
【００１５】
本発明では、第１トレース領域への書き込みの際に共有バスに対するデータ送信を行うことなく、発行元である第２プロセッサの識別子と共に第１タスク処理情報が第１トレース領域に書き込まれる。第１タスク管理情報を共有バスを介して送受信する必要が無くなるため、共有バスの使用率を低減することができる。さらに、第１タスク処理情報とともに第２プロセッサの識別子が書き込まれるため、ユーザは、第２プロセッサの処理によりタスク状態の変更が生じたことを把握することができる。
【発明の効果】
【００１６】
本発明によれば、共有バスの使用率を低減して所望のトレースデータの取得を容易に行うことができるマルチプロセッサ装置、及びマルチプロセッサ装置の制御方法を提供することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の実施の形態１にかかるマルチプロセッサ装置の構成を示すブロック図である。
【図２】本発明の実施の形態１にかかるタスク管理ブロックに対するロック処理の流れを示すフローチャートである。
【図３】本発明の実施の形態１にかかるタスク管理ブロックの内部構成を示す概念図である。
【図４】本発明の実施の形態１にかかるタスク管理ブロックの内部構成を示す概念図である。
【図５】本発明の実施の形態１にかかるトレース制御部１０６の内部構成、及びタスク管理ブロック１１２及びトレースエリア１０７の関係を示す概念図である。
【図６】本発明の実施の形態１にかかるトレースエリア１０７の内部構成を示す概念図である。
【図７】本発明の実施の形態１にかかるマルチプロセッサ装置の動作を示すフローチャートである。
【図８】本発明の実施の形態１にかかるマルチプロセッサ装置の動作を示すフローチャートである。
【図９】本発明の実施の形態１にかかるマルチプロセッサ装置の構成を示すブロック図である。
【図１０】本発明の実施の形態２にかかるマルチプロセッサ装置の構成を示すブロック図である。
【図１１】本発明の実施の形態２にかかるマルチプロセッサ装置の動作を示すシーケンス図である。
【図１２】本発明の実施の形態３にかかるマルチプロセッサ装置の構成を示すブロック図である。
【図１３】本発明の実施の形態４にかかるマルチプロセッサ装置の構成を示すブロック図である。
【発明を実施するための形態】
【００１８】
＜実施の形態１＞
以下、図面を参照して本発明の実施の形態１について説明する。図１は、本実施の形態にかかるマルチプロセッサ装置の構成を示すブロック図である。当該マルチプロセッサ装置は、例えばマイクロコンピュータ（マイコン）に搭載される。
【００１９】
当該マルチプロセッサ装置には、プロセッサエレメント１００と、プロセッサエレメント２００と、が配置されている。プロセッサエレメント１００とプロセッサエレメント２００は、共有バス１を介して接続されている。共有バス１とは、プロセッサエレメント１００とプロセッサエレメント２００間のデータ伝送を行う伝送経路である。
【００２０】
プロセッサエレメント１００は、ＣＰＵ１０１と、記憶部１０２と、レジスタ１０３と、バス制御部１０４と、時計部１０５と、トレース制御部１０６と、トレースエリア１０７と、を備える。プロセッサエレメント２００は、ＣＰＵ２０１と、記憶部２０２と、レジスタ２０３と、バス制御部２０４と、時計部２０５と、トレース制御部２０６と、トレースエリア２０７と、を備える。プロセッサエレメント１００とプロセッサエレメント２００は、略同一の構成を持てばよい（同一名称を付した処理部、記憶部は原則として同一の機能を持つ。）。そのため、以下の説明では主にプロセッサエレメント１００の詳細について説明する。
【００２１】
記憶部１０２とは、ＣＰＵ１０１のワークエリア等となる領域であり、一般的にはＳＲＡＭ（Static Random Access Memory）、ＤＲＡＭ（Dynamic Random Access Memory）等のランダムアクセス可能な揮発性メモリである。記憶部１０２は、読み出されたプログラムやプログラム実行に関する入出力データを記憶する。
【００２２】
レジスタ１０３は、ＣＰＵ１０１の識別子（プロセッサＩＤ）を保持するレジスタである。後述するシステムコール１１０の実行時等にレジスタ１０３の読み出し命令が発行される。読み出し命令の発行より、レジスタ１０３に保持されたＣＰＵ１０１の識別子を取得できる。
【００２３】
なお、レジスタ１０３は、一般的なレジスタではなく、メモリマップドＩ／Ｏ（Input/Output）におけるレジスタとして実装されても良い。この場合、メモリマップドＩ／Ｏ領域の特定アドレスの値を読み出すことによりＣＰＵ１０１の識別子を取得することができる。
【００２４】
ＣＰＵ１０１は、図示しないＨＤＤ（Hard Disc Drive）等の補助記憶装置からＯＳ（Operating System）プログラムやアプリケーションプログラムを読み出し、実行する演算装置（Central Processing Unit）である。ＯＳプログラムは、ＣＰＵ１０１によって常時実行されるプログラムである。ＯＳプログラムとは、いわゆる基本ソフトであって、コンピュータにおいて、ハードウェアを抽象化したインターフェイスをアプリケーションソフトウェアに提供するプログラムである。
【００２５】
ＯＳ（Operating System, オペレーティングシステム）１０８は、ＣＰＵ１０１によって実行されることにより、ハードウェア資源（記憶部１０２等）を利用して、各種処理を行う。タスク１０９とは、ＯＳ１０８の処理の実行単位である。なお、タスク１０９は、複数同時に実行されても良い（すなわち、ＯＳ１０８は、いわゆるマルチタスクＯＳであっても良い。）。
【００２６】
システムコール１１０は、ＯＳ１０８の各種機能を呼び出すために使用される機構である。システムコール１１０は、サービスコールとも呼称される。一般的に、システムコール１１０は、関数形式（open()関数、exit()関数等）で提供される。例えば、あるタスク１０９がシステムコール１１０を呼び出して実行することにより、他のタスクの状態を変更することができる。ここで、タスク１０９がシステムコール１１０を呼び出して実行することにより、プロセッサエレメント２００内において実行されているタスク２０９の状態を変更することも可能である。この場合、システムコール１１０の実行により、メモリアクセス命令が共有バス１を介してタスク管理ブロック２１２（後述）に書き込まれる。ここで、システムコール１１０の実行前にレジスタ１０３からＣＰＵ１０１の識別子が読み出される。そして、メモリアクセス命令は、この読み出されたＣＰＵ１０１の識別子を含むように構成される。
【００２７】
ディスパッチャ１１１は、ＯＳ１０８の一機能であり、実行可能状態（Ｒｅａｄｙ）にあるタスク１０９の中から、次に実行すべきタスク１０９を一つ選択して実行状態（Ｒｕｎｎｉｎｇ）とする（タスクディスパッチ）。ディスパッチャ１１１は、タスク管理ブロック１１２を参照し、実行可能状態（Ｒｅａｄｙ）となっているタスク１０９からＣＰＵ１０１の実行権限を与えるタスクを選択する（タスクスケジューリング機能）。ディスパッチャ１１１は、タスクディスパッチを行う際に、タスク管理ブロック１１２のトレース書き込み領域（後述）にディスパッチ処理に関する情報を書き込む。当該書き込み処理については、図３及び図４を参照して後述する。
【００２８】
タスク管理ブロック１１２は、各タスク１０９の状態を保持する記憶ブロックである。タスク管理ブロック１１２の保持する情報は、タスク状態の変更要求（ＣＰＵ２００から受信したメモリアクセス命令、またはディスパッチャ１１１によるディスパッチ処理）に応じて適宜書き換えられる。タスク管理ブロック１１２への書き込みは、ワード単位で行われる。ワードとは、ＣＰＵのデータバス幅である。例えばＣＰＵ１０１が３２ビットＣＰＵである場合、タスク管理ブロック１１２への書き込みは４バイト（１ワード＝４バイト）毎に行われる。
【００２９】
タスク管理ブロック１１２への書き込み、及びタスク管理ブロック１１２からの読み出しには、ロック（アクセスロック）の取得が必要となる。図２を参照して、ロックの取得及びタスク管理ブロック１１２の読み書きにかかるＯＳ１０８の処理を説明する。
【００３０】
ディスパッチャ１１１がディスパッチ処理を行う場合、またはシステムコール１１０、２１０に伴うメモリアクセス命令が入力された場合、ディスパッチャ１１１、システムコール１１０、またはシステムコール２１０の機能としてロック変数１１３の読み出しが実行される（Ｓ１１）。ロック変数１１３は、「ロック中」または「空き」のいずれかの値をとる変数である。ロック変数１１３が「ロック中」である場合（Ｓ１２：ロック中）、一定時間後にロック変数１１３の読み出しが再実行される（Ｓ１１）。
【００３１】
ロック変数１１３が「空き」である場合（Ｓ１２：空き）、ロック変数１１３は、「ロック中」に書き換えられる（Ｓ１３）。そして、タスク管理ブロック１１２への書き込み、またはタスク管理ブロック１１２からの読み出し処理が実行される（Ｓ１４）。書き込み処理または読み出し処理の実行後に、ロック変数１１３は、「空き」に書き換えられる（Ｓ１５）。
【００３２】
次に、タスク管理ブロック１１２の詳細を、図３を参照して説明する。図３は、タスク管理ブロック１１２の内部構成を示す概念図である。タスク管理ブロック１１２は、記憶部１０２（ＲＡＭ等）の一部領域に設けられる。タスク管理ブロック１１２には、各タスクに関する情報を保持する領域が予約されている。図３の例では、タスク管理ブロック１１２には、アドレス１にタスクＡの情報が書き込まれ、アドレス２にタスクＢの情報が書き込まれ、アドレス３にタスクＣの情報が書き込まれる。さらに、タスク管理ブロック１１２には、後述のトレースエリア１０７に書き込まれるトレースデータを一時的に記憶するトレース書き込み領域が設けられる。また、トレース書き込み領域には、ディスパッチ処理時にもディスパッチャ１１１からの書き込みが生じる。ＣＰＵ１０１は、タスク管理ブロック１１２に書き込まれた内容を基にタスク１０９に関する処理を適宜実行する。
【００３３】
次に、図４を参照して、タスク管理ブロック１１２におけるタスク毎の領域の構成について説明する。図４は、図３に示すタスクＡの領域の書き込みデータを示す概念図である。図示するように、当該領域には、タスク状態、他タスクへのリンク、待ち要因、退避コンテキスト情報、及び書き込みプロセッサが書き込まれる。各情報について以下に説明する。
【００３４】
タスク状態とは、当該タスクの現在の状態を示す情報である。タスク状態は、休眠状態（Ｓｌｅｅｐ）、実行可能状態（Ｒｅａｄｙ）、待機状態（Ｗａｉtｉｎｇ）、実行状態（Ｒｕｎｎｉｎｇ）等の値のいずれかとなる。
【００３５】
他タスクへのリンクとは、実行可能状態（Ｒｅａｄｙ）となっているタスクが複数ある場合に、どのタスクを最初に実行状態（Ｒｕｎｎｉｎｇ）に遷移させるかを示す情報である。当該リンクは、線形のポインタが格納される。図４では、タスクＡがタスクＣの後に実行状態（Ｒｕｎｎｉｎｇ）に遷移することを示している。
【００３６】
待ち要因とは、当該タスクが待機状態（Ｗａｉtｉｎｇ）である場合に、どのような要因により処理待ちの状態となっているかを示す情報である。例えば、待ち要因として、「Ｘ処理を行うために取得するセマフォの解放を待っている」といった情報が書き込まれる。
【００３７】
退避コンテキスト情報とは、タスク呼び出しが割り込みで生じた場合等に、割り込み前のＣＰＵ１０１による各種処理の状態を示す。例えば、退避コンテキスト情報として、スタックポインタの値を保持する。
【００３８】
書き込みプロセッサとは、上述の情報の書き込み元となるプロセッサを示す情報である。前述のように、タスク状態は、同一プロセッサエレメント内で動作するタスク等から変更される場合に加え、共有バス１を介したメモリアクセス命令により変更される場合がある。そこで、この呼び出し元のプロセッサが分かるように、プロセッサＩＤを書き込む。図４の例は、タスクＡのタスク状態を実行可能状態（Ｒｅａｄｙ）に変更したプロセッサのＩＤがＰ２（ＣＰＵ２０１）であることを示している。この書き込みプロセッサの値は、タスク管理ブロック１１２への書き込み元となるプロセッサエレメント内のレジスタ（レジスタ１０３、レジスタ２０３）から読み出された値となる。
【００３９】
続いて、図１を再度参照し、バス制御部１０４、時計部１０５、トレース制御部１０６、及びトレースエリア１０７の説明を行う。なお本実施の形態では、時計部１０５、トレース制御部１０６、及びトレースエリア１０７は、ハードウェアエミュレータ（図１中の点線部分）の機能としてそれぞれ実現される。
【００４０】
バス制御部１０４は、共有バス１を介して送受信する情報、命令の調停を行う処理部である。バス制御部１０４は、受信したメモリアクセス命令をＯＳ１０８に供給する。また、バス制御部１０４は、システムコール１１０の実行に応じて、ＯＳ２０８へのメモリアクセス命令をバス制御部２０４に送信する。
【００４１】
時計部１０５は、時刻情報を生成し、適宜トレース制御部１０６に時刻情報を供給する。なお、プロセッサエレメント２００にも時計部２０５が配置されている。そのため、本実施の形態ではプロセッサエレメント間では、時刻情報は同期されない。
【００４２】
トレース制御部１０６は、タスク管理ブロック１１２への書き込みを監視し、書き込みが生じた場合に、当該書き込み内容に応じてトレースエリア１０７にトレースデータを書き込む処理部である。トレース制御部１０６の構成、動作について図５を参照して説明する。図５は、トレース制御部１０６の内部構成、及びタスク管理ブロック１１２及びトレースエリア１０７の関係を示す概念図である。
【００４３】
トレース制御部１０６は、監視部１１４と、ワード読み出し部１１５と、ワード書き込み部１１６と、を備える。監視部１１４は、タスク管理ブロック１１２の書き込み状況を監視する処理部である。図３を例に説明する。監視部１１４は、アドレス１、アドレス２、アドレス３、アドレス４に対して書き込みが生じたかを監視する。タスク管理ブロック１１２には各タスクの領域が割り当てられており、監視部１１４は、予めこれらのアドレスの割り当てを把握している。監視部１１４は、これらのアドレスのいずれかに対して書き込みが生じた時点で、書き込みが生じたアドレスをワード読み出し部１１５に通知する。
【００４４】
ワード読み出し部１１５は、監視部１１４から通知されたアドレスへの書き込みをワード単位で読み出す処理部である。ワード読み出し部１１５の読み出し処理は、いわゆるクオリファイトレースと呼ばれる機能により実現される。ワード読み出し部１１５は、読み出したデータ（ワード）を順次ワード書き込み部１１６に供給する。さらに、ワード読み出し部１１５は、読み出し先のアドレスをワード書き込み部１１６に通知する。読み出し先のアドレスの情報は、トレース出力部２によりトレースデータを出力する際にタスクの識別子を特定するために使用される。
【００４５】
ワード書き込み部１１６には、時計部１０５から時刻情報が供給される。さらに、ワード書き込み部１１６には、ワード読み出し部１１５が読み出したワード、及び読み出し先のアドレスの情報が順次供給される。ワード書き込み部１１６は、供給されたワードを基にトレースデータをトレースエリア１０７にワード単位で書き込む。ワード書き込み部１１６は、トレースエリア１０７に対するロックを行うことなく、ワード読み出し部１１５からのワードの供給が生じた時点で書き込み処理を開始する。以下、トレースエリア１０７の構成と合わせて書き込み処理を説明する。
【００４６】
トレースエリア１０７は、トレースデータを保持する記憶領域である。トレースエリア１０７は、一般的にバッファ（たとえばリングバッファ）として構成される。トレースエリア１０７には、ワード書き込み部１１６からトレースデータが順次書き込まれる。詳細には、ロックを取得した（ロック変数１１３を「ロック中」に変更した）ＣＰＵの順序でトレースデータが順次書き込まれる。
【００４７】
図６は、トレースエリア１０７のデータをトレース出力部２によって出力した状態の一例を示す概念図である。図６では、トレースエリア１０７に対し、ＣＰＵ１０１（Ｐ１）により実行されるタスクＡが、ＣＰＵ２０１から起動され（詳細にはＣＰＵ２０１により実行されるタスク２０９から起動され）、ＣＰＵ１０１（Ｐ１）により実行開始され、セマフォ待ちに移行するという一連の流れがトレースデータとして格納されている。以下、トレースデータを構成する各項目について説明する。
【００４８】
時刻とは、トレースデータが書き込まれた時刻情報である。当該項目（時刻）には、トレース制御部１０６が時計部１０５から取得した時刻情報が書き込まれる。タスクＩＤとは、処理対象のタスクの識別子である。この情報（タスクの識別子）は、ワード読み出し部１１５が当該トレースデータを読み出した先のアドレスの情報から一意に定まる。状態とは、処理対象のタスクの状態（Ｒｅａｄｙ等）である。待ち要因とは、状態が"Ｗａｉｔｉｎｇ"である場合に、当該タスクがどのような要因で待ち状態となっているかを示す情報である。状態が"Ｗａｉｔｉｎｇ"ではない場合、待ち要因には値が設定されない。ＰＩＤとは、書き込み元となるプロセッサの識別子を示す情報である。
【００４９】
これらの各情報（時刻を除く）には、タスク管理ブロック１１２から読み出された値（または読み出し処理から把握できる値）が基本的にそのまま代入される。すなわち、ワード書き込み部１１６は、図４に示す状態、待ち要因、ＰＩＤをワード単位で受け付け、そのままワード単位で書き込む。さらに、ワード書き込み部１１６は、時刻情報やタスクＩＤをワード単位でトレースエリア１０７に書き込む。
【００５０】
上記したように、トレース制御部１０６は、記憶部１０２内のタスク管理ブロック１１２に書き込まれた情報を読み出し、読み出した情報をタスク処理に関する情報（タスク管理情報とも呼称する。上述したトレースエリア１０７に書き込まれる各情報（状態、待ち要因、ＰＩＤ））としてトレースエリア１０７に書き込む。すなわち、トレース制御部１０７は、共有バス１を介したタスク管理情報のやり取りを行うことなく、トレースエリア１０７への書き込みを実行する。
【００５１】
再び図１を参照する。トレース出力部２は、プロセッサエレメント１００のトレースエリア１０７及びプロセッサエレメント２００のトレースエリア２０７からトレースデータを取得し、取得したトレースデータから一般的なディスプレイ装置等に表示する表示情報を生成する処理部である。トレース出力部２は、いわゆるタスクデバッガやパフォーマンスアナライザと呼ばれるツールに相当する。トレース出力部２は、ユーザの要求に応じてトレースデータを取得する。例えば、トレース出力部２は、ユーザがタスク１０９の動作のみを把握したい場合、トレースエリア１０７のみからトレースデータを取得する。この際、取得したトレースデータは、図６に示すように、ＣＰＵ２０１が実行するタスクからの状態変更に関する情報（ＰＩＤ）も含む。
【００５２】
続いて、本実施の形態にかかるマルチプロセッサ装置について、処理の流れに着目して説明を行う。はじめに、ＣＰＵ２０１が実行するタスク２０９から、ＣＰＵ１０１が実行するタスク１０９の状態を変更する場合の処理の流れについて説明する。図７は、当該処理の流れを示すフローチャートである。
【００５３】
はじめに、タスク２０９は、タスク１０９の状態変更を行うためにシステムコール２１０を実行する。この際、システムコール２１０は、ロックを取得する（ロック変数１１３を「ロック中」に書き換える、Ｓ２１）。なお、ロックが取得できない場合、一定時間後にロックの取得処理を繰り返し行う。ロック取得成功後に、レジスタ２０３からＣＰＵ２０１の識別子が読み出される。システムコール２１０の発行により、ＣＰＵ２０１の識別子を含むメモリアクセス命令がバス制御部２０４を介して発行される（Ｓ２２）。そして、メモリアクセス命令に応じて、タスク管理ブロック１１２が書き換えられる（Ｓ２３）。トレース制御部１０６は、タスク管理ブロック１１２への書き込みを検出する（Ｓ２４）。トレース制御部１０６は、検出した書き込み内容に応じてトレースエリア１０７に書き込む（Ｓ２５）。また、ＣＰＵ１０１は、タスク管理ブロック１１２に書き込まれた内容を基にタスク１０９に関する処理を適宜実行する。
【００５４】
続いて、ディスパッチャ１１１がタスク１０９をディスパッチ（タスクの状態を実行状態（Ｒｕｎｎｉｎｇ）に変更する処理の流れについて説明する。図８は、当該処理の流れを示すフローチャートである。
【００５５】
ディスパッチャ１１１は、ロックを取得する（ロック変数１１３を「ロック中」に書き換える、Ｓ３１）。ロック取得成功後に、ディスパッチャ１１１は、タスク管理ブロック１１２を参照し、一般的なタスクスケジューリングの手法により、実行状態（Ｒｕｎｎｉｎｇ）に遷移させるタスク１０９を選択する（Ｓ３２）。そして、ディスパッチャ１１１は、ディスパッチ処理の内容に応じて、タスク管理ブロック１１２に対する書き込みを行う（Ｓ３３）。ここで、ディスパッチャ１１１は、タスク管理ブロック１１２のトレース書き込み領域（図３）にディスパッチ対象となるタスクのＩＤ、ＣＰＵ１０１の識別子（レジスタ１０３の保持値）等を書き込む。トレース制御部１０６は、タスク管理ブロック１１２内のトレース書き込み領域（図３）への書き込みを検出する（Ｓ３４）。トレース制御部１０６は、検出した書き込み内容をトレースエリア１０７に書き込む（Ｓ３５）。また、ＣＰＵ１０１は、タスク管理ブロック１１２に書き込まれた内容を基にタスク１０９に関する処理を適宜実行する。
【００５６】
続いて、本実施の形態にかかるマルチプロセッサ装置の効果について説明する。上述のように、トレース制御部１０６は、タスク管理ブロック１１２を監視し、ＣＰＵ２０１（厳密にはＣＰＵ２０１が動作させるタスク２０９）からタスク１０９の状態変更を指示するメモリアクセス命令の書き込みを検出する。トレース制御部１０６は、検出した書き込み内容を、原則としてそのままタスク処理に関する情報（タスク処理情報）として同一プロセッサエレメント１００内のトレースエリア１０７に書き込む。この際、共有バス１に対するトレースデータの転送処理は一切行われない。これにより、共有バス１を介して送受信される情報量を低減することができる。共有バス１を介して送受信される情報量が低減されることにより、共有バス１を介した確実な情報伝達を実現することができる。
【００５７】
さらに、ＣＰＵ２０１からタスク１０９の状態変更を行う場合、タスク管理ブロック１１２に書き込まれる情報には、ＣＰＵ２０１の識別子（レジスタ２０３の保持値）を含まれる。そして、トレース制御部１０６は、ＣＰＵ２０１の識別子をトレースデータに含めてトレースエリア１０７に書き込む。これにより、ユーザは、ＣＰＵ２０１から指示されて実行したタスク処理を把握することができる。すなわち、ＣＰＵ１０１が実行するタスクの全ての情報が命令発行元の情報（プロセッサＩＤ）と共にトレースエリア１０７に集約される。よってユーザは、トレースエリア１０７内のトレースデータを参照するのみでＣＰＵ１０１が実行する全てのタスク１０９の詳細を把握（他のＣＰＵから指示されて実行した処理の把握を含む）することができる。換言すると、ＣＰＵ１０１が実行するタスク１０９の情報を参照する際に、複数のトレースエリアからトレースデータを取得し、取得したトレースデータのソートを行う必要がない。よって、本実施の形態にかかるマルチプロセッサ装置は、ユーザに必要な情報のみを速やかに提供することができる。
【００５８】
上述したように、トレース制御部１０６は、時計部１０５から供給された時刻情報をタスク１０９に関する情報と共にトレースエリア１０７に書き込む。これにより、ユーザは、トレースデータを参照することにより、タスク１０９に関する操作が行われた時刻を正確に把握することができる。
【００５９】
さらに、トレースエリア１０７には、時計部１０５から取得した時刻情報のみが書き込まれ、プロセッサエレメント２００内の時計部２０５の計測した時刻情報は一切書き込まれない。そのため、時計部１０５の単位時間と時計部２０５の単位時間が異なる場合であっても、ユーザは、各トレースデータに関する事象が生じた時刻を把握することができる。
【００６０】
なお、上述の説明では、両プロセッサエレメント（１００、２００）がそれぞれトレースエリア（１０７、２０７）を持つ構成として説明したが、必ずしもこれに限られない。以下、図９を参照して、一方のプロセッサエレメントのみがトレースエリアを有する構成について説明する。
【００６１】
本実施の形態にかかるマルチプロセッサ装置は、非対称型マルチプロセッサ型の構成とすることが可能である。この場合、あるプロセッサエレメント内に存在するＣＰＵの実行するタスクの重要度が低く、当該タスクに関する情報を取得しなくても良いケースがある。図９は、プロセッサエレメント１００内にのみトレースエリア１０７が配置され、プロセッサエレメント２００内にはトレースエリアが配置されないマルチプロセッサ装置を示している。当該構成であっても、プロセッサエレメント１００内の各処理部が、上述の動作を行うことによりタスク１０９に関する所望のトレースデータをトレースエリア１０７内に格納することができる。さらに、プロセッサエレメント２００内にトレースメモリ等を設ける必要が無くなり、マルチプロセッサ装置の構成を必要最小限にすることができる。これにより、マルチプロセッサ装置のシステムコストを削減することができる。
【００６２】
＜実施の形態２＞
本実施の形態にかかるマルチプロセッサ装置は、３つ以上のプロセッサエレメントを有することを特徴とする。本実施の形態にかかるマルチプロセッサ装置は、一般的なマルチプロセッサ装置と比べて予測可能性が向上するという効果を称する。以下、本実施の形態にかかるマルチプロセッサ装置の構成、効果について実施の形態１にかかるマルチプロセッサ装置と異なる点を中心に説明する。
【００６３】
図１０は、本実施の形態にかかるマルチプロセッサ装置の構成を示すブロック図である。なお、図面において、同一名及び同一符号を付した処理部及び記憶部は実施の形態１と基本的に同じ処理を行う（他の実施の形態に関する図面でも同様である）。当該マルチプロセッサ装置は、プロセッサエレメント１００及びプロセッサエレメント２００に加えて、プロセッサエレメント３００を備える。プロセッサエレメント３００の内部構成、及び動作は、プロセッサエレメント１００と同様であればよい。
【００６４】
各トレース制御部（１０６、２０６、３０６）は、図５に示したように監視部、ワード読み出し部、及びワード書き込み部を有する構成である。
【００６５】
以下、本実施の形態にかかるマルチプロセッサ装置の動作の説明に先立ち、一般的なマルチプロセッサ装置において生じる予測可能性に関する問題について述べる。特許文献４をはじめとするマルチプロセッサ装置では、タスク管理ブロックに対するロックの取得とは別に、トレースエリアに対するロックを取得する必要がある。トレースエリアに対するロックを取得した後に、トレースエリアへの書き込みが開始する。
【００６６】
これらの３つ以上のＣＰＵを備えるマルチプロセッサ装置（特許文献４をはじめとするマルチプロセッサ装置）において、第１ＣＰＵの処理に応じてトレースエリアがロックされている場合について考える。この場合、第２ＣＰＵ及び第３ＣＰＵの処理は、トレースエリアのロックの取得待ちとなる。ここで、トレースエリアのロックが解除される。この場合、第２ＣＰＵの処理に応じてタスク管理ブロックがロックされ、第３ＣＰＵの処理に応じてタスク管理ブロックがロックされる場合がある。この場合、次にロックが獲得できるＣＰＵが第２ＣＰＵか、第３ＣＰＵかはロック取得を要求し始めた順序にかかわらず不定である。そのため、ロック要求開始からロック獲得までの時間の上限は定めることができず、トレースにかかる処理の予測可能性が低下してしまう。
【００６７】
一方、本実施の形態にかかるトレース制御部１０６は、トレースエリア１０７に関するロック処理を一切行うことなくトレースエリア１０７への書き込みを行う。以下、前述の図５、及び図１１を参照して本実施の形態にかかるマルチプロセッサ装置の動作を説明する。
【００６８】
図１１は、タスク１０９に対する状態変更が、各プロセッサ（ＣＰＵ１０１、２０１、３０１）から要求されている場合の各記憶部、変数の状態を示す図である。図１１において、ロック変数１１３については、どのＣＰＵからの指示によりロックが行われているかが示されている。図１１において、タスク管理ブロック１１２、及びトレースエリア１０７については、どのＣＰＵの呼び出しに応じて書き込み処理が生じているかが示されている。
【００６９】
はじめに、ＣＰＵ１０１は、タスク管理ブロック１１２をロックする（ｔ１）、詳細には、ロック変数１１３を「ロック中」に変更する。そして、ＣＰＵ１０１は、タスク管理ブロック１１２への書き込みを開始する（ｔ２）。
【００７０】
図５に示すように、トレース制御部１０６内の監視部１１４は、タスク管理ブロック１１２への書き込みを検出する。監視部１１４は、書き込みの検出後に即座にワード読み出し部１１５に書き込みの生じたアドレスを通知する。ワード読み出し部１１５は、当該アドレスから１ワード毎にデータを読み出し、ワード書き込み部１１６に読み出したワードを読み出し直後に供給する。ワード書き込み部１１６は、供給されたワードに応じて、トレースエリア１０７への書き込みを開始する（ｔ３）。このように、トレースエリア１０７への書き込みは、タスク管理ブロック１１２への書き込みの最中（詳細には直後）からタスク管理ブロック１１２への書き込みと並行して開始される。
【００７１】
ＣＰＵ１０１は、タスク管理ブロック１１２への書き込みを終了する（ｔ４）。ＣＰＵ１０１は、書き込みの終了と共にタスク管理ブロック１１２のロックを解放する、すなわちロック変数１１３を「空き」に変更する（ｔ４）。トレースエリア１０７への書き込みは、タスク管理ブロック１１２への書き込みと並行して行われている。そして、ワード書き込み部１１６は、トレースエリア１０７への書き込みを終了する（ｔ５）。
【００７２】
トレースエリア１０７に書き込む情報は、時刻情報の追加を除けばタスク管理ブロック１１２に書き込む情報と略同一である。また、前述のように、トレース制御部１０６は、ハードウェアエミュレータの一機能として実現され、トレース制御部１０６の動作速度は、ＯＳ１０８の処理速度に対応できるように構成される。そのため、ワード書き込み部１１６は、タスク管理ブロック１１２への書き込みの終了（ｔ４）の直後（ｔ５）にトレースエリア１０７への書き込みを終了する。
【００７３】
続いて、ＣＰＵ２０１は、タスク管理ブロック１１２をロックする（ｔ６）。そして、ＣＰＵ２０１は、メモリアクセス命令の送信により、タスク管理ブロック１１２への書き込みを開始する（ｔ７）。この直後にワード書き込み部１１６は、トレースエリア１０７への書き込みを開始する（ｔ８）。そして、ＣＰＵ１０１の場合と同様に、ＣＰＵ２０１は、メモリアクセス命令の送信を終了することにより、タスク管理ブロック１１２への書き込みを終了する（ｔ９）。ＣＰＵ２０１は、書き込みの終了と共にタスク管理ブロック１１２のロックを解放する（ｔ９）。ワード書き込み部１１６は、タスク管理ブロック１１２への書き込みの終了（ｔ９）の直後にトレースエリア１０７への書き込みを終了する（ｔ１０）。
【００７４】
ここで、トレースエリア１０７への書き込みの際に、トレースエリアに対するロック処理は一切行われない。そのため、前述のようにＣＰＵ３０１がトレースエリアに対するロックを取得するようなケースは発生しない。更に、タスク管理ブロック１１２への書き込みと、トレースエリア１０７への書き込みと、は並行して行われる。そのため、タスク管理ブロック１１２への書き込み内容と、トレースエリア１０７への書き込み内容と、の整合性が保たれる。
【００７５】
続いて、本実施の形態にかかるマルチプロセッサ装置の効果について改めて説明する。上述のように、本実施の形態にかかるマルチプロセッサ装置は、３つのプロセッサエレメントを有し、図５に示すようにトレースエリア１０７に対するロックを取得することなくトレースエリア１０７への書き込みを行う。詳細には、トレース制御部１０６は、タスク管理ブロック１１２への書き込みを検出し、タスク管理ブロック１１２の書き込み中に書き込みワードを取得する。そして、トレース制御部１０６は、タスク管理ブロック１１２の書き込み中にトレースエリア１０７への書き込みを実行する。これにより、タスク管理ブロック１１２への書き込みとトレースエリア１０７への書き込みをほぼ同時に終了することが出来る。さらに、トレースエリア１０７のロックを考慮しない（ロックを一切扱わない）ことにより、上述したトレースにかかる処理時間の予測可能性の問題を解消することができる。
【００７６】
なお、上述の説明では、３つのプロセッサエレメントを備えるマルチプロセッサ装置について説明したが必ずしもこれに限られない。マルチプロセッサ装置は、４つ以上のプロセッサエレメントを備えても良いことは勿論である。
【００７７】
＜実施の形態３＞
本実施の形態にかかるマルチプロセッサ装置は、各プロセッサエレメントが共通の時刻情報を参照することを特徴とする。以下、本実施の形態にかかるマルチプロセッサ装置について、実施の形態１と異なる点を説明する。
【００７８】
図１２は、本実施の形態にかかるマルチプロセッサ装置の構成を示すブロック図である。マルチプロセッサ装置は、プロセッサエレメント１００及びプロセッサエレメント２００を有する。プロセッサエレメント１００、及びプロセッサエレメント２００は、内部に時計部を有さない。時計部３は、プロセッサエレメント１００及びプロセッサエレメント２００に時刻情報を提供する処理部である。すなわち、時計部３は、前述の時計部１０５（２０５）と同様にトレースデータに含まれる時刻情報をトレース制御部１０６（２０６）に適宜提供する。
【００７９】
他の処理部（トレース制御部１０５、トレース制御部２０５、ＣＰＵ１０１、ＣＰＵ２０１等）は、実施の形態１と同様の動作を行う。
【００８０】
本実施の形態にかかるマルチプロセッサ装置では、複数のプロセッサエレメントに対して、単一の時計部３のみが備えられる構成である。すなわち、各プロセッサエレメント（１００、２００）は、内部に時計部を有する必要が無くなる。これにより、各プロセッサエレメント（１００、２００）の構成が簡易となり、マルチプロセッサ装置全体としてのシステムコストを低減することができる。さらに、本実施の形態にかかるマルチプロセッサ装置は、実施の形態１と同様に、トレースデータの転送による共有バスの混雑を回避できるという効果も奏する。
【００８１】
なお、上述の説明（図１２）では、プロセッサエレメントが２つであるものとして説明したが、３つ以上のプロセッサエレメントを持つマルチプロセッサ装置において単一の時計部を持つ構成としても良いことは勿論である。
【００８２】
＜実施の形態４＞
本実施の形態にかかるマルチプロセッサ装置は、上述のトレース制御部に相当する処理をプログラム実行により実現することを特徴とする。以下、本実施の形態にかかるマルチプロセッサ装置について、実施の形態１と異なる点を中心に説明する。
【００８３】
図１３は、本実施の形態にかかるマルチプロセッサ装置の構成を示すブロック図である。本実施の形態では、システムコール１１０もしくは２１０によってタスク管理ブロック１１２への書き込みが生じた場合に、時計部１０５から時刻情報が取得され、当該時刻情報もタスク管理ブロック１１２に書き込まれる。また、時計部１０５と２０５は同期されている。そのため、ある時刻において、いずれかの時計部に対し、いずれかのプロセッサから時刻を読み出したとしても同じ時刻が取得できる。
【００８４】
プロセッサエレメント１００及びプロセッサエレメント２００は、ハードウェアエミュレータの一機能として実現されていたトレース制御部を有さない。これに代わり、トレースアプリケーション１１７、２１７が動作する構成である。
【００８５】
ＣＰＵ１０１は、図示しない図示しないＨＤＤ（Hard Disc Drive）等の補助記憶装置からトレースアプリケーション１１７のプログラムを読み出す。ＣＰＵ１０１は、読み出したプログラムを、ハードウェア資源（記憶部１０２等）を利用して実行することによりトレースアプリケーション１１７を動作させる。
【００８６】
トレースアプリケーション１１７は、タスク管理ブロック１１２への書き込み内容に応じてトレースエリア１０７にトレースデータを書き込むアプリケーションである。すなわち、トレースアプリケーション１１７は、トレース制御部１０６と略対応する処理を行う。
【００８７】
詳細には、トレースアプリケーション１１７は、ディスパッチャ１１１から呼び出され、ディスパッチを行ったという情報と時計部１０５から読み出した時刻情報をトレースエリア１０７に書き込むとともに、直前にシステムコール１１０もしくは２１０によって行われたタスク管理ブロック１１２への書き込み内容、及び時刻情報をトレースエリア１０７に書き込む。
【００８８】
上述の構成によっても、実施の形態１と同様の効果、すなわち共有バス１を介して送受信される情報量を低減することができ、共有バス１を介した確実な情報伝達を実現することができる。
【００８９】
以上、本発明を上記実施形態に即して説明したが、上記実施形態の構成にのみ限定されるものではなく、本願特許請求の範囲の請求項の発明の範囲内で当業者であればなし得る各種変形、修正、組み合わせを含むことは勿論である。
【００９０】
例えば、本発明にかかるマルチプロセッサ装置は、対称型マルチプロセッサ型であってもよく、非対称型マルチプロセッサ型であってもよい。また、本発明にかかるマルチプロセッサ装置は、マイクロコンピュータ（マイコン）に組み込まれても良く、他の用途に用いられても良い。
【００９１】
上述のＯＳ（１０８、２０８）プログラム及びトレースプログラム（１１７、２１７）は、前述のように任意のコンピュータ内で動作するプログラムとして実現される。プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（random access memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【符号の説明】
【００９２】
１  共有バス
２  トレース出力部
３  時計部
１００、２００、３００  プロセッサエレメント
１０１、２０１、３０１  ＣＰＵ
１０２、２０２、３０２  記憶部
１０３、２０３、３０３  レジスタ
１０４、２０４、３０４  バス制御部
１０５、２０５、３０５  トレース制御部
１０６、２０６、３０６  時計部
１０７、２０７、３０７  トレースエリア
１０８、２０８、３０８  ＯＳ（オペレーティングシステム）
１０９、２０９、３０９  タスク
１１０、２１０、３１０  システムコール
１１１、２１１、３１１  ディスパッチャ
１１２、２１２、３１２  タスク管理ブロック
１１３、２１３、３１３  ロック変数
１１４  監視部
１１５  ワード読み出し部
１１６  ワード書き込み部
１１７、２１７  トレースアプリケーション
【図１】
0005844134.tif 000002
【図２】
0005844134.tif 000003
【図３】
0005844134.tif 000004
【図４】
0005844134.tif 000005
【図５】
0005844134.tif 000006
【図６】
0005844134.tif 000007
【図７】
0005844134.tif 000008
【図８】
0005844134.tif 000009
【図９】
0005844134.tif 000010
【図１０】
0005844134.tif 000011
【図１１】
0005844134.tif 000012
【図１２】
0005844134.tif 000013
【図１３】
0005844134.tif 000014