(57)【要約】【課題】割込み処理を持つタスクを割込み処理の受け付けを停止することなくプロセッサ間で移動させるマルチプロセッサを提供すること。【解決手段】複数のプロセッサを備えるマルチプロセッサシステムにおいて、前記複数のプロセッサは、夫々、自プロセッサで動作しているタスクを他のプロセッサに移動させる際、移動対象タスクを移動先のプロセッサに送り出す送り出しタスクを実行し、前記送り出しタスクは、前記移動対象タスクを送り出す最中に前記移動対象タスクに付随する割込み処理が受け付けて実行すべき割込み要求が発生したとき、該割込み要求を前記割込み処理に代わって受け付け、前記割込み処理を起動する。【選択図】図１
2010272076.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサを備えるマルチプロセッサシステムにおいて、
前記複数のプロセッサは、夫々、自プロセッサで動作しているタスクを他のプロセッサに移動させる際、移動対象タスクを移動先のプロセッサに送り出す送り出しタスクを実行し、
前記送り出しタスクは、前記移動対象タスクを送り出す最中に前記移動対象タスクに付随する割込み処理が受け付けて実行すべき割込み要求が発生したとき、該割込み要求を前記割込み処理に代わって受け付け、前記割込み処理を起動する、
ことを特徴とするマルチプロセッサシステム。
【請求項２】
前記移動先のプロセッサは、前記移動対象タスクを受け入れる受け入れタスクを実行し、
前記受け入れタスクは、自プロセッサまたは前記移動対象タスクの移動元のプロセッサの何れか一方のみ確保できる前記移動対象割込み処理を実行するための割込み処理実行権を確保し、自プロセッサが前記移動対象タスクの受け入れを完了した後、前記移動元のプロセッサから前記移動対象タスクを削除するとともに前記割込み処理実行権を放棄し、
前記移動元のプロセッサにおいて実行されている送り出しタスクは、前記割込み要求を受け付けた際、前記割込み処理実行権の確保を試み、前記割込み処理実行権を確保できたとき、前記移動対象割込み処理を起動する、
ことを特徴とする請求項１に記載のマルチプロセッサシステム。
【請求項３】
前記複数のプロセッサは、移動対象タスクおよび該移動対象タスクの移動先のプロセッサを指定する移動制御情報を生成する移動指示タスクを実行するプロセッサを含み、
前記移動対象タスクの移動元のプロセッサにおいて実行されている送り出しタスクは、移動制御情報に基づいて移動対象タスクを送り出す、
ことを特徴とする請求項１に記載のマルチプロセッサシステム。
【請求項４】
前記移動指示タスクは、所定数を超える数のタスクを実行しているプロセッサがあったとき、該プロセッサで動作しているタスクを移動対象タスクに指定するとともに該移動対象タスクを追加しても実行タスク数が前記所定数を超えないプロセッサを移動先のプロセッサに指定する移動制御情報を生成する、
ことを特徴とする請求項３に記載のマルチプロセッサシステム。
【請求項５】
前記移動指示タスクは、前記複数のプロセッサで実行しているタスクの総数がより少ない数のプロセッサでも実行できる状態になったとき、タスク実行数が最も少ないプロセッサで実行されている全てのタスクを移動対象タスクに指定する移動制御情報を生成する、
ことを特徴とする請求項３に記載のマルチプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステムに関する。
【背景技術】
【０００２】
従来、マルチプロセッサシステムにおいて、処理効率の向上などを目的とし、タスクをプロセッサ間で移動させることによってプロセッサ群の負荷のバランスの制御を行う技術がある（例えば特許文献１、特許文献２、特許文献３参照）。
【０００３】
しかしながら、一般的に、あるプロセッサで実行中のタスクを他のプロセッサへ移動させるときは、実行中のタスクを一旦止め、止まった状態でタスクを移動させる。タスクの移動の際、あるタスクとそのタスクに付随する割込み処理の受付とを同様に扱うため、割込み処理を持つタスクを別のコアに移動させるときは、割込みの受付も停止する。このとき、タスクの移動中にそのタスクで捕捉しなければならない割込みが発生すると、割込みの受付を停止しているために割込みを捕捉できない。このため、割込みを持つタスクを実行しているときはそのタスクを移動させることができないという問題があった。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−２３５２２９号公報
【特許文献２】特開２００６−２１６０５８号公報
【特許文献３】特開２００５−２３５２２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、割込み処理を持つタスクを割込み処理の受け付けを停止することなくプロセッサ間で移動させることができるマルチプロセッサシステムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本願発明の一態様によれば、複数のプロセッサを備えるマルチプロセッサシステムにおいて、前記複数のプロセッサは、夫々、自プロセッサで動作しているタスクを他のプロセッサに移動させる際、移動対象タスクを移動先のプロセッサに送り出す送り出しタスクを実行し、前記送り出しタスクは、前記移動対象タスクを送り出す最中に前記移動対象タスクに付随する割込み処理が受け付けて実行すべき割込み要求が発生したとき、該割込み要求を前記割込み処理に代わって受け付け、前記割込み処理を起動する、ことを特徴とするマルチプロセッサシステムが提供される。
【発明の効果】
【０００７】
本発明によれば、割込み処理を持つタスクを割込み処理の受け付けを停止することなくプロセッサ間で移動させることができるマルチプロセッサシステムを提供することができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】図１は、本実施の形態のマルチプロセッサシステムの構成を説明する図である。
【図２】図２は、第１の手法により移動対象タスクおよび受け入れプロセッサを決定する動作を説明するフローチャートである。
【図３】図３は、第２の手法により移動対象タスクおよび受け入れプロセッサを決定する動作を説明するフローチャートである。
【図４】図４は、指示タスクにより移動対象タスクの移動が開始される動作を説明するフローチャートである。
【図５】図５は、送り出しタスクにより移動対象タスクが送り出される動作を説明するフローチャートである。
【図６】図６は、受け入れタスクにより移動対象タスクが受け入れられる動作を説明するフローチャートである。
【図７】図７は、移動中割込み処理の動作を説明するフローチャートである。
【図８】図８は、タスク移動のシーケンス図である。
【図９】図９は、マルチプロセッサシステムの内部状態を説明する図である。
【図１０】図１０は、マルチプロセッサシステムの内部状態を説明する図である。
【図１１】図１１は、マルチプロセッサシステムの内部状態を説明する図である。
【図１２】図１２は、マルチプロセッサシステムの内部状態を説明する図である。
【図１３】図１３は、マルチプロセッサシステムの内部状態を説明する図である。
【図１４】図１４は、マルチプロセッサシステムの内部状態を説明する図である。
【図１５】図１５は、マルチプロセッサシステムの内部状態を説明する図である。
【図１６】図１６は、マルチプロセッサシステムの内部状態を説明する図である。
【図１７】図１７は、マルチプロセッサシステムの内部状態を説明する図である。
【図１８】図１８は、マルチプロセッサシステムの内部状態を説明する図である。
【図１９】図１９は、マルチプロセッサシステムの内部状態を説明する図である。
【図２０】図２０は、マルチプロセッサシステムの内部状態を説明する図である。
【図２１】図２１は、マルチプロセッサシステムの内部状態を説明する図である。
【図２２】図２２は、マルチプロセッサシステムの内部状態を説明する図である。
【図２３】図２３は、マルチプロセッサシステムの内部状態を説明する図である。
【図２４】図２４は、マルチプロセッサシステムの内部状態を説明する図である。
【図２５】図２５は、マルチプロセッサシステムの内部状態を説明する図である。
【図２６】図２６は、マルチプロセッサシステムの内部状態を説明する図である。
【発明を実施するための形態】
【０００９】
以下に添付図面を参照して、本発明の実施の形態にかかるマルチプロセッサシステムを詳細に説明する。なお、この実施の形態により本発明が限定されるものではない。
【００１０】
（第１の実施の形態）
図１は、本発明の第１の実施の形態にかかるマルチプロセッサシステムの構成を示すブロック図である。図示するように第１の実施の形態のマルチプロセッサシステム１００は、複数（ここでは４個）のプロセッサ１ａ〜１ｄと、ＲＡＭ（Random  Access  Memory）やＳＲＡＭ（Static  Random  Access  Memory）などで構成される共有メモリ２と、プロセッサ間通信ユニット３と、が夫々バス４に接続された構成となっている。プロセッサ間通信ユニット３は、プロセッサ間で通信するためのユニットであって、前記通信のための専用線の一端がプロセッサ間通信ユニット３に接続され、他端が４つに分岐して分岐先が夫々プロセッサ１ａ〜１ｄに接続されている。プロセッサ間のメッセージの通信はプロセッサ間通信ユニット３を介して行われ、データの送受信はバス４および共有メモリ２を介して行われる。マルチプロセッサシステム１００外部で発生する割込み要求を伝達するための割込み要求線が４つに分岐し、分岐先が夫々プロセッサ１ａ〜１ｄに接続されている。
【００１１】
共有メモリ２には、カーネルプログラム５およびマルチプロセッサシステム１００の使用目的に応じて用意されるユーザプログラム（図示せず）がロードされている。これらのプログラムのロード元は、これらのプログラムを予め格納したＲＯＭ（Read  Only  Memory）や外部記憶装置などであってよい。プロセッサ１ａ〜１ｄは、カーネルプログラム５に含まれるカーネルタスクおよびユーザプログラムに含まれるユーザタスクを実行する。以下、単にタスクというと、カーネルタスクおよびユーザタスクを含むこととする。
【００１２】
ここで、タスクについて説明する。マルチプロセッサシステム１００では、割込み処理を持つタスクを実行することができる。割込み処理を持つタスクには、例えば、マルチプロセッサシステム１００が音楽再生機能を有する機器に組み込まれるものである場合、音楽を再生するタスクがある。このタスクは、再生をストップ／再開する割込み要求を受け付け、再生をストップ／再開する割込み処理を持つ。前述のように、一般的なスケジューリング方法によれば、このような割込み処理が付随するタスクを移動するとき、割込み処理の受付も停止するため、タスクの移動中にそのタスクで捕捉しなければならない割込みが発生すると、割込みの受付を停止しているために割込みを捕捉できない。これに対して、本実施の形態では、タスクの移動中に割込みを受け付けることを可能にするための専用のカーネルタスクが用意されている。
【００１３】
具体的には、カーネルプログラム５は、プロセッサ１ａ〜１ｄの負荷状態に基づき、タスクの移動を指示する移動指示タスクのタスクプログラムと、タスクを送り出すプロセッサにおいて実行され、移動対象のタスク（移動対象タスク）を送り出す最中に発生する割込み要求に対応する送り出しタスクのタスクプログラムと、移動対象タスクを受け入れるプロセッサにおいて実行され、移動対象タスクを受け入れ、移動対象タスクの実行を引き継ぐ受け入れタスクと、を含んでいる。送り出しタスクには、移動対象タスクが捕捉すべき割込み処理（移動対象割込み処理）が前記移動対象タスクの移動中に発生したとき、この移動対象割込処理を捕捉する機能を有する割込み処理（移動中割込み処理）が付随している。なお、移動指示タスクのことを単に指示タスクと表現することもある。また、移動対象タスクを送り出すプロセッサを送り出しプロセッサ、移動対象タスクを受け入れるプロセッサを受け入れプロセッサ、指示タスクが動作しているプロセッサを指示プロセッサと表現する。なお、図１は、プロセッサ１ａにおいて実行されている指示タスクが、プロセッサ１ｂにて実行されている移動対象タスクをプロセッサ１ｃに移動させる決定を行ったときの様子を示している。すなわち、送り出しタスクがプロセッサ１ｂ、受け入れタスクがプロセッサ１ｃにて実行されようとしている。
【００１４】
タスクの移動の際には、どのタスクを移動するかを示す移動制御情報が使用される。移動制御情報には、移動するタスクを示すタスク識別子、送り出しプロセッサを示すプロセッサ識別子および受け入れプロセッサを示すプロセッサ識別子からなるエントリが移動対象タスク毎に記録されている。すなわち、移動対象タスクが該移動対象タスクの送り出しプロセッサおよび受け入れプロセッサに対応付けられている。移動制御情報の各エントリは、各プロセッサの送り出し／受け入れタスク毎に実行キューとして共有メモリ２上に書き込まれる。送り出しタスクは自プロセッサの自タスクの実行キューを参照し、このキューのエントリに記述されている移動対象タスクを受け入れプロセッサに送り出すと、このエントリをこの実行キューから削除し、削除したエントリを受け入れプロセッサの受け入れタスクの実行キューに書き込む。受け入れタスクは、自プロセッサの自タスクの実行キューに書き込まれたエントリを参照し、エントリに記述されている移動対象タスクの受け入れを完了すると、このエントリを削除する。なお、移動制御情報が保持される場所はプロセッサ１ａ〜１ｄからアクセス可能な場所であれば共有メモリ２でなくてもよい。なお、以降、送り出しプロセッサで動作している送り出しタスクの実行キューを単に送り出しプロセッサの（移動制御情報の）キュー、受け入れプロセッサで動作している受け入れタスクの実行キューを単に受け入れプロセッサの（移動制御情報の）キュー、と表現することもある。
【００１５】
また、タスクの移動の際に発生した割込み処理を送り出しプロセッサまたは受け入れプロセッサにて捕捉して必ず１回だけ実行するために、タスク移動時においては、送り出しプロセッサおよび受け入れプロセッサのうちのどちらか一つのみ得ることができる割込み処理を実行する権利（割込み処理実行権）が使用される。割込み処理実行権がどちらに付与されているかを示す情報である割込み処理実行権情報６は、共有メモリ２に保持される。
【００１６】
プロセッサ１ａ〜１ｄは、夫々、割込みに関する設定を記憶する割込み設定情報７ａ〜７ｄを有している。具体的には、割込み設定情報７ａ〜７ｄは、自身のプロセッサで動作する割込み処理のうちの割込み要求線に割り当てられている割込み処理の識別子と、受信した割込み要求に反応するか否かを前記割り当てられている割込み処理毎に指定する情報と、が記録されている。なお、以降、割込み設定情報７ａ〜７ｄを編集して割込み処理を割込み要求線に割り当てることを、割込み要求線を割込み処理（あるいは割込み処理が付随するタスク）に設定する、と表現する。また、割込み設定情報７ａ〜７ｄを編集して受信した割込み要求に反応するように設定されている状態を、割込み処理実行が有効となっている状態、反応しないように設定されている状態を、割込み処理実行が無効となっている状態、と表現する。なお、図１以外に構成図を示す場合においては、煩雑さを避けるため、割込み設定情報７ａ〜７ｄを図示しないこととする。同様の理由で、カーネルプログラム５も図示しないこととする。
【００１７】
次に、本発明の実施の形態のマルチプロセッサシステム１００の動作を説明する。まず、指示タスクが、送り出しプロセッサ、移動対象タスクおよび受け入れプロセッサを決定する動作を説明する。指示タスクによる移動対象タスクおよび送り出し・受け入れプロセッサの決定手法には、処理効率の向上を目的としてプロセッサ１ａ〜１ｄ間のタスク負荷を均一に分散させるように決定する手法（第１の手法）と、低消費電力化を目的としてタスクを一部のプロセッサに集約させるように決定する手法（第２の手法）とが考えられる。まず、第１の手法について説明する。
【００１８】
図２は、第１の手法により移動対象タスクおよび受け入れプロセッサを決定する動作を説明するフローチャートである。まず、指示タスクは、プロセッサ１ａ〜１ｄの夫々において実行中のタスク数を取得する（ステップＳ１）。そして、指示タスクは、実行中のタスク数が予め設定されている適正同時実行数の範囲を上回るプロセッサが存在するか否かを判定する（ステップＳ２）、存在しなければ（ステップＳ２、Ｎｏ）、第１の手法の動作を終了する。適正同時実行数とは、一つのプロセッサがそのプロセッサの処理能力を越えることなく同時に適正に実行できるタスクの数である。一般にはプロセッサの処理能力は夫々異なるため、タスクの適正同時実行数として、プロセッサの処理能力を基にそれぞれのプロセッサに適した値が設定される。
【００１９】
指示タスクは、適正同時実行数の範囲を上回る（超える）プロセッサが存在した場合（ステップＳ２、Ｙｅｓ）、実行中のタスク数が最も大きいプロセッサをＡ、実行中のタスク数が最も小さいプロセッサをＢとし（ステップＳ３）、プロセッサＢの実行中のタスク数に１加算した値がプロセッサＢの適正同時実行数の範囲内か否かを判定する（ステップＳ４）。指示タスクは、プロセッサＢの実行中のタスク数に１加算した値が適正同時実行数の範囲を上回った場合（ステップＳ４、Ｎｏ）、動作を終了し、上回らなかった場合（ステップＳ４、Ｙｅｓ）、プロセッサＡからプロセッサＢへ移動するタスクを一つ移動対象タスクに決定する（ステップＳ５）。その場合、プロセッサＡが送り出しプロセッサ、プロセッサＢが受け入れプロセッサとなる。ステップＳ５の後、ステップＳ１に移行する。
【００２０】
このように第１の手法によれば、適正同時実行数を超える数のタスクを実行しているプロセッサがあったとき、該プロセッサで動作しているタスクを移動対象タスクに指定するとともに該移動対象タスクを追加しても実行タスク数が適正同時実行数を超えないプロセッサを移動先のプロセッサに指定する。
【００２１】
続いて、第２の手法について説明する。図３は、第２の手法により移動対象タスクおよび受け入れプロセッサを決定する動作を説明するフローチャートである。まず、指示タスクは、プロセッサ１ａ〜１ｄの夫々において実行中のタスク数を取得する（ステップＳ１１）。そして、指示タスクは、実行中のタスク数の総和が、稼動中のプロセッサ数で処理可能なタスク数に対して十分小さいか否かを判定し（ステップＳ１２）、十分小さくなかった場合（ステップＳ１２、Ｎｏ）、動作を終了する。実行中のタスク数の総和が、稼動中のプロセッサ数で処理可能なタスク数に対して十分小さかった場合（ステップＳ１２、Ｙｅｓ）、指示タスクは、実行中のタスク数が最も小さいプロセッサをＡとする（ステップＳ１３）。そして、指示タスクは、プロセッサＡの実行中の全てのタスクを移動対象タスクに決定し、その他の稼動中のプロセッサのタスク数が均等になるように移動対象タスクの受け入れプロセッサを決定し（ステップＳ１４）、ステップＳ１１に移行する。
【００２２】
このように、第２の手法によれば、全てのプロセッサで実行しているタスクの総数がより少ない数のプロセッサでも実行できる状態になったとき、タスク実行数が最も少ないプロセッサで実行されている全てのタスクを移動対象タスクに指定する。
【００２３】
送り出しプロセッサ、移動対象タスクおよび受け入れプロセッサが決定されると、次に、移動対象タスクの移動の動作に移行する。まずタスク移動の際の指示タスクの動作を説明する。
【００２４】
図４は、指示タスクがタスクの移動を開始する動作を説明するフローチャートである。まず、移動対象タスクのステータスが移動状態、すなわち移動対象タスクが移動中ではないことを確認し（ステップＳ２１）、移動状態でない、すなわち待ち状態である場合（ステップＳ２１、Ｙｅｓ）、受け入れプロセッサの割込み要求線が空いているか否かを判定する（ステップＳ２２）。待ち状態とは、タスクが移動状態ではない状態を指す。受け入れプロセッサの割込み要求線が空いているとは、割込み要求線に受け入れプロセッサで動作する何れのタスクも設定されていない状態を指す。割込み要求線が空いていた場合（ステップＳ２２、Ｙｅｓ）、指示タスクは、割込み要求線にどのタスクも設定できないように割込み要求線を予約しておく（ステップＳ２３）。ステップＳ２１において、移動対象タスクが移動状態であった場合（ステップＳ２１、Ｎｏ）、指示タスクは、別の移動対象タスクについてステップＳ２１の判定を実行する。
【００２５】
ステップＳ２３の後、指示タスクは、移動対象タスクのステータスを待ち状態から移動状態に変更する（ステップＳ２４）。そして、指示タスクは、移動制御情報のエントリを生成し、生成した移動制御情報のエントリを送り出しプロセッサのキューに追加し（ステップＳ２５）、送り出しプロセッサに送り出しタスクを起動するメッセージをプロセッサ間通信ユニット３を介して送信して送り出しタスクを起動し（ステップＳ２６）、指示タスクは動作を終了する。
【００２６】
次に、指示タスクにより起動された送り出しタスクが移動対象タスクを送り出す動作を説明する。図５は、送り出しタスクの動作を説明するフローチャートである。まず、送り出しタスクは、移動制御情報のキューが空であるか否かを判定し（ステップＳ３１）、空ではなかった場合（ステップＳ３１、Ｎｏ）、移動制御情報のキューからエントリを一つ取り出し（ステップＳ３２）、送り出しプロセッサの割込み設定情報を編集して割込み要求線に設定されている移動対象タスクを移動中割込み処理に設定変更する（ステップＳ３３）。なお、この段階では、移動中割込み処理実行が有効に設定されている。すなわち、この時点で割込み要求を受信すると、移動中割込み処理がこの割込み要求に対応することとなる。
【００２７】
続いて、送り出しタスクは、移動対象タスク（および移動対象割込み処理）を共有メモリ２に送り出し（ステップＳ３４）、移動制御情報のキューを受け入れプロセッサのキューに追加する（ステップＳ３５）。ここで、送り出しタスクは、移動対象タスクを送り出す際、移動対象割込み処理を自プロセッサ１ｂから削除しないでおく。送り出しタスクは、受け入れプロセッサの受け入れタスクを起動し（ステップＳ３６）、ステップＳ３１に移行する。ステップＳ３１において、移動制御情報のキューが空であった場合（ステップＳ３１、Ｙｅｓ）、送り出しタスクは動作を終了する。
【００２８】
次に、送り出しタスクにより起動された受け入れタスクの動作を説明する。図６は、受け入れタスクの動作を説明するフローチャートである。まず、受け入れタスクは、移動制御情報のキューが空であるか否かを判定し（ステップＳ４１）、空ではなかった場合（ステップＳ４１、Ｎｏ）、移動制御情報のキューからエントリを一つ取り出し（ステップＳ４２）、前記取り出したエントリに記述されている移動対象タスク（および移動対象割込み処理）を共有メモリ２から読み出して受け入れる（ステップＳ４３）。そして、受け入れタスクは、予約されていた割込み設定レジスタを移動対象タスクに設定する（ステップＳ４４）。ただし、この時点においては、移動対象割込み処理の実行が無効に設定されている。そして、受け入れタスクは、移動対象タスクの受け入れが完了すると、移動対象タスクの割込み処理実行の権利を確保する（ステップＳ４５）。すなわち、受け入れタスクは、割込み処理実行権情報６に、受け入れプロセッサが割込み処理実行権を有することを記述する。続いて、受け入れタスクは、送り出しプロセッサの移動中割込み処理の実行を無効にし、受け入れプロセッサが受け入れた移動対象タスクの割込み処理実行を有効にする（ステップＳ４６）。そして、受け入れタスクは、移動対象タスクのステータスを移動状態から待ち状態に変更するとともにステップＳ４２にて取り出した移動制御情報のエントリをキューから削除する（ステップＳ４７）。そして、受け入れタスクは、送り出しプロセッサに残しておいた受け入れ済みの移動対象タスクの移動対象割込み処理を送り出しプロセッサから削除するとともに、割込み処理実行権を放棄し（ステップＳ４８）、ステップＳ４１に移行する。ステップＳ４１において、移動制御情報のキューが空であった場合（ステップＳ４１、Ｙｅｓ）、送り出しタスクの動作が終了となる。
【００２９】
なお、ここでは送り出しタスクは自プロセッサに移動対象割込み処理を残し、受け入れタスクは移動対象タスク（および移動対象割込み処理）を受け入れた後、送り出しプロセッサから移動対象割込み処理を削除する、としたが、送り出しタスクは移動対象タスクも残すようにし、受け入れタスクがこの移動対象タスクを削除するようにしてもよい。
【００３０】
次に、送り出しタスクに付随する移動中割込み処理の動作を説明する。ステップＳ３３にて送り出しプロセッサの割込み要求が移動中割込み処理に設定され、移動中割込み処理の実行が有効に設定されている状態において割込み要求を受信すると、割込み処理の動作がスタートされる。図７は、割込み処理の動作を説明するフローチャートである。
【００３１】
まず、移動中割込み処理は、送り出しプロセッサが割込み処理を実行する権利の確保を試み（ステップＳ５１）、割込み処理実行権を確保できなかったとき（ステップＳ５２、Ｎｏ）、再度ステップＳ５１に移行する。送り出しプロセッサが割込み処理実行権を確保できたとき（ステップＳ５２、Ｙｅｓ）、移動中割込み処理は、本来の移動対象タスクの割込み処理実行が有効か無効かを判定する（ステップＳ５３）。移動対象割込み処理の実行が有効であった場合（ステップＳ５３、Ｙｅｓ）、移動対象割込み処理を実行させる（ステップＳ５４）。移動対象割込み処理実行が無効であれば（ステップＳ５３、Ｎｏ）、移動対象割込み処理を実行させない（ステップＳ５５）。ステップＳ５４またはステップＳ５５の後、動作を終了する。
【００３２】
次に、以上説明した動作を、タスク移動のシーケンス図である図８とタスク移動の際の内部状態の推移を説明する概念図である図９〜図２６とを用いてより詳しく説明する。
【００３３】
図８のシーケンス図は、指示プロセッサ上のタスク移動指示タスク、送り出しプロセッサ上の送り出しタスク、受け入れプロセッサ上の受け入れタスクが協調して動作する状態を示している。全体の流れは以下のとおりである。すなわち、まず、指示プロセッサからタスクの移動を開始する指示が送り出しプロセッサに出される。次に、送り出しプロセッサが移動対象タスクを共有メモリ２に送り出し受け入れプロセッサは共有メモリ２から移動対象を受け入れ、移動が完了する。図８のシーケンス図中、移動対象タスクに３度の割込みが入っているが、どの場合でも割込み要求に正しく対応している。一度目の割込み要求は、送り出しプロセッサがタスクを実際に移動させる前に発生しており、送り出しプロセッサで割込み処理が実行される（（ｄ）〜（ｇ））。二度目の割込み要求は、移動対象タスクは受け入れプロセッサに移されているが、受け入れプロセッサで割込みを受け付ける準備がまだ整っていないときに発生し、やはり送り出しプロセッサで割込みが処理されている（（ｊ）、（ｋ））。三度目の割込み要求は、割込み処理の移動を完了させる手順中であり、割込み処理実行権を利用して割込み処理を受け入れプロセッサで実行している（（ｌ）〜（ｒ））。
【００３４】
図９〜図２６を使用して図８に示したシーケンス図における（ａ）〜（ｒ）の各状態を説明する。図９は初期状態（ａ）の内部状態を示している。初期状態では指示タスクおよび移動対象タスクが稼動している。稼動しているタスクは枠を太線で描画して稼動していないタスクと区別することとする。この初期状態において、ステップＳ２１〜ステップＳ２５の動作によりタスクの移動が開始される。なお、図中では、プロセッサ間通信ユニット３には、指示プロセッサであるプロセッサ１ａから送り出しプロセッサであるプロセッサ１ｂに対するメッセージが書き込まれる領域（メッセージ（１ａ→１ｂ）と表記）と、プロセッサ１ａから受け入れプロセッサであるプロセッサ１ｃに対するメッセージが書き込まれる領域（メッセージ（１ｂ→１ｃ）と表記）を表記しているが、現時点では夫々何もメッセージが書き込まれていない状態となっている。
【００３５】
図１０は（ｂ）の状態を示している。状態（ｂ）においては、プロセッサ間通信ユニット３に移動指示タスクからプロセッサ１ｂに対する送り出しタスク起動の指示のメッセージが書き込まれ、それがプロセッサ１ｂに通知されている。これによって移動対象タスクは停止され、送り出しタスクに制御が移る。この動作は、ステップＳ２６の動作に相当する。
【００３６】
図１１は（ｃ）の状態を示している。この状態では、送り出しタスクが起動されている。図１２は（ｄ）の状態を示している。この状態は、送り出し処理中に移動対象タスクに割込みが入った直後の状態を表している。図１２に示す（ｄ）の状態、図１３に示す（ｅ）の状態、図１４に示す（ｆ）の状態、および図１５に示す（ｇ）の状態は、この割込みに対する一連の処理の状態変化を説明している。まず、図１２において、割込みは送り出しプロセッサ１ｂで処理され、また、移動対象割込み処理ではなく移動中割込み処理がまず実行される。図１３では、移動中割込み処理が割込み処理実行権を確保している。この場合、割込み処理実行権はどのプロセッサにも占有されていないため、移動中割込み処理で確保できる。割込み処理実行権が確保でき、かつ移動対象割込み処理をプロセッサ１ｂが保持しているため、図１４ではプロセッサ１ｂの移動対象割込み処理が実行されている。移動対象割込み処理の終了後、図１５に示すように、制御は移動中割込み処理に戻され、割込み処理実行権は放棄される。
【００３７】
図１６は（ｈ）の状態を示している。図１６では、送り出しタスクが移動対象タスクを共有メモリ２に送り出し、受け入れプロセッサであるプロセッサ１ｃが受け入れられるようにしている。すなわちステップＳ３２〜ステップＳ３５の動作を行っている。このとき、移動対象タスクはプロセッサ１ｂから送り出されるが、移動対象割込み処理はプロセッサ１ｂで残ったままとなる。すなわち、受け入れプロセッサ１ｃで割込みに対応できるようになるまで、送り出しプロセッサ１ｂで引き続き割込みに対応できるようになっている。
【００３８】
図１７は（ｉ）の状態を示している。（ｉ）では、タスクの送り出しが終了したため、受け入れタスクに起動通知を送っている。これはステップＳ３６の動作に相当する。
【００３９】
図１８は（ｊ）の状態、図１９は（ｋ）の状態を示している。これらは、受け入れ処理中に割込みが入った場合の状態である。割込み要求はプロセッサ１ｂ、１ｃともに入るが、割込み処理実行権情報はプロセッサ１ｂに割込み処理実行権を与えているので、割込み要求に対応できるのはプロセッサ１ｂのみである。このため、プロセッサ１ｂでは、前述の図１２〜図１５にて説明した状態変化と同様の状態変化が実行される。一方、プロセッサ１ｃでは、受け入れ処理が続行され、プロセッサ１ｃに移動対象タスクが移動される。すなわち、ステップＳ４２〜ステップＳ４４の動作が実行される。
【００４０】
図２０は（ｌ）の状態、図２１は（ｍ）の状態、図２２は（ｎ）の状態、図２３は（ｏ）の状態、図２４は（ｐ）の状態、図２５は（ｑ）の状態を示している。図２０〜図２５は、割込み処理の移動を完了させる手順の間に割込みが入った場合の状態の変化を説明している。図２０の時点では、受け入れタスク（受け入れプロセッサ１ｃ）が割込み処理実行権を確保している。すなわちステップＳ４５の動作を行っている。このとき、まだ割込みは入っていない。図２１の時点では、割込み要求が入った直後であり、プロセッサ１ｂでは割込み処理実行権を確保しようとする。しかしながら、割込み処理実行権はすでにプロセッサ１ｃに確保されているため、割込み処理実行権の確保の試みは失敗し、割込み処理実行権の確保の成功は割込み処理実行権が放棄（開放）されるまで待つことになる。その後、受け入れタスクの処理が進み、図２２ではプロセッサ１ｂの移動対象割込み処理を削除している。その後、図２３では、プロセッサ１ｃが移動対象タスクを待ち状態に変更して割込み処理実行権を放棄する。すなわちステップＳ４８までの動作を完了する。図２４では、割込み処理実行権の確保を待っていたプロセッサ１ｂが確保している。しかし、図２５では、すでにプロセッサ１ｂの移動対象割込み処理が削除されており、割込み処理はプロセッサ１ｂでは実行されない。かわって、プロセッサ１ｃが、この割込みに対する割込み処理を実行する。割込み処理の移動を完了させる手順中で割込みが入る場合には、プロセッサ１ｃで割込みが入ったことが記録されており、割込みの移動完了後に割込み処理が実行される。そして、タスクの移動が完了して図２６に示す（ｒ）の状態に移行する。
【００４１】
このように、本実施の形態によれば、自プロセッサで動作しているタスクを受け入れプロセッサに移動させる際、移動対象タスクを受け入れプロセッサに送り出す送り出しタスクを実行し、送り出しタスクは、移動対象タスクを送り出す最中に移動対象タスクに付随する割込み処理が受け付けて実行すべき割込み要求が発生したとき、該割込み要求を割込み処理に代わって受け付けるように構成したので、割込み処理を持つタスクを割込み処理の受け付けを停止することなくプロセッサ間で移動させることができる。
【００４２】
また、受け入れプロセッサは、移動対象タスクを受け入れる受け入れタスクを実行し、受け入れタスクは、自プロセッサまたは送り出しプロセッサの何れか一方のみ確保できる割込み処理実行権を確保し、自プロセッサが移動対象タスクの受け入れを完了した後、送り出しプロセッサから移動対象タスクを削除するとともに割込み処理実行権を放棄し、送り出しプロセッサにおいて実行されている送り出しタスクは、割込み要求を受け付けた際、割込み処理実行権の確保を試み、割込み処理実行権を確保できたとき、移動対象割込み処理を起動するように構成したので、移動対象タスクの移動中あるいは移動前後に発生した割込み要求を確実に実行できるようになる。
【００４３】
また、複数のプロセッサは、移動対象タスクおよび該移動対象タスクの移動先のプロセッサを指定する移動制御情報を生成する移動指示タスクを実行する移動指示プロセッサを含み、送り出しプロセッサにおいて実行されている送り出しタスクは、移動制御情報に基づいて移動対象タスクを送り出すように構成したので、移動させることが決定された移動対象タスクが複数あっても確実にこれらの移動対象タスクを移動させることができる。
【００４４】
また、移動指示タスクは、適正同時実行数を超える数のタスクを実行しているプロセッサがあったとき、該プロセッサで動作しているタスクを移動対象タスクに指定するとともに該移動対象タスクを追加しても実行タスク数が適正同時実行数を超えないプロセッサを受け入れプロセッサに指定する移動制御情報を生成するようにしたので、全てのプロセッサ間でタスク負荷を均一にすることができるので、タスクの処理効率を向上させることができる。
【００４５】
また、移動指示タスクは、複数のプロセッサで実行しているタスクの総数がより少ない数のプロセッサでも実行できる状態になったとき、タスク実行数が最も少ないプロセッサで実行されている全てのタスクを移動対象タスクに指定する移動制御情報を生成するように構成したので、一部のプロセッサにタスクが集約され、タスクを実行していないプロセッサの電源をＯＦＦすることができるので、マルチプロセッサシステムの低消費電力化を図ることができるようになる。
【００４６】
ところで、汎用的なシステムで用いられるカーネルとして、linuxやwindows（登録商標）などがある。本発明の実施の形態が対象とする割込み受付は、システムに入力された割込みは均一にすべてのプロセッサに入力され、割込みへの対応は各プロセッサに任される。しかしながら、linuxやWindows（登録商標）では割込みは一旦カーネルが受け取り、カーネルが各プロセッサに必要な割込みを判定して、プロセッサに転送される。このようなより汎用的なカーネルは豊富な機能を持っており、本発明の実施の形態によらなくともタスクの移動が可能である。
【００４７】
しかしながら、このような割込み受付手順はカーネルが割込みに対応するための時間が必要でシステムの負荷を増大させ、かつ、割込みに対する応答時間も長くなる。これに対して、本発明の実施の形態はタスクの移動に直接的に関わるプロセッサにしか負荷がかからず、かつ必要最低限の処理でタスクの移動を実現するため、システム全体の処理量はlinuxやWindows（登録商標）などの汎用的なカーネルよりも大幅に少なく、割込みに対する応答時間も短い。また、豊富な機能を持たないカーネルでもタスクの移動が実現できるため、結果としてマルチプロセッサシステム全体で低負荷かつ柔軟な運用が可能になる。
【符号の説明】
【００４８】
１ａ〜１ｄ  プロセッサ、２  共有メモリ、３  プロセッサ間通信ユニット、４  バス、５  カーネルプログラム、６  割込み処理実行権情報、７ａ〜７ｄ  割込み設定情報、１００  マルチプロセッサシステム。
【図１】
2010272076.tif 000003
【図２】
2010272076.tif 000004
【図３】
2010272076.tif 000005
【図４】
2010272076.tif 000006
【図５】
2010272076.tif 000007
【図６】
2010272076.tif 000008
【図７】
2010272076.tif 000009
【図８】
2010272076.tif 000010
【図９】
2010272076.tif 000011
【図１０】
2010272076.tif 000012
【図１１】
2010272076.tif 000013
【図１２】
2010272076.tif 000014
【図１３】
2010272076.tif 000015
【図１４】
2010272076.tif 000016
【図１５】
2010272076.tif 000017
【図１６】
2010272076.tif 000018
【図１７】
2010272076.tif 000019
【図１８】
2010272076.tif 000020
【図１９】
2010272076.tif 000021
【図２０】
2010272076.tif 000022
【図２１】
2010272076.tif 000023
【図２２】
2010272076.tif 000024
【図２３】
2010272076.tif 000025
【図２４】
2010272076.tif 000026
【図２５】
2010272076.tif 000027
【図２６】
2010272076.tif 000028