(57)【特許請求の範囲】
【請求項１】
複数のプロセッサコアと、
外部に接続される複数の周辺機器と前記複数のプロセッサコアを接続するバスと、
前記バスに接続され、前記複数のプロセッサコアに割り当てられるタスクに対応する前記複数の周辺機器へのアクセス先を示すプロファイル情報を記憶する記憶部を有し、前記複数のプロセッサコアのいずれか一つは、
前記プロファイル情報に基づき、前記複数のプロセッサコアで実行中の複数のタスクに応じて前記複数の周辺機器へ送信されるアクセス要求が前記バスの競合を起こすと判定した場合に、前記バスの競合を起こす前記複数のタスクを前記バスへのアクセスが無いタスクに切り替える
マルチコアシステム。
【請求項２】
前記複数のプロセッサコアのいずれか一つは、前記プロファイル情報に基づいて、前記複数のプロセッサコアで実行中の複数のタスクに前記バスの競合を起こすアクセス要求を行うタスクが存在すると判断したときにアクセス要求の監視を開始し、前記バスの競合を起こす前記タスクを前記バスへのアクセスが無いタスクに切り替えるときにアクセス要求の監視を終了する請求項１に記載のマルチコアシステム。
【請求項３】
前記バスの使用状態を示すフラグを備え、
前記複数のプロセッサコアのいずれか一つは、前記フラグの状態が未使用を示す状態のときに、監視中のアクセス要求に対して前記周辺機器へのアクセスを許可し、前記フラグの状態を使用中を示す状態にする請求項１に記載のマルチコアシステム。
【請求項４】
前記複数のプロセッサコアのいずれか一つは、前記フラグの状態が使用中を示す状態のときに、前記アクセス要求が前記バスの競合を起こすと判定する請求項３に記載のマルチコアシステム。
【請求項５】
前記各プロセッサコアはそれぞれ前記フラグを備えており、
前記各プロセッサコアの前記フラグの状態を一致させる制御部を備える請求項３または４に記載のマルチコアシステム。
【請求項６】
複数のプロセッサコアと、外部に接続される複数の周辺機器と前記複数のプロセッサコアを接続するバスと、前記バスに接続された記憶部を有するマルチコアシステムのスケジューリング方法であって、前記複数のプロセッサコアのいずれか一つは、
前記複数のプロセッサコアに割り当てられるタスクに対応する前記複数の周辺機器へのアクセス先を示すプロファイル情報を前記記憶部に書き込み、
前記プロファイル情報に基づき、前記複数のプロセッサコアで実行中の複数のタスクに応じて前記複数の周辺機器へ送信されるアクセス要求が前記バスの競合を起こすと判定した場合に、前記バスの競合を起こす前記複数のタスクを前記バスへのアクセスが無いタスクに切り替える
マルチコアシステムのスケジューリング方法。
【請求項７】
前記複数のプロセッサコアのいずれか一つは、前記プロファイル情報に基づいて、前記複数のプロセッサコアで実行中の複数のタスクに前記バスの競合を起こすアクセス要求を行うタスクが存在すると判断したときにアクセス要求の監視を開始し、前記バスの競合を起こす前記タスクを前記バスへのアクセスが無いタスクに切り替えるときにアクセス要求の監視を終了する請求項６に記載のマルチコアシステムのスケジューリング方法。
【請求項８】
複数のプロセッサコアと、外部に接続される複数の周辺機器と前記複数のプロセッサコアを接続するバスと、前記バスに接続された記憶部を有するマルチコアシステムのスケジューリングプログラムであって、前記複数のプロセッサコアのいずれか一つに、
前記複数のプロセッサコアに割り当てられるタスクに対応する前記複数の周辺機器へのアクセス先を示すプロファイル情報を前記記憶部に書き込み、
前記プロファイル情報に基づき、前記複数のプロセッサコアで実行中の複数のタスクに応じて前記複数の周辺機器へ送信されるアクセス要求が前記バスの競合を起こすと判定した場合に、前記バスの競合を起こす前記複数のタスクを前記バスへのアクセスが無いタスクに切り替える
処理を実行させるマルチコアシステムのスケジューリングプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、マルチコアシステムおよびスケジューリング方法に関する。
【背景技術】
【０００２】
従来、図８に示すような構成のマルチコアシステムがある。このようなマルチコアシステムでは、複数のプロセッサコア（＃０、＃１）１，２がバスネットワーク３，４に接続されている。バスネットワーク３，４には複数のバス５，６が接続されている。それぞれのバス５，６には一つ以上の周辺機器（Ａ、Ｂ、Ｃ、Ｄ）７〜１０が接続されている。プロセッサコア＃０＿１で処理されているタスク＃１＿１１とプロセッサコア＃１＿２で処理されているタスク＃２＿１２とが、異なるバス５，６に接続されている周辺機器Ａ７（または周辺機器Ｂ８）と周辺機器Ｃ９（または周辺機器Ｄ１０）とに同時期にアクセスすることがある。この場合にはバスの競合が発生しない。【０００３】
また、タスク＃１＿１１とタスク＃２＿１２とが、同じバス５（またはバス６）に接続されている周辺機器Ａ７と周辺機器Ｂ８（または周辺機器Ｃ９と周辺機器Ｄ１０）とに同時期にアクセスすることがある。この場合にはバスの競合が発生するので、バスアービタが調停を行う。それによって、一方のアクセスが許可され、このアクセスの終了後に他方のアクセスが許可されることになる。【０００４】
ところで、プロセッサコアで処理されるジョブに、バスの繁忙状態を示す統計情報を添付し、この統計情報に基づいてバスの繁忙状態を軽減させるようなスケジューリングを行う負荷分散方式がある。また、バスが使用中の場合、バスの使用権を取得するまでの待ち時間にプロセッサが別のタスクの処理を行い、バスの使用権が放棄されるとプロセッサに割り込みをかけてバスを使用させるバス制御方式がある。また、プロセスの実行中に、プロセッサ間でプロセスを入れ替えることによって最適な割り当てを動的に行うシステムがある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０−２４０６９８号公報
【特許文献２】特開平４−３５４０４４号公報
【特許文献３】特開平６−２１４９５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来のバスアービタによる調停技術では、先に許可された一方のアクセスが終了するまで、他方のアクセスの許可が待たされるので、この他方のアクセスの許可を待つプロセッサコアではタスクの処理が停止（ストール）してしまう。そのため、バスの競合を起こした二つのタスクの処理が終了するまでの時間が増えてしまうので、マルチコアシステムの性能の低下を招くという問題点がある。【０００７】
性能の低下を防ぐことができるマルチコアシステムおよびスケジューリング方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
マルチコアシステムは複数のプロセッサコア、バス、複数の周辺機器、プロファイル情報、監視部およびスケジューラを備える。バスは各プロセッサコアに接続されている。各周辺機器はバスを介して各プロセッサコアからアクセス可能になっている。プロファイル情報は、プロセッサコアに割り当てられる各タスクの周辺機器へのアクセスに関する情報を含んでいる。監視部は、プロファイル情報に基づいて各プロセッサコアで実行中のタスクから各周辺機器へのアクセス要求を監視する。監視部は、バスの競合を起こすアクセス要求を禁止する。スケジューラは、バスの競合を起こすアクセス要求を監視部が禁止したときにそのバスの競合を起こすタスクを別のタスクに切り替える。【０００９】
スケジューリング方法において、プロファイル情報として、プロセッサコアに割り当てられる各タスクの周辺機器へのアクセスに関する情報が予め用意される（第１のプロセス）。次いで、プロファイル情報に基づいて各プロセッサコアで実行中のタスクから各周辺機器へのアクセス要求が監視され、バスの競合を起こすアクセス要求が禁止される（第２のプロセス）。次いで、アクセス要求が禁止されたバスの競合を起こすタスクが別のタスクに切り替えられる（第３のプロセス）。
【発明の効果】
【００１０】
マルチコアシステムおよびスケジューリング方法によれば、マルチコアシステムの性能の低下を防ぐことができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】実施例１にかかるマルチコアシステムを示すブロック図である。
【図２】実施例１にかかるスケジューリング方法を示すフローチャートである。
【図３】実施例２にかかるマルチコアシステムを示すブロック図である。
【図４】実施例２にかかるスケジューリング方法におけるスケジューラの処理手順を示すフローチャートである。
【図５】図４の続きを示すフローチャートである。
【図６】実施例２にかかるスケジューリング方法におけるアクセスチェッカーの処理手順を示すフローチャートである。
【図７】図６の続きを示すフローチャートである。
【図８】従来のマルチコアシステムを示すブロック図である。
【発明を実施するための形態】
【００１２】
以下に、この発明にかかるマルチコアシステムおよびスケジューリング方法の実施例を図面に基づいて詳細に説明する。以下の実施例は、マルチコアシステムにおいて、周辺機器へのアクセス情報に基づいて周辺機器へのアクセス要求を監視してバスの競合を起こすアクセス要求を禁止し、バスの競合を起こすタスクを別のタスクに切り替えるようにしたものである。ここでは、プロセッサコアが行う処理において意味のある一つのかたまり（処理の単位）をタスクと表現している。従って、タスクにはスレッドやプロセスなどの概念も含まれる。なお、この実施例によりこの発明が限定されるものではない。
【００１３】
（実施例１）
・マルチコアシステムの説明
図１は、実施例１にかかるマルチコアシステムを示すブロック図である。図１に示すように、マルチコアシステムは、複数のプロセッサコア（＃０、＃１）２１，２２、バス２３、複数の周辺機器（Ａ、Ｂ）２４，２５、プロファイル情報２６、監視部２７およびスケジューラ２８を備えている。バス２３は各プロセッサコア（＃０、＃１）２１，２２に接続されている。各周辺機器（Ａ、Ｂ）２４，２５はバス２３を介して各プロセッサコア（＃０、＃１）２１，２２からアクセス可能になっている。
【００１４】
プロファイル情報２６は、プロセッサコア（＃０、＃１）２１，２２に割り当てられる各タスクの周辺機器（Ａ、Ｂ）２４，２５へのアクセスに関する情報を含んでいる。監視部２７は、プロファイル情報２６に基づいて各プロセッサコア（＃０、＃１）２１，２２で実行中のタスクから各周辺機器（Ａ、Ｂ）２４，２５へのアクセス要求を監視する。監視部２７は、バスの競合を起こすアクセス要求を禁止する。スケジューラ２８は、バスの競合を起こすアクセス要求を監視部２７が禁止したときにそのバスの競合を起こすタスクを別のタスクに切り替える。
【００１５】
・スケジューリング方法の説明
図２は、実施例１にかかるスケジューリング方法を示すフローチャートである。図２に示すように、タスクのスケジューリングを行うにあたって、予め上述したプロファイル情報２６が用意される（ステップＳ１）。次いで、監視部２７は、プロファイル情報２６に基づいて、各プロセッサコア（＃０、＃１）２１，２２で実行中のタスクから各周辺機器（Ａ、Ｂ）２４，２５へのアクセス要求を監視する（ステップＳ２）。いずれかのプロセッサコア（＃０、＃１）２１，２２で実行中のタスクからのアクセス要求によってバスの競合が発生する場合（ステップＳ３：Ｙｅｓ）、監視部２７は、バスの競合を起こすアクセス要求を禁止する（ステップＳ４）。
【００１６】
次いで、スケジューラ２８は、アクセス要求が禁止されたバスの競合を起こすタスクを別のタスクに切り替える（ステップＳ５）。そして、監視部２７によるアクセス要求の監視に戻り（ステップＳ２）、以降ステップＳ２からステップＳ５までを繰り返す。一方、バスの競合が発生しない場合（ステップＳ３：Ｎｏ）、監視部２７は各周辺機器（Ａ、Ｂ）２４，２５へのアクセス要求の監視を続ける（ステップＳ２）。なお、バスの競合が発生しない場合（ステップＳ３：Ｎｏ）、またはバスの競合を起こさないタスクに切り替えた場合（ステップＳ５）、バスの競合が発生しないことが明らかであるので、監視部２７によるアクセス要求の監視を終了してもよい。
【００１７】
実施例１によれば、バスの競合を起こすアクセス要求を行ったタスクが別のタスクに切り替えられるので、バスの競合を起こすアクセス要求を行ったタスクを実行しているプロセッサコアは、別のプロセッサコアで処理されているタスクがバスを使用している間に別のタスクを処理することができる。従って、バスの競合を起こすアクセス要求を行ったタスクを実行しているプロセッサコアは、バスが空くまでタスクの処理を停止（ストール）する必要がないので、マルチコアシステムの性能が低下するのを防ぐことができる。
【００１８】
（実施例２）
・マルチコアシステムの説明
図３は、実施例２にかかるマルチコアシステムを示すブロック図である。図３に示すように、マルチコアシステムは、複数のプロセッサコア（＃０、＃１）３１，３２を備えている。各プロセッサコア（＃０、＃１）３１，３２は、バスネットワーク３３，３４およびバス３５，３６を介して複数の周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０にアクセスすることができる。同じバス３５（またはバス３６）に接続されている周辺機器Ａ３７と周辺機器Ｂ３８（または周辺機器Ｃ３９と周辺機器Ｄ４０）とに対して同時期にアクセス要求が発行されると、バスの競合が発生する。異なるバス３５，３６に接続されている周辺機器Ａ３７（または周辺機器Ｂ３８）と周辺機器Ｃ３９（または周辺機器Ｄ４０）とに対して同時期にアクセス要求が発行されても、バスの競合は発生しない。
【００１９】
各プロセッサコア（＃０、＃１）３１，３２には、タスクの実行待ちキュー５１，６１が設けられている。実行待ちキュー５１，６１には各プロセッサコア（＃０、＃１）３１，３２で処理されるのを待つ未処理のタスクが格納される。一例として、図３に示す例では実行待ちタスクとして、プロセッサコア＃０＿３１の実行待ちキュー５１にタスク＃１およびタスク＃３が格納されており、プロセッサコア＃１＿３２の実行待ちキュー６１にタスク＃２およびタスク＃４が格納されている。
【００２０】
各タスクは、マスタとなる例えばプロセッサコア＃０＿３１で動作するオペレーティングシステム（ＯＳ：Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）５４のスケジューラ５５により各プロセッサコア（＃０、＃１）３１，３２に割り当てられる。各プロセッサコア（＃０、＃１）３１，３２に割り当てられたタスクは、それぞれのプロセッサコア（＃０、＃１）３１，３２で動作するオペレーティングシステム（ＯＳ）５４，６４のスケジューラ５５，６５によりスケジューリングされる。
【００２１】
マスタとなる例えばプロセッサコア＃０＿３１のスケジューラ５５は他のプロセッサコア＃１＿３２（マスタに対してスレーブとする）のスケジューラ６５と連携をとる。それによって、全てのプロセッサコア（＃０、＃１）３１，３２のスケジューラ５５，６５は、各プロセッサコア（＃０、＃１）３１，３２に割り当てられているタスクを把握する。スケジューラ５５，６５は各プロセッサコア（＃０、＃１）３１，３２でオペレーティングシステム（ＯＳ）５４，６４が動作することによって実現される。
【００２２】
また、各プロセッサコア（＃０、＃１）３１，３２でオペレーティングシステム（ＯＳ）５４，６４が動作することによって、各プロセッサコア（＃０、＃１）３１，３２で監視部としてのアクセスチェッカー５３，６３が実現される。プロセッサコア＃０＿３１のアクセスチェッカー５３は、プロセッサコア＃０＿３１で実行中のタスクから周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求を監視する。プロセッサコア＃１＿３２のアクセスチェッカー６３は、プロセッサコア＃１＿３２で実行中のタスクから周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求を監視する。アクセスチェッカー５３，６３は、全てのプロセッサコア（＃０、＃１）３１，３２で実行されるタスク群に周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセスによってバスの競合を起こすタスクが存在する場合にアクセス要求を監視する。アクセスチェッカー５３，６３は、バスの競合が起こる周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求を禁止する。
【００２３】
オペレーティングシステム（ＯＳ）５４，６４上では、実行中のタスクがアクセスする周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０に対応するドライバ５２，６２が動作する。なお、図３には、実行中のタスクの一例としてタスク＃１およびタスク＃２を一点鎖線で示している。
【００２４】
また、各プロセッサコア（＃０、＃１）３１，３２にはフラグ５６，６６が設けられている。プロセッサコア＃０＿３１のフラグ５６は例えばプロセッサコア＃０＿３１内のキャッシュ５７の一部に設けられている。プロセッサコア＃１＿３２のフラグ６６は例えばプロセッサコア＃１＿３２内のキャッシュ６７の一部に設けられている。フラグ５６，６６の値はアクセスチェッカー５３，６３によって制御される。フラグ５６，６６の値は、バスの競合を起こすタスクがバスの競合が起こる周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセスを要求する場合に例えば１となる。バスの競合を起こさないタスクが周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセスを要求する場合には、フラグ５６，６６の値は例えば０である。
【００２５】
プロセッサコア＃０＿３１のフラグ５６の値とプロセッサコア＃１＿３２のフラグ６６の値とは、例えばハードウェアとして提供される制御部としてのスヌープコントローラ４１によってコヒーレンシ（同一性）が保たれている。スヌープコントローラ４１を利用することによって、プロセッサコア（＃０、＃１）３１，３２内のバスを使用しないでプロセッサコア（＃０、＃１）３１，３２間でフラグ５６，６６の値を同じに保つことができる。なお、スヌープコントローラ４１に代えてプロセッサ間通信を利用してもよい。
【００２６】
また、各プロセッサコア（＃０、＃１）３１，３２はプロファイル情報４２を取得する。プロファイル情報４２は、各プロセッサコア（＃０、＃１）３１，３２に割り当てられるタスクがいずれの周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０にアクセスするかという情報を含んでいる。プロファイル情報４２は、例えばアプリケーションプログラムの設計段階で予めプロファイラやシミュレータにより取得されている。プロファイル情報４２は、例えばアプリケーションプログラム中に記述されており、各プロセッサコア（＃０、＃１）３１，３２でアプリケーションプログラムを実行する際に各プロセッサコア（＃０、＃１）３１，３２に内蔵されたメモリ（図示省略）に格納される。各プロセッサコア（＃０、＃１）３１，３２のスケジューラ５５，６５はプロファイル情報４２に基づいてタスクのスケジューリングを行う。
【００２７】
・スケジューリング方法の説明
実施例２にかかるスケジューリング方法の説明として、スケジューラの処理手順とアクセスチェッカーの処理手順とを説明する。
【００２８】
・スケジューラの処理手順の説明
まず、スケジューラの処理手順について説明する。マスタとなる例えばプロセッサコア＃０＿３１におけるスケジューラ５５の処理手順とスレーブとなる例えばプロセッサコア＃１＿３２におけるスケジューラ６５の処理手順とは、タスクの割り当て処理を除いて同じである。ここではマスタとなる例えばプロセッサコア＃０＿３１のスケジューラ５５の処理手順について説明する。
【００２９】
図４は、実施例２にかかるスケジューリング方法におけるスケジューラの処理手順を示すフローチャートである。図５は、図４の続きを示すフローチャートである。図４に示すように、スケジューラ５５で処理が開始されると、まずスケジューラ５５は各プロセッサコア（＃０、＃１）３１，３２へ、それぞれのプロセッサコア（＃０、＃１）３１，３２が実行するアプリケーションをスケジューリングして割り当てる（ステップＳ１１）。次いで、スケジューラ５５はプロファイル情報４２を取得する（ステップＳ１２）。
【００３０】
次いで、スケジューラ５５はいずれかのプロセッサコア（＃０、＃１）３１，３２でタスクスイッチ、タスクディスパッチまたはタスクの終了が発生したか否かを判断する（ステップＳ１３）。タスクスイッチ、タスクディスパッチまたはタスクの終了が発生していない場合（ステップＳ１３：Ｎｏ）、タスクスイッチ、タスクディスパッチまたはタスクの終了が発生するのを待つ。タスクスイッチ、タスクディスパッチまたはタスクの終了が発生した場合（ステップＳ１３：Ｙｅｓ）、スケジューラ５５は、全てのプロセッサコア（＃０、＃１）３１，３２でこれから実行されるタスク群に周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセスによってバスの競合を起こすタスクが存在するか否かを判断する（ステップＳ１４）。
【００３１】
バスの競合を起こすタスクが存在しない場合（ステップＳ１４：Ｎｏ）、ステップＳ１３に戻っていずれかのプロセッサコア（＃０、＃１）３１，３２で新たにタスクスイッチ、タスクディスパッチまたはタスクの終了が発生するのを待つ。その間、プロセッサコア＃０＿３１は、ディスパッチされているタスクを実行する。バスの競合を起こすタスクが存在する場合（ステップＳ１４：Ｙｅｓ）、スケジューラ５５はプロセッサコア＃０＿３１のアクセスチェッカー５３へ、周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求の監視を開始することを通知する（ステップＳ１５）。アクセスチェッカー５３はこの通知を受けて周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求の監視を開始する。アクセスチェッカー５３での処理内容については後述する。
【００３２】
次いで、図５に示すように、スケジューラ５５はアクセスチェッカー５３からタスクスイッチの通知があるか否かを判断する（ステップＳ１６）。プロセッサコア＃０＿３１で実行中のバスの競合を起こすタスクが周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求を発行したときに、既にプロセッサコア＃１＿３２で実行中のバスの競合を起こすタスクが周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へアクセスしていることがある。この場合、プロセッサコア＃０＿３１のアクセスチェッカー５３からタスクスイッチの通知が発行される。従って、タスクスイッチの通知がある場合（ステップＳ１６：Ｙｅｓ）、スケジューラ５５はプロセッサコア＃０＿３１の実行待ちキュー５１にバスの競合を起こさないタスクが存在するか否かを判断する（ステップＳ１９）。
【００３３】
一般に、オペレーティングシステム５４が動作していれば数十個程度のタスクが存在するので、実行待ちキュー５１には複数のタスクが格納されている。バスの競合を起こさないタスクが存在する場合（ステップＳ１９：Ｙｅｓ）、スケジューラ５５はタスクディスパッチの順番を変更し、バスの競合を起こすタスクよりも先にバスの競合を起こさないタスクが処理されるようにする（ステップＳ２０）。スケジューラ５５は、タスクディスパッチの順番を変更したことをアクセスチェッカー５３へ通知する。そして、ステップＳ１６に戻るが、ここではアクセスチェッカー５３からのタスクスイッチの通知がないので（ステップＳ１６：Ｎｏ）、スケジューラ５５はタスクスイッチまたはタスクディスパッチが発生したか否かを判断する（ステップＳ１７）。
【００３４】
ここではステップＳ２０でタスクディスパッチの順番が変更されたバスの競合を起こさないタスクのディスパッチが発生するので（ステップＳ１７：Ｙｅｓ）、スケジューラ５５はアクセスチェッカー５３へ、周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求の監視を終了することを通知する（ステップＳ１８）。アクセスチェッカー５３はこの通知を受けて周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求の監視を終了する。そして、ステップＳ１４に戻るが、ここではこれから実行されるタスク群にバスの競合を起こすタスクが存在しないので（ステップＳ１４：Ｎｏ）、ステップＳ１３に戻っていずれかのプロセッサコア（＃０、＃１）３１，３２で新たにタスクスイッチ、タスクディスパッチまたはタスクの終了が発生するのを待つ。その間、プロセッサコア＃０＿３１は、ステップＳ２０でディスパッチの順番が先にされたバスの競合を起こさないタスクを実行する。
【００３５】
一方、アクセスチェッカー５３からタスクスイッチの通知があったが（ステップＳ１６：Ｙｅｓ）、実行待ちキュー５１にバスの競合を起こさないタスクが存在しない場合（ステップＳ１９：Ｎｏ）、スケジューラ５５は、実行中のタスクの処理を停止（ストール）し、アクセスチェッカー５３へアクセス要求の監視を終了することを通知する（ステップＳ２１）。そして、ステップＳ１３に戻っていずれかのプロセッサコア（＃０、＃１）３１，３２で新たにタスクスイッチ、タスクディスパッチまたはタスクの終了が発生するのを待つ。
【００３６】
また、アクセスチェッカー５３からタスクスイッチの通知がなく（ステップＳ１６：Ｎｏ）、かつタスクスイッチもタスクディスパッチも発生していない場合には（ステップＳ１７：Ｎｏ）、スケジューラ５５はアクセスチェッカー５３からのタスクスイッチの通知、またはタスクスイッチもしくはタスクディスパッチの発生を待つ。以上のステップＳ１３からステップＳ２１までの処理を、実行するタスクがなくなるまで繰り返す。スレーブとなる例えばプロセッサコア＃１＿３２のスケジューラ６５については、図４および図５に示す一連の処理手順においてステップＳ１１が省略される。
【００３７】
・アクセスチェッカーの処理手順の説明
次に、アクセスチェッカーの処理手順について説明する。マスタとなる例えばプロセッサコア＃０＿３１におけるアクセスチェッカー５３の処理手順とスレーブとなる例えばプロセッサコア＃１＿３２におけるアクセスチェッカー６３の処理手順とは同じである。ここではマスタとなる例えばプロセッサコア＃０＿３１のアクセスチェッカー５３の処理手順について説明する。
【００３８】
図６は、実施例２にかかるスケジューリング方法におけるアクセスチェッカーの処理手順を示すフローチャートである。図７は、図６の続きを示すフローチャートである。図６に示すように、アクセスチェッカー５３で処理が開始されると、まずアクセスチェッカー５３はプロセッサコア＃０＿３１のスケジューラ５５から、プロセッサコア（＃０、＃１）３１，３２で実行されるタスク群について周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求の監視を開始するという通知が来たか否かを判断する（ステップＳ３１）。この監視開始の通知は、上述したスケジューラの処理手順においてステップＳ１５で発行されたものである。
【００３９】
監視開始の通知が来ていない場合（ステップＳ３１：Ｎｏ）、通知が来るのを待つ。監視開始の通知が来た場合（ステップＳ３１：Ｙｅｓ）、アクセスチェッカー５３は、プロセッサコア＃０＿３１で実行中のタスクが周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へアクセスを要求するのを監視する（ステップＳ３２）。そして、アクセスチェッカー５３は、プロセッサコア＃０＿３１で実行中のタスクから周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求を検出したか否かを判断する（ステップＳ３３）。
【００４０】
周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求を検出した場合（ステップＳ３３：Ｙｅｓ）、図７に示すように、アクセスチェッカー５３はプロセッサコア＃０＿３１のフラグ５６の値が１であるか否かを判断する（ステップＳ３５）。フラグ５６の値が０である場合（ステップＳ３５：Ｎｏ）、アクセスチェッカー５３はフラグ５６の値を１に変更する。その際、例えばスヌープコントローラ４１によってプロセッサコア＃１＿３２のフラグ６６の値も１に変更される。そして、アクセスチェッカー５３は、プロセッサコア＃０＿３１で実行中のタスクが周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へアクセスするのを許可する（ステップＳ３７）。
【００４１】
次いで、アクセスチェッカー５３は許可した周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセスが終了したか否かを判断する（ステップＳ３８）。周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセスが終了していない場合（ステップＳ３８：Ｎｏ）、終了するのを待つ。周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセスが終了した場合（ステップＳ３８：Ｙｅｓ）、アクセスチェッカー５３はプロセッサコア＃０＿３１のフラグ５６の値を０に変更する（ステップＳ３９）。その際、例えばスヌープコントローラ４１によってプロセッサコア＃１＿３２のフラグ６６の値も０に変更される。そして、ステップＳ３２に戻り、アクセスチェッカー５３は、プロセッサコア＃０＿３１で実行中のタスクが周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へアクセスを要求するのを監視する。
【００４２】
一方、プロセッサコア＃０＿３１で実行中のタスクが周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセスを要求したときに（ステップＳ３３：Ｙｅｓ）、既にプロセッサコア＃１＿３２で実行中のタスクが、バスの競合が起こる周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へアクセスしていることがある。この場合、プロセッサコア＃１＿３２のフラグ６６の値が既に０から１に変更されており、その変更が例えばスヌープコントローラ４１によってプロセッサコア＃０＿３１のフラグ５６の値にも反映されているので、フラグ５６の値は１となっている（ステップＳ３５：Ｙｅｓ）。
【００４３】
この場合、アクセスチェッカー５３は、プロセッサコア＃０＿３１で実行中のタスクから周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求を禁止し、プロセッサコア＃０＿３１のスケジューラ５５へタスクスイッチの通知をする（ステップＳ３６）。上述したスケジューラの処理手順において、ステップＳ１６でこのタスクスイッチの通知があるか否かがスケジューラ５５により判断される。次いで、ステップＳ３２に戻り、アクセスチェッカー５３は、プロセッサコア＃０＿３１で実行中のタスクが周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へアクセスを要求するのを監視する。
【００４４】
アクセスチェッカー５３は、周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求を監視しているときに、上述したスケジューラの処理手順のステップＳ２０においてスケジューラ５５が発行した通知を受け取ることがある。この通知は、タスクディスパッチの順番が変更され、バスの競合を起こさないタスクがディスパッチされたことを示している。従って、この通知を受け取った場合、プロセッサコア＃０＿３１ではバスの競合を起こさないタスクが実行されることになるので、このタスクの実行中にバスの競合が起こるような周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求は起こらない。
【００４５】
この場合は例外として、バスの競合を起こさないタスクが周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へアクセスを要求しても、アクセスチェッカー５３はこのアクセス要求を検出しない（ステップＳ３３：Ｎｏ）。そして、アクセスチェッカー５３は、スケジューラ５５から周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求の監視を終了するという通知が来たか否かを判断する（ステップＳ３４）。この監視終了の通知は、上述したスケジューラの処理手順においてステップＳ１８で発行されたものである。
【００４６】
監視終了の通知が来ていない場合（ステップＳ３４：Ｎｏ）、ステップＳ３２に戻り、アクセスチェッカー５３は周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求の監視を続ける。監視終了の通知が来た場合（ステップＳ３４：Ｙｅｓ）、ステップＳ３１に戻り、アクセスチェッカー５３は周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求の監視開始の通知が来るのを待つ。以上のステップＳ３１からステップＳ３９までの処理を、実行するタスクがなくなるまで繰り返す。
【００４７】
なお、周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求の監視を開始することの通知の有無を、専用のフラグを設けて、このフラグの値で判断するようにしてもよい。ただし、この場合には、各プロセッサコア（＃０、＃１）３１，３２間で通知の有無を判断するフラグのコヒーレンシ（同一性）を保つ必要はない。周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求の監視を終了することの通知の有無、タスクディスパッチの順番を変更したことの通知の有無、およびタスクスイッチの通知の有無についても同様である。
【００４８】
・スケジューリング処理の具体例
実施例２にかかるマルチコアシステムでは、主に次の（１）から（３）のケースが考えられる。この３ケースについて上述したフローチャートを参照しながら説明する。
（１）プロセッサコア＃０＿３１およびプロセッサコア＃１＿３２で実行されるタスク群がバスの競合を起こさない場合。
（２）プロセッサコア＃０＿３１およびプロセッサコア＃１＿３２で実行されるタスク群がバスの競合を起こし、かつプロセッサコア＃０＿３１の実行待ちキュー５１（またはプロセッサコア＃１＿３２の実行待ちキュー６１）にバスの競合を起こさないタスクが存在する場合。
（３）プロセッサコア＃０＿３１およびプロセッサコア＃１＿３２で実行されるタスク群がバスの競合を起こし、かつプロセッサコア＃０＿３１の実行待ちキュー５１（またはプロセッサコア＃１＿３２の実行待ちキュー６１）にバスの競合を起こさないタスクが存在しない場合。
【００４９】
・（１）のケース
プロセッサコア（＃０、＃１）３１，３２でこれから実行されるタスク群に周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセスによってバスの競合を起こすタスクが存在しない（ステップＳ１４：Ｎｏ）。従って、実行されるタスク群に周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセスによってバスの競合を起こすタスクが出現するまで各プロセッサコア（＃０、＃１）３１，３２は次々とタスクを処理する。このケースでは、各プロセッサコア（＃０、＃１）３１，３２のアクセスチェッカー５３，６３は周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求を監視していない。各プロセッサコア（＃０、＃１）３１，３２のフラグ５６，６６の値は０である。
【００５０】
・（２）のケース
プロセッサコア（＃０、＃１）３１，３２でこれから実行されるタスク群に周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセスによってバスの競合を起こすタスクが存在する（ステップＳ１４：Ｙｅｓ）。従って、各プロセッサコア（＃０、＃１）３１，３２のアクセスチェッカー５３，６３は周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求を監視する（ステップＳ１５、ステップＳ３１：Ｙｅｓ、ステップＳ３２）。この状態で、例えばプロセッサコア＃１＿３２のアクセスチェッカー６３が、プロセッサコア＃１＿３２で実行中のタスクが周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセスを要求したのを検出したとする（ステップＳ３３：Ｙｅｓ）。この場合、プロセッサコア＃１＿３２のフラグ６６の値は０であるので（ステップＳ３５：Ｎｏ）、このフラグ６６の値が１に変更される。同時に、例えばスヌープコントローラ４１によってプロセッサコア＃０＿３１のフラグ５６の値も１に変更される。
【００５１】
また、プロセッサコア＃１＿３２で実行中のタスクは周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセスが許可される（ステップＳ３７）。それによって、プロセッサコア＃１＿３２で実行中のタスクは周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へアクセスする。プロセッサコア＃１＿３２で実行中のタスクによる周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセスが終了すると（ステップＳ３８：Ｙｅｓ）、プロセッサコア＃１＿３２のフラグ６６の値が０に戻る（ステップＳ３９）。同時に、例えばスヌープコントローラ４１によってプロセッサコア＃０＿３１のフラグ５６の値も０に戻る。
【００５２】
プロセッサコア＃１＿３２で実行中のタスクが周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へアクセスしている間、プロセッサコア＃０＿３１のフラグ５６の値は１となっている。このときにプロセッサコア＃０＿３１で実行中のタスクが、バスの競合が起こる周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセスを要求すると、そのアクセス要求がプロセッサコア＃０＿３１のアクセスチェッカー５３で検出される（ステップＳ３３：Ｙｅｓ）。プロセッサコア＃０＿３１のフラグ５６の値は１であるので（ステップＳ３５：Ｙｅｓ）、プロセッサコア＃０＿３１で実行中のタスクからの周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求が禁止される（ステップＳ３６）。そして、プロセッサコア＃０＿３１のスケジューラ５５により、バスの競合を起こさないタスクが先に処理されるようにタスクディスパッチの順番が変更される（ステップＳ３６、ステップＳ１６：Ｙｅｓ、ステップＳ１９：Ｙｅｓ、ステップＳ２０）。
【００５３】
プロセッサコア＃０＿３１で実行されるタスクがバスの競合を起こさないタスクに変更されたので（ステップＳ１７：Ｙｅｓ）、各プロセッサコア（＃０、＃１）３１，３２のアクセスチェッカー５３，６３は周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求の監視を終了する（ステップＳ１８、ステップＳ３４：Ｙｅｓ）。プロセッサコア＃０＿３１で実行中のタスクのアクセスが許可され、プロセッサコア＃１＿３２でタスクディスパッチの順番が変更される場合も同様である。
【００５４】
・（３）のケース
プロセッサコア＃０＿３１で実行中のタスクからの周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセス要求が禁止されるところまでは、上記（２）のケースと同じである。このアクセス要求が禁止されても（ステップＳ３６）、プロセッサコア＃０＿３１の実行待ちキュー５１にバスの競合を起こさないタスクが存在しないので（ステップＳ１６：Ｙｅｓ、ステップＳ１９：Ｎｏ）、プロセッサコア＃０＿３１で実行中のタスクの処理が停止（ストール）する（ステップＳ２１）。プロセッサコア＃１＿３２で実行中のタスクによる周辺機器（Ａ、Ｂ、Ｃ、Ｄ）３７〜４０へのアクセスが終了すると（ステップＳ３８：Ｙｅｓ）、各プロセッサコア（＃０、＃１）３１，３２のフラグ５６，６６の値は０に戻る（ステップＳ３９）。
【００５５】
実施例２によれば、実施例１と同様の効果が得られる。例えば、１秒間当たりのディスパッチ回数をＮ（回／ｓ）とすると、タスクが１回ディスパッチされるたびに動作する時間は１／Ｎ（ｓ）である。Ｍ個のタスクが同時に動作しているとすると、１秒間当たりに各タスクがディスパッチされる回数はＮ／Ｍ（回／ｓ）である。従って、１秒間当たりに各タスクが動作する合計時間は（Ｎ／Ｍ）×１／Ｎ、すなわち１／Ｍ（ｓ）となる。従って、従来のようにタスクの処理を停止（ストール）する場合に比べて、バスの競合が１回起こると１／Ｍ（ｓ）の処理時間を有効に使うことができる。例えば組み込みシステムの場合には数十個程度のタスクが同時に動作するので、十分な効果が得られる。
【００５６】
なお、実施例１および２においては、マルチコアシステムとして、一つのマイクロプロセッサに複数のプロセッサコアが内蔵されているマルチコアプロセッサを例にして説明したが、複数のマイクロプロセッサを搭載したマルチプロセッサにも同様に適用することができる。マルチプロセッサに適用する場合には、上述した説明においてプロセッサコアがプロセッサとなる。実施例１または実施例２にかかるマルチコアシステムおよびスケジューリング方法は、例えばマルチコアベースの組み込みシステムを有する装置、例えば携帯電話機などに適用することができる。
【符号の説明】
【００５７】
２１，２２  プロセッサコア
２３  バス
２４，２５  周辺機器
２６  プロファイル情報
２７  監視部
２８  スケジューラ
４１  制御部
【図１】
0005397544.tif 000002
【図２】
0005397544.tif 000003
【図３】
0005397544.tif 000004
【図４】
0005397544.tif 000005
【図５】
0005397544.tif 000006
【図６】
0005397544.tif 000007
【図７】
0005397544.tif 000008
【図８】
0005397544.tif 000009