(57)【要約】 【課題】  システムコール以降の命令を遅延することなく実行することができるマルチプロセッサシステムを提供する。【解決手段】  タスク管理領域１１には、複数のタスクの状態とタスク間の同期又は通信のためのオブジェクトの状態とを管理するための、各タスク及びオブジェクトを識別する識別子が格納される。コマンド送信レジスタ８には、各プロセッサに対して発行されるコマンドが格納される。コマンド受信レジスタ７には、各プロセッサで実行中のタスクが発行するコマンドが格納される。プロセッサ状態レジスタ６には、各プロセッサの状態が格納される。タスク制御モジュール５は、コマンド受信レジスタ７を参照してタスク管理領域１１中の状態を更新し、且つ、プロセッサ状態レジスタ６を参照して複数のプロセッサから１つのプロセッサを選択し、選択したプロセッサに対する割込み信号と、コマンド送信レジスタ８に格納するコマンドとを生成する。【選択図】    図１
2007047968.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサ間で共有メモリを共有し、前記共有メモリを用いて複数のプロセッサが並列に動作するマルチプロセッサシステムであって、
複数のタスクの状態と前記タスク間の同期又は通信のためのオブジェクトの状態とを管理するための、各タスク及びオブジェクトを識別する識別子が格納されるタスク管理領域と、
前記プロセッサに対して発行される第１のコマンドが前記プロセッサ毎に格納されるコマンド送信レジスタと、
前記プロセッサで実行中のタスクが発行する第２のコマンドが前記プロセッサ毎に格納されるコマンド受信レジスタと、
各プロセッサが実行中のタスクが識別可能であるように、各プロセッサの状態が格納されるプロセッサ状態レジスタと、
前記コマンド受信レジスタを参照して前記タスク管理領域中の前記状態を更新し、且つ、前記プロセッサ状態レジスタを参照して複数の前記プロセッサから１つのプロセッサを選択し、選択した前記プロセッサに対する割込み信号と、前記コマンド送信レジスタに格納する前記第１のコマンドとを生成するタスク制御モジュールと、
を備えるマルチプロセッサシステム。
【請求項２】
前記コマンド送信レジスタは、
前記第１のコマンドに係る、前記プロセッサに対する操作の内容を格納するコマンド部と、
前記プロセッサを操作する際に用いられるデータが書き込まれた前記共有メモリのアドレスを格納するアドレス部と、
前記第１のコマンドの格納状態を格納する第１の状態部と、
を備え、
前記コマンド受信レジスタは、
前記第２のコマンドに係る、前記オブジェクトに係る前記識別子を格納する識別部と、
前記オブジェクトに対する操作の内容を格納するコマンド部と、
前記オブジェクトに対する操作に用いられるデータが書き込まれた前記共有メモリのアドレスを格納するアドレス部と、
前記第２のコマンドの格納状態を格納する第２の状態部と、
を備える請求項１に記載のマルチプロセッサシステム。
【請求項３】
前記タスク制御モジュールによる前記プロセッサの選択から除かれる前記プロセッサを示すプロセッサマスクレジスタと、
前記タスクのうちの特定のタスクと前記プロセッサとの組み合わせを記憶したタスクテーブルと、
をさらに備え、前記タスク制御モジュールは、前記プロセッサマスクレジスタ及び前記タスクテーブルの少なくとも一方を参照して、前記プロセッサを選択することを特徴とする請求項１又は請求項２に記載のマルチプロセッサシステム。
【請求項４】
前記プロセッサは、他のプロセッサにデータを出力するデータ出力ポートと、他のプロセッサからデータを受け取るデータ入力ポートとを有し、
第１のプロセッサの前記データ出力ポートと、前記第１のプロセッサとは異なる第２のプロセッサの前記データ入力ポートとを選択的に接続するセレクタをさらに有することを特徴とする請求項１〜請求項３のいずれかの項に記載のマルチプロセッサシステム。
【請求項５】
前記プロセッサは、回路モジュールに対する制御をも実行することを特徴とする請求項１〜請求項４のいずれかの項に記載のマルチプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサに対してタスクの割り当てを行い、タスクの並列処理を行うマルチプロセッサシステムに関する。
【背景技術】
【０００２】
従来、複数のプロセッサが並列に動作するマルチプロセッサシステムは、複数のプロセッサと、各プロセッサから共通にアクセス可能な１つの共有メモリと、各プロセッサと共有メモリを接続するシステムバスとから構成されていた。そして、マルチタスク・オペレーティングシステムは、共有メモリ上に実装され、共有メモリ上のスケジューラは、割込み駆動でマルチプロセッサタスク制御を行っていた（例えば特許文献１参照）。
【０００３】
これにより、マルチプロセッサシステム上の、あるプロセッサでタスクを実行中にタスクスケジューリング処理が必要となった場合、その実行中のタスクの優先度と、プロセッサの割り当て待ち状態にあるタスク群の優先度のほかに、他のプロセッサで実行中のタスクの優先度をも考慮して、最適なスケジューリングが可能となっている。
【特許文献１】特開平８−３６５３３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
従来技術では、複数のプロセッサによるシステムコールの呼び出しの結果、同時に２つのタスク状態（アイドル状態、レディ状態、タスク実行状態）が変更される場合、一方のプロセッサによるタスク状態の変更が終了するまで、他方のプロセッサによるタスク状態の変更が開始されない。このため、他方のプロセッサが呼び出したシステムコール以降の命令の実行が遅延してしまう場合がある。
【０００５】
本発明は、上述した問題点に鑑みてなされたものであって、同時に２つ以上のプロセッサがシステムコールを呼び出した場合においても、いずれのプロセッサも、システムコール以降の命令を遅延することなく実行することができる最適なスケジューリングが可能なマルチプロセッサシステムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明は、上記の課題を解決するためになされたもので、請求項１に記載の発明は、複数のプロセッサ間で共有メモリを共有し、前記共有メモリを用いて複数のプロセッサが並列に動作するマルチプロセッサシステムであって、複数のタスクの状態と前記タスク間の同期又は通信のためのオブジェクトの状態とを管理するための、各タスク及びオブジェクトを識別する識別子が格納されるタスク管理領域と、前記プロセッサに対して発行される第１のコマンドが前記プロセッサ毎に格納されるコマンド送信レジスタと、前記プロセッサで実行中のタスクが発行する第２のコマンドが前記プロセッサ毎に格納されるコマンド受信レジスタと、各プロセッサが実行中のタスクが識別可能であるように、各プロセッサの状態が格納されるプロセッサ状態レジスタと、前記コマンド受信レジスタを参照して前記タスク管理領域中の前記状態を更新し、且つ、前記プロセッサ状態レジスタを参照して複数の前記プロセッサから１つのプロセッサを選択し、選択した前記プロセッサに対する割込み信号と、前記コマンド送信レジスタに格納する前記第１のコマンドとを生成するタスク制御モジュールとを備えるマルチプロセッサシステムである。
【０００７】
請求項２に記載の発明は、請求項１に記載のマルチプロセッサシステムにおいて、前記コマンド送信レジスタは、前記第１のコマンドに係る、前記プロセッサに対する操作の内容を格納するコマンド部と、前記プロセッサを操作する際に用いられるデータが書き込まれた前記共有メモリのアドレスを格納するアドレス部と、前記第１のコマンドの格納状態を格納する第１の状態部とを備え、前記コマンド受信レジスタは、前記第２のコマンドに係る、前記オブジェクトに係る前記識別子を格納する識別部と、前記オブジェクトに対する操作の内容を格納するコマンド部と、前記オブジェクトに対する操作に用いられるデータが書き込まれた前記共有メモリのアドレスを格納するアドレス部と、前記第２のコマンドの格納状態を格納する第２の状態部とを備える。
【０００８】
請求項３に記載の発明は、請求項１又は請求項２に記載のマルチプロセッサシステムにおいて、前記タスク制御モジュールによる前記プロセッサの選択から除かれる前記プロセッサを示すプロセッサマスクレジスタと、前記タスクのうちの特定のタスクと前記プロセッサとの組み合わせを記憶したタスクテーブルとをさらに備え、前記タスク制御モジュールは、前記プロセッサマスクレジスタ及び前記タスクテーブルの少なくとも一方を参照して、前記プロセッサを選択することを特徴とする。
【０００９】
請求項４に記載の発明は、請求項１〜請求項３のいずれかの項に記載のマルチプロセッサシステムにおいて、前記プロセッサは、他のプロセッサにデータを出力するデータ出力ポートと、他のプロセッサからデータを受け取るデータ入力ポートとを有し、第１のプロセッサの前記データ出力ポートと、前記第１のプロセッサとは異なる第２のプロセッサの前記データ入力ポートとを選択的に接続するセレクタをさらに有することを特徴とする。
【００１０】
請求項５に記載の発明は、請求項１〜請求項４のいずれかの項に記載のマルチプロセッサシステムにおいて、前記プロセッサは、回路モジュールに対する制御をも実行することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、同時に２つ以上のプロセッサがシステムコールを呼び出した場合においても、いずれのプロセッサも、システムコール以降の命令を遅延することなく実行することができる最適なスケジューリングが可能になるという効果が得られる。
【発明を実施するための最良の形態】
【００１２】
以下、図面を参照し、本発明を実施するための最良の形態について説明する。図１は、本発明の第１の実施形態によるマルチプロセッサシステムの構成を示している。本実施形態によるマルチプロセッサシステムは３個（ｎ＝２）のプロセッサ（プロセッサ１，プロセッサ２，プロセッサ３）で構成されている。プロセッサ１〜プロセッサ３は、共有メモリ４を用いて並列に動作可能である。タスク制御モジュール５は、プロセッサ１〜プロセッサ３に対するタスクの割り当てを制御するハードウェアである。
【００１３】
プロセッサ状態レジスタ６は各プロセッサの状態を記憶する。各プロセッサがタスクを実行している状態においては、プロセッサ状態レジスタ６には、各プロセッサがどのタスクを実行しているのかが分かるように、タスクの識別情報を含む情報が格納される。コマンド受信レジスタ７は、各プロセッサが実行しているタスクが発行するコマンドを記憶する。コマンド受信レジスタ７に格納されたコマンドは、タスク制御モジュール５によって読み出されて、実行される。コマンド送信レジスタ８は、各プロセッサに対して発行されるコマンドを記憶する。
【００１４】
プロセッサ状態レジスタ６、コマンド受信レジスタ７、及びコマンド送信レジスタ８は、その各々がプロセッサ数分のレジスタ群で構成されており、本実施形態では３ワード分のレジスタで構成されている。ただし、１ワード分のデータ幅はプロセッサ状態レジスタ６、コマンド受信レジスタ７、及びコマンド送信レジスタ８で夫々異なる。プロセッサ状態レジスタ６は、所望の状態数を表現し得るビット数分のデータ幅で１ワード分のレジスタが構成されている。
【００１５】
コマンド受信レジスタ７の１ワード分のレジスタは、識別部、コマンド部、アドレス部、及び状態部から構成されている。識別部には、タスク間の同期又は通信等を行うために必要なオブジェクト（後述するメールボックス等）の識別子が格納される。コマンド部には、識別部によって識別されるオブジェクトに対する操作の内容が格納される。アドレス部には、オブジェクトに対する操作に用いられるデータが書き込まれた共有メモリ４のアドレスが格納される。状態部には、各プロセッサが実行しているタスクが発行するコマンドの格納状態が格納される。コマンドの格納状態とは、コマンド受信レジスタ７に書き込まれたコマンドが実際に処理（実行）されたか否かの状態を示している。すなわち、タスク制御モジュール５がコマンドを受け取ったのみで、コマンドに応じた処理をまだ行っていない場合にはコマンド未実行状態であり、コマンドに応じた処理が終わっている場合にはコマンド実行完了状態となる。
【００１６】
コマンド送信レジスタ８の１ワード分のレジスタは、コマンド部、アドレス部、及び状態部から構成されている。コマンド部には、各プロセッサに対する操作の内容が格納される。アドレス部には、各プロセッサを操作する際に用いるデータが書き込まれた共有メモリ４のアドレスが格納される。状態部には、各プロセッサに対して発行されるコマンドの格納状態が格納される。コマンドの格納状態とは、コマンド受信レジスタ７の場合と同様に、コマンド送信レジスタ８に書き込まれたコマンドが実際に処理（実行）されたか否かの状態を示している。
【００１７】
プロセッサマスクレジスタ９及びタスクテーブル１０はどちらも、タスク制御モジュール５がプロセッサ１〜プロセッサ３のいずれかにタスクを割り当てる際に参照する情報を記憶する。プロセッサマスクレジスタ９は、タスク制御モジュール５が、タスクを割り当てるプロセッサを選択する際に、その選択から除かれるプロセッサの情報が格納されている。図２に示されるように、３個のプロセッサを有する本マルチプロセッサシステムの場合、プロセッサマスクレジスタ９は３ビットとなり、使用しないプロセッサに該当するビットに０、使用する可能性があるプロセッサに該当するビットに１が書き込まれる。図２の場合、プロセッサ３は決して使われることなく、状況に応じてプロセッサ１或いはプロセッサ２が使われる。
【００１８】
タスクテーブル１０は、タスクと、そのタスクを実行することができるプロセッサとの組み合わせの情報が格納されている。図３に示されるように、プロセッサが３個でタスクが４つの場合には、タスクテーブル１０は、４つの要素を持つテーブルとなる。図３の例の場合には、タスクＩＤが１のタスクはプロセッサ１で実行され、タスクＩＤが２のタスクはプロセッサ３で実行される。該当プロセッサが空いていないときは、必要に応じてタスクは実行待ちの状態（ウェイト状態）になる。また、プロセッサとして「−１」が指定されているタスクは、特定のプロセッサを特に指示しないタスクである。
【００１９】
タスク管理領域１１は、タスクの管理に必要な情報（例えば、タスクが実行待ちの状態（ウェイト状態）にあるのか、実行可能な状態（レディ状態）にあるのかを示すもの）と、タスク間の同期又は通信等を行うために必要なオブジェクト（メールボックス、セマフォ、イベントフラグ等）とが格納される領域である。ここで、ウェイト状態、レディ状態が格納される領域は、各々、ウェイトキュー、レディキューと呼ばれ、ウェイトキュー、レディキューに状態を書き込む操作をキューイングと呼ぶ。
【００２０】
メールボックス内のデータ量は、タスク管理領域１１によって管理される。管理されるデータ量は、メールボックスにデータが送信される毎に増加し、メールボックスからデータが読み出される毎に減少する。あるタスクが空のメールボックスを読み出そうとすると、そのタスクはウェイト状態になる。その状態で対象のメールボックスにデータが書き込まれる（管理されているデータ量が０より大きくなる）と、メールボックスを待っているタスクはウェイト状態から実行可能状態に遷移する。各メールボックスの区別は、メールボックスＩＤと呼ばれる、各メールボックスに対してユニークに割り当てられた数値によって行われる。
【００２１】
なお、オブジェクトの例として挙げたセマフォは、異なるタスクが同時に１つの資源（例えばシリアル通信ドライバ等）を使わないようにするためのフラグとして用いられるものであり、イベントフラグは、割込み等のイベントの発生を他のタスクへ伝えるためのものである。本実施形態ではタスク管理領域１１と共有メモリ４は、物理的に異なる領域であるものとしている。
【００２２】
具体的には、共有メモリ４は、ＳＤＲＡＭに代表される外部記憶素子であり、タスク管理領域１１は、タスクの制御を高速に行うため、ＳＤＲＡＭよりも高速に読み書きが可能な内蔵ＳＲＡＭに代表される、ＬＳＩ内部に格納されるメモリである。
【００２３】
プロセッサ１〜プロセッサ３及びタスク制御モジュール５は、システムバスＢを介して共有メモリ４、プロセッサ状態レジスタ６、コマンド受信レジスタ７、及びコマンド送信レジスタ８にアクセスが可能である。また、本実施形態ではオブジェクトの例として、タスク間のデータ授受に用いられるメールボックスを挙げて説明を行う。
【００２４】
次に、図４〜図６を適宜参照し、本実施形態によるマルチプロセッサシステムの動作を説明する。図６は、図４〜図５において割込みが発生した際に実行される動作を示している。マルチプロセッサシステムの起動直後、タスク管理領域１１のレディキュー及びウェイトキューにはいずれのタスクもキューイングされておらず、各プロセッサはタスクを実行していない状態である。これを「アイドル状態」と呼ぶ。「アイドル状態」のプロセッサは、何も処理を行わないアイドルプロセスを実行し続ける。本実施形態によるマルチプロセッサシステムはプロセッサ数と同じ数のレジスタを有するプロセッサ状態レジスタ６を備えており、起動直後はプロセッサ状態レジスタ６の全てのレジスタが「アイドル状態」を示している。
【００２５】
このとき、タスク制御モジュール５は、実行可能状態にあるタスクを、優先順位に従って各プロセッサに割り当てる。この際、プロセッサ状態レジスタ６の全てのレジスタが「アイドル状態」を示しているため、プロセッサ１〜プロセッサ３の全てがタスク割り当て先の候補となる。実行可能状態にあるタスクは以下の要領でプロセッサに割り当てられる。まず、タスク制御モジュール５は、タスクを実行させるプロセッサを選択する（ステップＳ２０）。この際にタスク制御モジュール５は、プロセッサマスクレジスタ９及びタスクテーブル１０の内容に基づいてプロセッサを選択する。
【００２６】
続いて、タスク制御モジュール５はプロセッサ状態レジスタ６を参照し、ステップＳ２０で選択したプロセッサの状態が「アイドル状態」であるか否かを判断する（ステップＳ２１）。マルチプロセッサシステムの起動直後は全てのプロセッサが「アイドル状態」であるため（ステップＳ２１においてＹＥＳと判断）、タスク制御モジュール５は、タスクのプログラムが格納されているアドレスや、タスクが利用するスタックのアドレス等の情報を共有メモリ４に書き込む。また、タスクを実行するプロセッサとしてプロセッサ１が選択されたとすると、タスク制御モジュール５は、プロセッサ１に対応したコマンド送信レジスタ８のアドレス部に、タスクのプログラムが格納されているアドレス等の情報を書き込んだ共有メモリ４のアドレスを書き込み、コマンド送信レジスタ８のコマンド部に「タスク実行コマンド」を書き込む。上記の動作の後、タスク制御モジュール５は、プロセッサ１に対して割込みを発生する。この際にタスク制御モジュール５は割込み信号を発生してプロセッサ１へ出力する（ステップＳ２５）
【００２７】
プロセッサ１は、割込み処理の中でコマンド送信レジスタ８のコマンド部を読み出し（ステップＳ２８）、コマンド部の内容に基づいて次の処理を決定する（ステップＳ２９）。コマンド送信レジスタ８のコマンド部には「タスク実行コマンド」が書き込まれているので、プロセッサ１は、コマンド送信レジスタ８のアドレス部に書き込まれた共有メモリ４のアドレスから必要に応じてデータを読み出し、コマンド送信レジスタ８のコマンド部から読み出したコマンドに応じた動作（この場合、タスクの実行）を行う（ステップＳ３０）。
【００２８】
続いて、プロセッサ１は、プロセッサ１に対応するプロセッサ状態レジスタ６中の情報を「アイドル状態」から「タスク実行状態」に変更し、コマンド送信レジスタ８の状態部に「コマンド実行完了」を書き込む（ステップＳ３２）。ここで、プロセッサ状態レジスタ６に書き込まれる「タスク実行状態」は、どのタスクを実行中であるか判定できるような値である。また、タスク制御モジュール５は、プロセッサ状態レジスタ６が「アイドル状態」であっても、対応するプロセッサのコマンド送信レジスタ８の状態部が「コマンド実行完了」でない限り、対応するプロセッサに対する操作は行わない。
【００２９】
タスク起動に注目した場合の、あるプロセッサの状態遷移は図７のようになる。電源投入直後のプロセッサ状態レジスタ６は上記のように「アイドル状態」を示しており、コマンド送信レジスタ８の状態部には「コマンド実行完了」が書き込まれている。このプロセッサに対応したプロセッサ状態レジスタ６が「アイドル状態」であり、コマンド送信レジスタ８の状態部が「コマンド実行完了」なので、タスクにこのプロセッサが割り当てられる。続いて、タスク制御モジュール５は、コマンド送信レジスタ８を介して、このプロセッサにタスク実行を指示する（図５のステップＳ２５）。この際に、コマンド送信レジスタ８の状態部は、タスク制御モジュール５によって「コマンド実行完了」以外（本実施形態では「コマンド実行中」）に書き換えられる。
【００３０】
タスクの起動が終了すると、プロセッサ状態レジスタ６は「アイドル状態」から「タスク実行状態」となり、同時にコマンド送信レジスタ８の状態部は「コマンド実行完了」となる（図６のステップＳ３２）。また、何らかの理由でタスクが終了するか、タスクがウェイト状態に遷移すると、プロセッサ状態レジスタ６は「アイドル状態」に戻る。
【００３１】
次に、タスクのディスパッチ（タスクに対するプロセッサの割り当て）について説明する。プロセッサ１でタスクＡが実行中であり、プロセッサ２及びプロセッサ３は「アイドル状態」であるとする。また、プロセッサマスクレジスタ９の設定により、プロセッサ２に対するタスクの割り当てが不可能であり、タスクＢはメールボックス受信待ちであるとする。このとき、タスクＢはタスク管理領域１１のウェイトキューにキューイングされている。
【００３２】
プロセッサ１で実行中のタスクＡでタスクＢのメールボックスにデータを送信する場合、プロセッサ１はまず、送信するデータを共有メモリ４に書き込む。続いて、プロセッサ１は、プロセッサ１に対応するコマンド受信レジスタ７の状態部を読み出す。読み出した値が「コマンド書き込み可」であった場合には、プロセッサ１はコマンド受信レジスタ７のアドレス部に、データを書き込んだ共有メモリ４のアドレスを書き込み、コマンド部に「メールボックス送信」コマンドを書き込み、状態部に「コマンド書き込み完了」を書き込む。
【００３３】
コマンド受信レジスタ７の状態部に書き込みが行われると、タスク制御モジュール５は、コマンド受信レジスタ７のコマンド部を読み出して、コマンド部の内容に応じた動作（この場合、メールボックスへの送信）を行う（ステップＳ１２〜Ｓ１４）。ステップＳ１２においては、タスク制御モジュール５は、コマンド受信レジスタ７の状態部に書き込みがあるか否かを判断する。書き込みがあった場合、ステップＳ１３において、タスク制御モジュール５はコマンド部の内容を判定し、コマンド部の内容に基づいて、ステップＳ１４においてメールボックスへの送信を行う。コマンド部が「メールボックス送信」以外のシステムコール処理であれば、その処理が行われる。コマンド受信レジスタ７の状態部には、プロセッサ１によって「コマンド書き込み可」が書き込まれる。
【００３４】
また、メールボックスでデータを受信するため、タスク管理領域１１のウェイトキューにキューイングされたタスクＢは、当該ウェイトキューから取り出されてタスク管理領域１１のレディキューにキューイングされ、メールボックス受信待ちから実行可能状態へ状態が遷移する（ステップＳ１６）。待ち状態から実行可能状態に遷移したタスクがあり、且つタスクの割り当てが可能なプロセッサがある場合、タスク制御モジュール５は、ディスパッチが発生した旨を記憶するフラグを立てる。ステップＳ１７においては、このフラグが立っているか否かが判定され、フラグが立っている場合にはステップＳ１８に進み、フラグが立っていない場合にはステップＳ１２に戻る。
【００３５】
フラグが立っている場合、タスク制御モジュール５はタスクテーブル１０の内容を参照し（ステップＳ１８）、タスクテーブル１０にタスクＢの記載がある場合には、その内容に従って、タスクＢを割り当てるプロセッサを選択する（ステップＳ２０）。また、タスクテーブル１０にタスクＢの記載がない場合（特定のプロセッサの指定がない場合）、タスク制御モジュール５は、プロセッサマスクレジスタ９とプロセッサ状態レジスタ６の内容を参照し、タスクＢをプロセッサ３へ割り当てる（ステップ１９、２０）。この際に、タスク管理領域１１のレディキューにキューイングされたタスクＢは、当該レディキューから取り出される。タスクの実行に至る一連の処理の手順は前述した通りである。
【００３６】
次に、タスクのプリエンプト（実行中のタスクの中断と他のタスクのプロセッサへの割り当て）について説明する。プロセッサ１でタスクＡが実行中であり、プロセッサ２でタスクＢが実行中であり、プロセッサ３でタスクＣが実行中であるとする。また、タスクＤはメールボックス受信待ちであり、タスクＡ〜Ｃよりも優先度が高いものとする。さらに、タスクテーブル１０によって、タスクＤは、プロセッサ３でのみ実行され得る設定であることが示されているとする。
【００３７】
プロセッサ１で実行中のタスクＡが、前述したようにメールボックスへデータを送信すると、タスク制御モジュール５は、タスク管理領域１１にあるウェイトキューからタスクＤを取り出し、タスク管理領域１１にあるレディキューにキューイングして、メールボックス受信待ちから実行可能状態へ状態を遷移させる（ステップＳ１６）。続いて、タスク制御モジュール５は、ディスパッチの発生を示すフラグの判定を行った後（ステップＳ１７）、タスクテーブル１０を参照し、タスクＤに関する内容が格納されているか否かを判断する（ステップＳ１８）。タスクＤはプロセッサ３でのみ実行可能であることを示す情報がタスクテーブル１０に格納されており、この判断結果はＹＥＳとなる。タスク制御モジュール５は、タスクテーブル１０の内容に基づいて、タスクＤをプロセッサ３に割り当てることを決定する（ステップＳ２０）。
【００３８】
続いて、タスク制御モジュール５は、プロセッサ３に対応するプロセッサ状態レジスタ６のレジスタを参照し、プロセッサ３がアイドル状態であるか否かを判断する（ステップＳ２１）。プロセッサ３はアイドル状態ではないため、この判断結果はＮＯとなる。プロセッサ３に対応するプロセッサ状態レジスタ６のレジスタには、タスクＣを実行中であることが示されている。タスク制御モジュール５はタスク管理領域１１を参照し、プロセッサ３で実行中のタスクＣよりも実行予定のタスクＤの方が、優先度が高いか否かを判断する（ステップＳ２２）。タスクＤの方がタスクＣよりも優先度が高いため、この判断結果はＹＥＳとなる。
【００３９】
タスク制御モジュール５は、プロセッサ３で実行中のタスクＣをプリエンプトするコマンドを発行する。タスクのプリエンプトは以下の手順で行われる。タスク制御モジュール５は、プロセッサ３に対応するコマンド送信レジスタ８のコマンド部に「タスクプリエンプトコマンド」を書き込む。続いて、タスク制御モジュール５は、プロセッサ３に対して割込みを発生する。この際にタスク制御モジュール５は割込み信号を発生してプロセッサ３へ出力する（ステップＳ２３）。
【００４０】
プロセッサ３は、割込み処理の中でコマンド送信レジスタ８のコマンド部を読み出し（ステップＳ２８）、コマンド部の内容に基づいて次の処理を決定する（ステップＳ２９）。コマンド送信レジスタ８のコマンド部には「タスクプリエンプトコマンド」が書き込まれているので、プロセッサ３は、実行中のタスクＣの中断処理を行う（ステップＳ３１）。このとき、タスクＣはタスク管理領域１１のレディキューにキューイングされる。タスクＣの中断処理の終了後、プロセッサ３は、プロセッサ３に対応するプロセッサ状態レジスタ６を「タスク実行状態」から「アイドル状態」に変更し、コマンド送信レジスタ８の状態部に「コマンド実行完了」を書き込む（ステップＳ３３）。
【００４１】
タスク制御モジュール５は、プロセッサ３に対応するコマンド送信レジスタ８の状態部から「コマンド実行完了」を読み出し（ステップＳ２４）、「アイドル状態」になったプロセッサ３にタスクＤを実行させる。このとき、タスクＤは、タスク管理領域１１のレディキューから取り出される。タスクの実行に至る一連の処理の手順は前述した通りである（ステップＳ２５〜２６）。最後に、タスク制御モジュール５は、タスク管理領域１１で管理されているタスクＣの状態を実行状態から実行可能状態に遷移させる（ステップＳ２７）。
【００４２】
上述したように、本実施形態のマスクプロセッサシステムにおいて、タスク制御モジュール５は、あるタスクを実行する際に、コマンド受信レジスタ７を参照してタスク管理領域１１の状態を更新する（図４のステップＳ１２〜Ｓ１６）。タスク制御モジュール５はプロセッサ状態レジスタ６、プロセッサマスクレジスタ９、及びタスクテーブル１０を参照し、複数のプロセッサの中から、タスクを実行する１つのプロセッサを選択し（図４のステップＳ１８〜Ｓ２０）、そのプロセッサに対する割込み信号と、コマンド送信レジスタ８に格納するコマンドとを発生する（図５のステップＳ２５）。これによって、同時に２つ以上のプロセッサがシステムコールを呼び出した場合においても、いずれのプロセッサも、他のプロセッサのタスク状態の変更に関わりなく、システムコール以降の命令を遅延することなく実行することができる最適なスケジューリングが可能となる。
【００４３】
例えば、プロセッサ１で実行中のタスクＡが、あるメールボックスにデータを送信すると同時に、プロセッサ２で実行中のタスクＢが別のメールボックスにデータを送信するものとする。従来技術（各プロセッサがタスク管理領域１１を直接操作する場合）では、図８（ａ）に示されるように、プロセッサ１によるタスク管理領域１１の操作が終了するまで、プロセッサ２はタスク管理領域１１の操作を行うことができず、メールボックスへの送信処理を待たなければならない。これに対して、本実施形態では、各プロセッサによるメールボックスへの送信指示が一旦コマンド受信レジスタ７に格納されてから、適宜タスク制御モジュール５が実際のメールボックスへのデータ送信を行うため、プロセッサ１がプロセッサ２を待たせることはなく、プロセッサ１、プロセッサ２ともメールボックス送信に続く処理を遅滞なく実行することができる。
【００４４】
また、本実施形態のマルチプロセッサシステムにおいて、プロセッサを操作する際に用いられるデータ、及びオブジェクトに対する操作に用いられるデータが共有メモリ４に格納され、共有メモリ４のアドレスのみが、コマンド受信レジスタ７及びコマンド送信レジスタ８を介して、タスク制御モジュールと各プロセッサとの間で授受される。これによって、タスク制御モジュール５と各プロセッサの通信量を減ずることができる。
【００４５】
また、本実施形態のマルチプロセッサシステムにおいて、タスク制御モジュール５は、プロセッサマスクレジスタ９及びタスクテーブル１０のうちの少なくとも一方を参照して、プロセッサの選択を実行する。これによって、タスクを実行するプロセッサが制限されるので、消費電力を削減することができる。また、タスクに応じて、そのタスクを実行するのに適した命令セットを持つプロセッサにタスクを実行させることができる。
【００４６】
次に、本発明の第２の実施形態を説明する。図９は、本実施形態によるマルチプロセッサシステムの構成を示している。本実施形態では、セレクタ３４を介して各プロセッサのデータ送受信専用ポートが接続されており、システムバスＢを介さずにプロセッサ間でデータの授受を行うことが可能である。また、プロセッサ２は、タスク制御モジュール５によって割り当てられたタスクの処理のみならず、回路モジュール３５の制御も行う。これによって、回路モジュール３５を制御するための専用のプロセッサが不要となり、マルチプロセッサシステムの規模を削減することができる。回路モジュール３５は、例えばＸＤカードのようなメディアにデータを記録するためのメディアＩ／Ｆ回路や、モータ等を駆動するモータドライバ回路、或いは基本的な画像処理パイプライン回路等である。タスク制御モジュール５の動作に関しては第１の実施形態と同様である。
【００４７】
図１０はセレクタ３４の構成を示している。プロセッサ１は、プロセッサ２及びプロセッサ３にデータを出力するためのデータ出力ポート１ａと、プロセッサ２及びプロセッサ３からデータを受け取るためのデータ入力ポート１ｂとを備えている。プロセッサ２は、プロセッサ１及びプロセッサ３にデータを出力するためのデータ出力ポート２ａと、プロセッサ１及びプロセッサ３からデータを受け取るためのデータ入力ポート２ｂとを備えている。プロセッサ３は、プロセッサ１及びプロセッサ２にデータを出力するためのデータ出力ポート３ａと、プロセッサ１及びプロセッサ２からデータを受け取るためのデータ入力ポート３ｂとを備えている。セレクタ３４は、異なるプロセッサのデータ出力ポートとデータ入力ポートとを選択的に接続する。
【００４８】
セレクタ３４はレジスタ３４ａ、ＦＩＦＯ３４ｂ，３４ｃ，３４ｄ、および入力選択部３４ｅ，３４ｆ，３４ｇを備えている。レジスタ３４ａには各プロセッサからアクセスが可能である。例えば、プロセッサ１からプロセッサ２へデータが渡される場合、プロセッサ１は、入力選択部３４ｆがプロセッサ１からの入力を選択するようにレジスタ３４ａに値を書き込む。続いて、プロセッサ１は、入力選択部３４ｆを経由してＦＩＦＯ３４ｃにデータを書き込む。一方、プロセッサ２はＦＩＦＯ３４ｃをポーリングしており、プロセッサ１によってＦＩＦＯ３４ｃにデータが書き込まれると、そのデータを読み出す。なお、本説明においては、プロセッサ２がＦＩＦＯ３４ｃをポーリングするとしたが、ＦＩＦＯ３４ｃがプロセッサ２に対して割込みを発生し、その割込みの応答として、プロセッサ２がＦＩＦＯ３４ｃを読み出すようにしてもよい。
【００４９】
第１の実施形態では、メールボックスへのデータ送信時に、システムバスＢを介してプロセッサ間でデータの受け渡しが行われる。一方、本実施形態では、セレクタ３４を介したプロセッサ間のデータの受け渡しも可能である。デジタルカメラを一例として、あるタスクで画像処理を行い、別のタスクで圧縮処理を行うとすると、プロセッサ間では画像データが授受される。画像データのように大量のデータが授受される場合には、システムバスＢおよび共有メモリ４を介したデータの授受の方が有利である（図１１（ａ）参照）。
【００５０】
しかし、同様にデジタルカメラを一例として、例えば図１１（ｂ）に示されるように、ＡＥ演算を行うタスクと、ＡＥ演算の結果に従って絞りの制御を行うタスクとがある場合、タスク間で授受されるデータはＡＥ演算結果（１Ｗｏｒｄ程度）となる。このようにデータ量が少ないものに関しては、セレクタ３４を介した方が高速にデータを授受することができる。
【００５１】
なお、本実施形態において、回路モジュール３５は１つのみであるが、回路モジュール３５は２個以上あってもよい。この場合、各回路モジュールの制御を各プロセッサで分担することにより、各プロセッサに掛かる割込み負荷を軽減することが可能である。
【００５２】
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成はこれらの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【図面の簡単な説明】
【００５３】
【図１】本発明の第１の実施形態によるマルチプロセッサシステムの構成を示すブロック図である。
【図２】本発明の第１の実施形態によるマルチプロセッサシステムが備えるプロセッサマスクレジスタを説明するための説明図である。
【図３】本発明の第１の実施形態によるマルチプロセッサシステムが備えるタスクテーブルを説明するための説明図である。
【図４】本発明の第１の実施形態によるマルチプロセッサシステムの動作を示すフローチャートである。
【図５】本発明の第１の実施形態によるマルチプロセッサシステムの動作を示すフローチャートである。
【図６】本発明の第１の実施形態によるマルチプロセッサシステムの動作を示すフローチャートである。
【図７】本発明の第１の実施形態によるマルチプロセッサシステムにおけるプロセッサの状態遷移図である。
【図８】本発明の第１の実施形態によるマルチプロセッサシステムによって得られる効果を説明するための説明図である。
【図９】本発明の第２の実施形態によるマルチプロセッサシステムの構成を示すブロック図である。
【図１０】本発明の第２の実施形態によるマルチプロセッサシステムが備えるセレクタの構成を示すブロック図である。
【図１１】本発明の第２の実施形態によるマルチプロセッサシステムによって得られる効果を説明するための説明図である。
【符号の説明】
【００５４】
１，２，３・・・プロセッサ、４・・・共有メモリ、５・・・タスク制御モジュール、６・・・プロセッサ状態レジスタ、７・・・コマンド受信レジスタ、８・・・コマンド送信レジスタ、９・・・プロセッサマスクレジスタ、１０・・・タスクテーブル、１１・・・タスク管理領域、３４・・・セレクタ、３４ａ・・・レジスタ、３４ｂ，３４ｃ，３４ｄ・・・ＦＩＦＯ、３４ｅ，３４ｆ，３４ｇ・・・入力選択部
【図１】
2007047968.tif 000003
【図２】
2007047968.tif 000004
【図３】
2007047968.tif 000005
【図４】
2007047968.tif 000006
【図５】
2007047968.tif 000007
【図６】
2007047968.tif 000008
【図７】
2007047968.tif 000009
【図８】
2007047968.tif 000010
【図９】
2007047968.tif 000011
【図１０】
2007047968.tif 000012
【図１１】
2007047968.tif 000013