(57)【特許請求の範囲】
【請求項１】
マスタプロセッサと、
前記マスタプロセッサからタスクを割り当てられるスレーブプロセッサとを有し、
前記マスタプロセッサは、前記マスタプロセッサでのタスク割り当ての受付可否を示す値を繰り返し更新する第１のフラグと、前記スレーブプロセッサでのタスク割り当ての受付可否を示す値を繰り返し更新する第３のフラグに同期する第２のフラグを有し、前記第１のフラグがタスク割り当ての受付可能を示す頻度を前記マスタプロセッサで処理中のタスク量に応じて設定し、前記第１のフラグがタスク割り当ての受付不可である場合に、前記第２のフラグの値に応じて前記スレーブプロセッサにタスクを割り当て、
前記スレーブプロセッサは、前記スレーブプロセッサで処理中のタスク量に応じて前記第３のフラグがタスク割り当ての受付可能を示す頻度を設定する
マルチプロセッサシステム。
【請求項２】
前記第１のフラグおよび前記第２のフラグは前記マスタプロセッサ内のキャッシュに設けられており、前記第３のフラグは前記スレーブプロセッサ内のキャッシュに設けられており、前記同期は、前記マスタプロセッサ内のキャッシュと前記スレーブプロセッサ内のキャッシュとの間の同一性を制御するスヌープコントローラで行われる請求項１に記載のマルチプロセッサシステム。
【請求項３】
前記マスタプロセッサでは前記第１のフラグの状態を更新するタスク受付スレッドが、前記マスタプロセッサで処理するタスク量に応じた頻度でディスパッチされ、前記スレーブプロセッサでは前記第３のフラグの状態を更新するタスク受付スレッドが、前記スレーブプロセッサで処理するタスク量に応じた頻度でディスパッチされる請求項１に記載のマルチプロセッサシステム。
【請求項４】
前記タスク受付スレッドは、前記マスタプロセッサおよび前記スレーブプロセッサがタスク割り当ての受付可能な状態にあるか否かを示すフラグの状態を、ディスパッチ後にタスク割り当ての受付不可能な状態からタスク割り当ての受付可能な状態に変更し、ディスパッチ終了前にタスク割り当ての受付不可能な状態に戻す動作を各プロセッサに行わせる請求項３に記載のマルチプロセッサシステム。
【請求項５】
前記マスタプロセッサは、予め起動先のプロセッサが指定されていないタスクを、前記
第１のフラグの状態がタスク割り当ての受付可能な状態にあるときに前記マスタプロセッサに起動し、前記第２のフラグに反映された前記第３のフラグの状態がタスク割り当ての受付可能な状態にある前記スレーブプロセッサに起動する請求項４に記載のマルチプロセッサシステム。
【請求項６】
マスタプロセッサが、前記マスタプロセッサでのタスク割り当ての受付可否を示す値を繰り返し更新する第１のフラグと、前記マスタプロセッサからタスクを割り当てられるスレーブプロセッサでのタスク割り当ての受付可否を示す値を繰り返し更新する第３のフラグに同期する第２のフラグを有し、前記第１のフラグがタスク割り当ての受付可能を示す頻度を前記マスタプロセッサで処理中のタスク量に応じて設定し、前記第１のフラグがタスク割り当ての受付不可である場合に、前記第２のフラグの値に応じて前記スレーブプロセッサにタスクを割り当て、
前記スレーブプロセッサが、前記スレーブプロセッサで処理中のタスク量に応じて前記第３のフラグがタスク割り当ての受付可能を示す頻度を設定する
スケジューリング方法。
【請求項７】
前記マスタプロセッサでは前記第１のフラグの状態を更新するタスク受付スレッドが、前記マスタプロセッサで処理するタスク量に応じた頻度でディスパッチされ、前記スレーブプロセッサでは前記第３のフラグの状態を更新するタスク受付スレッドが、前記スレーブプロセッサで処理するタスク量に応じた頻度でディスパッチされる請求項６に記載のスケジューリング方法。
【請求項８】
前記マスタプロセッサおよび前記スレーブプロセッサは前記タスク受付スレッドを実行することによって、前記マスタプロセッサおよび前記スレーブプロセッサがタスク割り当ての受付可能な状態にあるか否かを示すフラグの状態を、ディスパッチ後にタスク割り当ての受付不可能な状態からタスク割り当ての受付可能な状態に変更し、ディスパッチ終了前にタスク割り当ての受付不可能な状態に戻す請求項７に記載のスケジューリング方法。
【請求項９】
前記マスタプロセッサは、予め起動先のプロセッサが指定されていないタスクを、前記第１のフラグの状態がタスク割り当ての受付可能な状態にあるときに前記マスタプロセッサに起動し、前記第２のフラグに反映された前記第３のフラグの状態がタスク割り当ての受付可能な状態にある前記スレーブプロセッサに起動する請求項８に記載のスケジューリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、マルチプロセッサシステムおよびスケジューリング方法に関する。
【背景技術】
【０００２】
従来、複数のプロセッサ間で負荷情報を通知し、最も負荷の軽いプロセッサで処理を実行するマルチプロセッサのスケジューリング方式がある。また、オペレーティングシステムによって提供される機能と各機能を実行するプロセッサとの対応を示す管理情報を用意し、この管理情報に基づいて複数のプロセッサにタスク処理を振り分けるようにしたマルチプロセッサシステムがある。また、処理の実行を担うプロセッサから処理を依頼するプロセッサへ処理対象に関する情報を通知し、この情報に基づいて処理を実行するプロセッサを決定するマルチプロセッサシステムがある。また、予めユーザによってプログラム中に指定されたプロセッサの情報に基づいてタスクをプロセッサに割り付けるマルチプロセッサのスケジューリング方式がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平５−１８９３９０号公報
【特許文献２】特開平６−１３９２０９号公報
【特許文献３】特開昭６４−１３６６４号公報
【特許文献４】特開昭６３−２０８１５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来のマルチプロセッサシステムにおいて各プロセッサに動的にタスクの割り付けを行って負荷を分散させる場合、各プロセッサは負荷情報を計算し、タスクの割り付けを行うプロセッサに負荷情報をプロセッサ間通信によって通知する。そのため、動的なタスクの割り付けを行う際のオーバーヘッドが大きくなってしまい、タスクの割り付け処理に時間がかかり、マルチプロセッサシステムにおけるスループットが低下するという問題点がある。【０００５】
マルチプロセッサシステムにおけるスループットの低下を抑えることができるマルチプロセッサシステムおよびスケジューリング方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
マルチプロセッサシステムはマスタープロセッサ、一つ以上のスレーブプロセッサおよび同期部を備える。マスタープロセッサは第１のフラグを備える。第１のフラグは、マスタープロセッサがタスク起動の受け付け可能な状態にあるか否かを示す。マスタープロセッサは、自プロセッサで処理するタスク量に応じた頻度で第１のフラグの状態を繰り返し更新する。マスタープロセッサは第２のフラグを備える。第２のフラグはスレーブプロセッサの第３のフラグの状態を反映する。スレーブプロセッサは第３のフラグを備える。第３のフラグは、スレーブプロセッサがタスク起動の受け付け可能な状態にあるか否かを示す。スレーブプロセッサは、自プロセッサで処理するタスク量に応じた頻度で第３のフラグの状態を繰り返し更新する。同期部は第３のフラグと第２のフラグとの間でフラグの状態を同期させる。マスタープロセッサは自プロセッサまたはスレーブプロセッサに対して第１のフラグおよび第２のフラグの状態に基づいてタスクを起動する。スレーブプロセッサはマスタープロセッサによりタスクを割り付けられる。
【発明の効果】
【０００７】
開示のマルチプロセッサシステムおよびスケジューリング方法によれば、マルチプロセッサシステムにおけるスループットの低下を抑えることができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】実施例１にかかるマルチプロセッサシステムを示すブロック図である。
【図２】実施例１にかかるスケジューリング方法を示すフローチャートである。
【図３】実施例２にかかるマルチプロセッサシステムを示すブロック図である。
【図４】実施例２にかかるマルチプロセッサシステムにおけるタスク受付スレッドによる処理を示すフローチャートである。
【図５】実施例２にかかるスケジューリング方法を示すフローチャートである。
【図６】実施例２にかかるスケジューリング方法によるタスクの起動例を示す説明図である。
【発明を実施するための形態】
【０００９】
以下に、この発明にかかるマルチプロセッサシステムおよびスケジューリング方法の実施例を図面に基づいて詳細に説明する。以下の実施例は、マルチプロセッサシステムにおいて、各プロセッサにタスク起動の受付可否を示すフラグがあり、このフラグに同期したフラグがマスタープロセッサにあり、このフラグに基づいてマスタープロセッサが各プロセッサにタスクを起動するようにしたものである。なお、この実施例によりこの発明が限定されるものではない。
【００１０】
（実施例１）
・マルチプロセッサシステムの説明
図１は、実施例１にかかるマルチプロセッサシステムを示すブロック図である。図１に示すように、マルチプロセッサシステムはマスタープロセッサ１、一つ以上のスレーブプロセッサ２および同期部３を備える。
【００１１】
マスタープロセッサ１は第１のフラグ４および第２のフラグ５を備える。第１のフラグ４は、マスタープロセッサ１がタスク起動の受け付け可能な状態にあるか否かを示す。マスタープロセッサ１は、自プロセッサで処理するタスク量に応じた頻度で第１のフラグ４の状態を、タスク起動の受け付け可能な状態と不可能な状態とに繰り返し更新する。第２のフラグ５はスレーブプロセッサ２の第３のフラグ６の状態を反映する。
【００１２】
スレーブプロセッサ２は第３のフラグ６を備える。第３のフラグ６は、スレーブプロセッサ２がタスク起動の受け付け可能な状態にあるか否かを示す。スレーブプロセッサ２は、自プロセッサで処理するタスク量に応じた頻度で第３のフラグ６の状態を、タスク起動の受け付け可能な状態と不可能な状態とに繰り返し更新する。
【００１３】
同期部３は第３のフラグ６と第２のフラグ５との間でフラグの状態を同期させる。同期部３によるフラグの同期は、プロセッサ間通信によらずに行われる。マスタープロセッサ１は全てのプロセッサ１，２に対して第１のフラグ４の状態と第２のフラグ５の状態とに基づいてタスクを起動する。つまり、マスタープロセッサ１は、第１のフラグ４の状態と第２のフラグ５に反映された第３のフラグ６の状態とに基づいて自プロセッサまたはスレーブプロセッサ２にタスクを割り付ける。
【００１４】
・スケジューリング方法の説明
図２は、実施例１にかかるスケジューリング方法を示すフローチャートである。図２に示すように、タスク起動処理が開始されると、マスタープロセッサ１において自プロセッサで処理するタスク量に応じた頻度で第１のフラグ４の状態が繰り返し更新される（ステップＳ１）。
【００１５】
また、スレーブプロセッサ２において自プロセッサで処理するタスク量に応じた頻度で第３のフラグ６の状態が繰り返し更新される（ステップＳ２）。第３のフラグ６の状態が更新されると、同期部３により第３のフラグ６と第２のフラグ５とが同期される（ステップＳ３）。それによって、第３のフラグ６の状態が第２のフラグ５の状態に反映される。
【００１６】
マスタープロセッサ１は、第１のフラグ４の状態と第２のフラグ５の状態を参照してタスク起動の受け付け可能な状態にあるプロセッサを認識し、タスク起動の受け付け可能な状態にあるプロセッサにタスクを起動する（ステップＳ４）。そして、ステップＳ１に戻り、ステップＳ１からステップＳ４までの処理を起動するタスクがなくなるまで繰り返す。
【００１７】
なお、図２には、各ステップが逐次的に行われるように示されているが、これはフローチャートが逐次的に表現されるものであるからである。実際には、マスタープロセッサ１が第１のフラグ４を更新されることと、スレーブプロセッサ２が第３のフラグ６を更新し、その更新が第２のフラグ５に反映されることと、マスタープロセッサ１が各プロセッサにタスクを起動すること、との間には依存関係がない。従って、ステップＳ１の後にステップＳ４が起こったり、ステップＳ２およびステップＳ３の後にステップＳ４が起こったりすることがある。また、ステップＳ１が連続して起こったり、ステップＳ２およびステップＳ３が連続して起こったりすることがある。
【００１８】
実施例１によれば、スレーブプロセッサ２がタスク起動の受け付け可能な状態にあるか否かということが第２のフラグ５の状態に反映されるので、スレーブプロセッサ２がプロセッサ間通信によってマスタープロセッサ１に負荷情報を通知しなくても、マスタープロセッサ１はタスク起動の受け付け可能な状態にあるプロセッサにタスクを起動することができる。従って、タスクを割り付ける際のオーバーヘッドがなくなり、スループットの低下を抑えることができる。
【００１９】
また、実施例１によれば、各プロセッサ１，２が、自プロセッサで処理するタスク量に応じた頻度でタスク起動の受け付け可能な状態になるので、自プロセッサで処理するタスク量が多い場合にはタスク起動の受け付け可能な状態になる頻度が少なくなる。つまり、タスクが割り付けられる確率が低くなる。一方、自プロセッサで処理するタスク量が少ない場合にはタスク起動の受け付け可能な状態になる頻度が多くなり、タスクが割り付けられる確率が高くなる。従って、各プロセッサ１，２の負荷がほぼ均等になる。なお、スレーブプロセッサが二つ以上あっても同様である。
【００２０】
（実施例２）
・マルチプロセッサシステムの説明
図３は、実施例２にかかるマルチプロセッサシステムを示すブロック図である。図３に示すように、マルチプロセッサシステムはマスタープロセッサとしてのプロセッサ＃０＿２１、特に限定しないが、例えば二つのスレーブプロセッサとしてのプロセッサ＃１＿２２およびプロセッサ＃２＿２３、並びに同期部としてのスヌープコントローラ２４を備える。各プロセッサ（＃０、＃１および＃２）２１〜２３はバスネットワーク２５を介してメモリなどの共有資源２６にアクセス可能となっている。各プロセッサ（＃０、＃１および＃２）２１〜２３によって並列処理が行われる。
【００２１】
プロセッサ＃０＿２１ではオペレーティングシステム３２が動作する。オペレーティングシステム３２上で実行タスク３１が実行される。オペレーティングシステム３２によってランキュー３３、ウェイトキュー３４およびタスクランチャー３５が実現される。ウェイトキュー３４は、実行準備が完了し、かつ実行先のプロセッサが決定していないタスクを保持する。タスクランチャー３５は、ウェイトキュー３４からタスクを取り出し、各プロセッサ（＃０、＃１および＃２）２１〜２３に取り出したタスクを割り付ける。タスクランチャー３５は、各プロセッサ（＃０、＃１および＃２）２１〜２３に後述するタスク受付スレッドを配布する。ランキュー３３は、タスクランチャー３５によって割り付けられたタスクおよびタスク受付スレッドをタスクスイッチによる実行再開を待つ間保持する。
【００２２】
プロセッサ＃０＿２１はキャッシュ３６を備えている。キャッシュ３６のアドレス空間には第１のフラグとしての受付フラグＦ０＿３８が設けられ、この領域をロックし、受付フラグＦ０＿３８のアドレス空間を常にキャッシュ３６上に配置する。プロセッサ＃０＿２１が実行タスク３１としてタスク受付スレッドを実行することによって受付フラグＦ０＿３８のセットまたはアンセットが行われる。受付フラグＦ０＿３８は、プロセッサ＃０＿２１がタスク起動の受け付け可能な状態にあるときにセットされ、タスク起動の受け付け不可能な状態にあるときにアンセットされる。
【００２３】
プロセッサ＃１＿２２ではオペレーティングシステム４２が動作する。オペレーティングシステム４２上で実行タスク４１が実行される。オペレーティングシステム４２によってランキュー４３が実現される。プロセッサ＃１＿２２はキャッシュ４４を備えている。キャッシュ４４のアドレス空間には、プロセッサ＃１＿２２がタスク受付スレッドを実行することによってセットまたはアンセットされる第３のフラグとしての受付フラグＦ１＿４５が設けられ、この領域をロックし、受付フラグＦ１＿４５のアドレス空間を常にキャッシュ４４上に配置する。受付フラグＦ１＿４５は、プロセッサ＃１＿２２がタスク起動の受け付け可能な状態にあるときにセットされ、タスク起動の受け付け不可能な状態にあるときにアンセットされる。
【００２４】
プロセッサ＃２＿２３ではオペレーティングシステム５２が動作する。オペレーティングシステム５２上で実行タスク５１が実行される。オペレーティングシステム５２によってランキュー５３が実現される。プロセッサ＃２＿２３はキャッシュ５４を備えている。キャッシュ５４のアドレス空間には、プロセッサ＃２＿２３がタスク受付スレッドを実行することによってセットまたはアンセットされる第３のフラグとしての受付フラグＦ２＿５５が設けられ、この領域をロックし、受付フラグＦ２＿５５のアドレス空間を常にキャッシュ５４上に配置する。受付フラグＦ２＿５５は、プロセッサ＃２＿２３がタスク起動の受け付け可能な状態にあるときにセットされ、タスク起動の受け付け不可能な状態にあるときにアンセットされる。
【００２５】
また、プロセッサ＃０＿２１のキャッシュ３６のアドレス空間には第２のフラグとしての受付フラグ（Ｆ’１およびＦ’２）３７が設けられ、この領域をロックし、受付フラグ３７のアドレス空間を常にキャッシュ３６上に配置する。この受付フラグ３７にはＦ’１、Ｆ’２の各フラグが設けられている。受付フラグＦ’１はプロセッサ＃１＿２２の受付フラグＦ１＿４５に対応している。受付フラグＦ’２はプロセッサ＃２＿２３の受付フラグＦ２＿５５に対応している。
【００２６】
スヌープコントローラ２４は各プロセッサ（＃０、＃１および＃２）２１〜２３においてキャッシュ３６，４４，５４とプロセッサ内バスとの間に設けられている。スヌープコントローラ２４は各プロセッサ（＃０、＃１および＃２）２１〜２３のプロセッサ内バスを用いずにキャッシュ３６，４４，５４の間でデータを移動させることができる。スヌープコントローラ２４によって受付フラグ３７のＦ’１とプロセッサ＃１＿２２の受付フラグＦ１＿４５、および受付フラグ３７のＦ’２とプロセッサ＃２＿２３の受付フラグＦ２＿５５とが同期しており、常に同じ状態になっている。スヌープコントローラ２４は例えばハードウェアで構成されている。
【００２７】
・タスク受付スレッドの説明
図４は、実施例２にかかるマルチプロセッサシステムにおけるタスク受付スレッドによる処理を示すフローチャートである。図４に示すように、タスク受付スレッドがディスパッチされると、タスク受付スレッドはディスパッチの開始時に、ディスパッチされたプロセッサの受付フラグ（Ｆ０、Ｆ１およびＦ２）３８，４５，５５をセットする（ステップＳ１１）。次いで、タスク受付スレッドはディスパッチの終了時、例えばディスパッチの終了直前に、ディスパッチの開始時にセットした受付フラグ（Ｆ０、Ｆ１およびＦ２）３８，４５，５５をアンセットする（ステップＳ１２）。そして、タスク受付スレッドによる処理が終了する。
【００２８】
図４に示すタスク受付スレッドによる処理は、各プロセッサ（＃０、＃１および＃２）２１〜２３においてタスク受付スレッドがディスパッチされるたびに行われる。１回のディスパッチによって行われる受付フラグのセットおよびアンセットの処理（ステップＳ１１、ステップＳ１２）は、オペレーティングシステムにより設定されるディスパッチ周期内で完結する。
【００２９】
・スケジューリング方法の説明
初期状態では、各プロセッサ（＃０、＃１および＃２）２１〜２３のランキュー３３，４３，５３は空である。また、Ｆ０、Ｆ１およびＦ２の各受付フラグ３８，４５，５５はアンセットの状態であり、各プロセッサ（＃１および＃２）２２，２３に対応したＦ’１およびＦ’２の各受付フラグ３７もアンセットの状態であるとする。
【００３０】
図５は、実施例２にかかるスケジューリング方法を示すフローチャートである。図５に示すように、タスク起動処理が開始されると、ウェイトキュー３４に実行準備が完了したタスクが蓄積されていく。初めにタスクランチャー３５は各プロセッサ（＃０、＃１および＃２）２１〜２３にタスク受付スレッドを配布する（ステップＳ２１）。それによって、各プロセッサ（＃０、＃１および＃２）２１〜２３のランキュー３３，４３，５３にはタスク受付スレッドが一つずつ格納される。
【００３１】
次いで、タスクランチャー３５はウェイトキュー３４にタスクがあるか否かを判断する（ステップＳ２２）。ウェイトキュー３４にタスクがない場合（ステップＳ２２：Ｎｏ）、ウェイトキュー３４にタスクが格納されるのを待つ。ウェイトキュー３４にタスクがある場合、あるいは空のウェイトキュー３４にタスクが格納された場合（ステップＳ２２：Ｙｅｓ）、タスクランチャー３５はウェイトキュー３４から最も早くウェイトキュー３４に格納されたタスクを取り出し、その取り出したタスクをウェイトキュー３４から削除する（ステップＳ２３）。
【００３２】
次いで、タスクランチャー３５はウェイトキュー３４から取り出したタスクにタグ情報があり、このタグ情報により割り付け先のプロセッサが指定されているか否かを判断する（ステップＳ２４）。タグ情報は、例えばアプリケーションプログラムの設計段階で予めプロファイラやシミュレータにより取得されている。タグ情報は、例えばアプリケーションプログラム中に記述されており、マスターとなるプロセッサ＃０＿２１に内蔵されたメモリ（図示省略）に格納されている。
【００３３】
割り付け先のプロセッサが指定されている場合（ステップＳ２４：Ｙｅｓ）、タスクランチャー３５はタグ情報により指定されたプロセッサにタスクを起動する（ステップＳ２５）。そして、ステップＳ２２へ戻る。
【００３４】
一方、割り付け先のプロセッサが指定されていない場合（ステップＳ２４：Ｎｏ）、タスクランチャー３５は、マスターとなるプロセッサ＃０＿２１に対応したＦ０の受付フラグ３８とスレーブとなる各プロセッサ（＃１および＃２）２２，２３に対応したＦ’１およびＦ’２の各受付フラグ３７を参照し、Ｆ０、Ｆ’１またはＦ’２の受付フラグがセットされているプロセッサがあるか否かを判断する（ステップＳ２６）。Ｆ０、Ｆ’１またはＦ’２の受付フラグがセットされているプロセッサがない場合（ステップＳ２６：Ｎｏ）、Ｆ０、Ｆ’１またはＦ’２の受付フラグがセットされるのを待つ。
【００３５】
Ｆ０、Ｆ’１またはＦ’２の受付フラグがセットされているプロセッサがある場合、あるいはアンセットの状態のＦ０、Ｆ’１またはＦ’２の受付フラグがセットされた場合（ステップＳ２６：Ｙｅｓ）、Ｆ０、Ｆ’１またはＦ’２の受付フラグがセットされた状態のプロセッサにタスクを起動する（ステップＳ２７）。そして、ステップＳ２２へ戻る。タスクを起動する際、Ｆ０、Ｆ’１およびＦ’２の受付フラグのうち複数のフラグがセットされた状態となることがある。その場合には、タスクランチャー３５は所定のルールに基づいて一つのプロセッサを選択し、その選択したプロセッサにタスクを起動する。プロセッサを選択するルールとしては、例えばプロセッサ番号の小さいプロセッサを選択するようにしてもよいし、乱数を発生させ、その乱数の値をプロセッサの数で除した剰余をプロセッサ番号とするプロセッサを選択するようにしてもよい。
【００３６】
ステップＳ２５またはステップＳ２７からステップＳ２２に戻った後、ステップＳ２２からステップＳ２７までを繰り返す。タスクランチャー３５が各プロセッサ（＃０、＃１および＃２）２１〜２３に起動するタスクがなくなったら、図５に示すタスク起動の一連の処理を終了する。
【００３７】
・マルチプロセッサシステムの動作例
次に、タスクを起動する際の各プロセッサ（＃０、＃１および＃２）２１〜２３の動作の一例について説明する。図６は、実施例２にかかるスケジューリング方法によるタスクの起動例を示す説明図である。図６に示すように、マスターとなるプロセッサ＃０＿２１のタスクランチャー３５によってスケジューリング処理が開始され、ある時刻ｔ０における各プロセッサ（＃０、＃１および＃２）２１〜２３の状態が次の通りであるとする。
【００３８】
・時刻ｔ０の状態
プロセッサ＃０＿２１では実行タスク３１としてタスク受付スレッドがディスパッチされている。プロセッサ＃０＿２１ではタスク受付スレッドによりプロセッサ＃０＿２１の受付フラグＦ０＿３８がセットされる。プロセッサ＃０＿２１のランキュー３３にはタスク＃１が格納されている。
【００３９】
プロセッサ＃１＿２２では実行タスク４１としてタスク＃２がディスパッチされている。プロセッサ＃１＿２２のランキュー４３にはタスク＃３およびタスク受付スレッドがこの順にタスクスイッチによる実行再開を待って格納されている。
【００４０】
プロセッサ＃２＿２３では実行タスク５１としてタスク＃４がディスパッチされている。プロセッサ＃２＿２３のランキュー５３にはタスク＃５、タスク＃６およびタスク受付スレッドがこの順にタスクスイッチによる実行再開を待って格納されている。
【００４１】
ウェイトキュー３４にはタスク＃７、タスク＃８およびタスク＃９がこの順にプロセッサに割り付けられるのを待って格納されている。タスク＃７およびタスク＃８にはタグ情報がないとする。タスク＃９はタグ情報により割り付け先のプロセッサとしてプロセッサ＃０＿２１が指定されているとする。
【００４２】
・時刻ｔ０後の時刻ｔ１の状態
タスクランチャー３５はウェイトキュー３４からキューの先頭にあるタスク＃７を取り出し、ウェイトキュー３４からタスク＃７を削除する。そして、タスクランチャー３５は、取り出したタスク＃７にタグ情報があるか否かを調べる。タスク＃７にはタグ情報が付加されていないので、タスクランチャー３５は、各プロセッサ（＃０、＃１および＃２）２１〜２３に対応したＦ０、Ｆ’１およびＦ’２の受付フラグ３７，３８の状態を調べる。
【００４３】
・時刻ｔ１後の時刻ｔ２の状態
プロセッサ＃０＿２１に対応したＦ０の受付フラグ３８がセットされているので、タスクランチャー３５はプロセッサ＃０＿２１にタスク＃７を起動する。それによって、タスク＃７はプロセッサ＃０＿２１のランキュー３３の最後に格納されるので、ランキュー３３にはタスク＃１およびタスク＃７がこの順にタスクスイッチによる実行再開を待って格納されることになる。プロセッサ＃０＿２１ではタスク受付スレッドのディスパッチ終了時に受付フラグＦ０＿３８がアンセットされる。
【００４４】
・時刻ｔ２後の時刻ｔ３の状態
プロセッサ＃０＿２１では実行タスク３１としてウェイトキュー３４の先頭に格納されていたタスク＃１がディスパッチされる。プロセッサ＃０＿２１のランキュー３３にはタスク＃７およびタスク受付スレッドがこの順にタスクスイッチによる実行再開を待って格納されている。
【００４５】
プロセッサ＃１＿２２ではタスク＃２およびタスク＃３の実行が終了し、実行タスク４１としてタスク受付スレッドがディスパッチされる。プロセッサ＃１＿２２ではタスク受付スレッドによりプロセッサ＃１＿２２の受付フラグＦ１＿４５がセットされる。それによって、プロセッサ＃０＿２１にあるプロセッサ＃１＿２２に対応したＦ’１の受付フラグ３７がスヌープコントローラ２４によってセットされる。プロセッサ＃１＿２２のランキュー４３にはタスク＃２およびタスク＃３がこの順にタスクスイッチによる実行再開を待って格納されている。
【００４６】
プロセッサ＃２＿２３ではタスク＃４、タスク＃５およびタスク＃６の実行が終了し、実行タスク５１としてタスク受付スレッドがディスパッチされる。プロセッサ＃２＿２３ではタスク受付スレッドによりプロセッサ＃２＿２３の受付フラグＦ２＿５５がセットされる。それによって、プロセッサ＃０＿２１にあるプロセッサ＃２＿２３に対応したＦ’２の受付フラグ３７がスヌープコントローラ２４によってセットされる。プロセッサ＃２＿２３のランキュー５３にはタスク＃４、タスク＃５およびタスク＃６がこの順にタスクスイッチによる実行再開を待って格納されている。
【００４７】
タスクランチャー３５はウェイトキュー３４からキューの先頭にあるタスク＃８を取り出し、ウェイトキュー３４からタスク＃８を削除する。そして、タスクランチャー３５は、取り出したタスク＃８にタグ情報があるか否かを調べる。タスク＃８にはタグ情報が付加されていないので、タスクランチャー３５は、マスターとなるプロセッサ＃０＿２１に対応したＦ０の受付フラグ３８の状態とスレーブとなる各プロセッサ（＃１および＃２）２２，２３に対応したＦ’１およびＦ’２の受付フラグ３７の状態を調べる。
【００４８】
・時刻ｔ３後の時刻ｔ４の状態
マスターとなるプロセッサ＃０＿２１に対応したＦ０の受付フラグ３８とスレーブとなる各プロセッサ（＃１および＃２）２２，２３に対応したＦ’１およびＦ’２の受付フラグ３７とにおいて複数のフラグがセットされている場合、例えばタスクランチャー３５はプロセッサ番号の小さいプロセッサにタスクを起動するとする。ここでは、タスクランチャー３５は、プロセッサ＃１＿２２およびプロセッサ＃２＿２３のうち、プロセッサ番号がより小さいプロセッサ＃１＿２２にタスク＃８を起動する。それによって、タスク＃８はプロセッサ＃１＿２２のランキュー４３の最後に格納されるので、ランキュー４３にはタスク＃２、タスク＃３およびタスク＃８がこの順にタスクスイッチによる実行再開を待って格納されることになる。
【００４９】
プロセッサ＃１＿２２およびプロセッサ＃２＿２３ではタスク受付スレッドのディスパッチ終了時に受付フラグＦ１＿４５および受付フラグＦ２＿５５がアンセットされる。それによって、プロセッサ＃０＿２１にあるプロセッサ＃１＿２２に対応したＦ’１およびプロセッサ＃２＿２３に対応したＦ’２の受付フラグ３７の状態がスヌープコントローラ２４によってアンセットされる。
【００５０】
・時刻ｔ４後の時刻ｔ５の状態
プロセッサ＃０＿２１では実行タスク３１としてタスク＃１がディスパッチされている。プロセッサ＃０＿２１のランキュー３３にはタスク＃７およびタスク受付スレッドがこの順にタスクスイッチによる実行再開を待って格納されている。
【００５１】
プロセッサ＃１＿２２ではタスク受付スレッドおよびタスク＃２の実行が終了し、実行タスク４１としてタスク＃３がディスパッチされる。プロセッサ＃１＿２２のランキュー４３にはタスク＃８、タスク受付スレッドおよびタスク＃２がこの順にタスクスイッチによる実行再開を待って格納されている。
【００５２】
プロセッサ＃２＿２３ではタスク＃４、タスク＃５およびタスク＃６の実行が終了し、実行タスク５１としてタスク受付スレッドがディスパッチされる。プロセッサ＃２＿２３ではタスク受付スレッドによりプロセッサ＃２＿２３の受付フラグＦ２＿５５がセットされる。それによって、プロセッサ＃０＿２１にあるプロセッサ＃２＿２３に対応したＦ’２の受付フラグ３７がスヌープコントローラ２４によってセットされる。プロセッサ＃２＿２３のランキュー５３にはタスク＃４、タスク＃５およびタスク＃６がこの順にタスクスイッチによる実行再開を待って格納されている。
【００５３】
タスクランチャー３５はウェイトキュー３４からキューの先頭にあるタスク＃９を取り出し、ウェイトキュー３４からタスク＃９を削除する。そして、タスクランチャー３５は、取り出したタスク＃９にタグ情報があるか否かを調べる。タスク＃９にはタグ情報が付加されており、割り付け先のプロセッサとしてプロセッサ＃０＿２１が指定されている。
【００５４】
・時刻ｔ５後の時刻ｔ６の状態
タスクランチャー３５は、タスク＃９のタグ情報に基づいてプロセッサ＃０＿２１にタスク＃９を起動する。それによって、タスク＃９はプロセッサ＃０＿２１のランキュー３３の最後に格納されるので、ランキュー３３にはタスク＃７、タスク受付スレッドおよびタスク＃９がこの順にタスクスイッチによる実行再開を待って格納されることになる。
【００５５】
実施例２のスレーブプロセッサ２によれば、実施例１と同様の効果が得られる。なお、スレーブとなるプロセッサが一つまたは三つ以上あっても同様である。なお、実施例１および２においては、マルチプロセッサシステムとして複数のマイクロプロセッサを搭載したシステムを例にして説明したが、一つのマイクロプロセッサに複数のプロセッサコアが内蔵されているマルチコアシステムにも同様に適用することができる。マルチコアシステムに適用する場合には、上述した説明においてプロセッサがプロセッサコアとなる。実施例１または実施例２にかかるマルチプロセッサシステムおよびスケジューリング方法は、例えば組み込みシステムを有する装置、例えば携帯電話機などに適用することができる。
【符号の説明】
【００５６】
１  マスタープロセッサ
２  スレーブプロセッサ
３  同期部
４  第１のフラグ
５  第２のフラグ
６  第３のフラグ
【図１】
0005447666.tif 000002
【図２】
0005447666.tif 000003
【図３】
0005447666.tif 000004
【図４】
0005447666.tif 000005
【図５】
0005447666.tif 000006
【図６】
0005447666.tif 000007