(57)【要約】  マルチコアプロセッサシステム（１００）において、スケジューラ（１０２）は、アプリ（＃０）が起動された場合、ＣＰＵ（＃０）にアプリ（＃０）を割り当てる。ＣＰＵ（＃０）は、アプリ（＃０）が割り当てられた結果、アプリ（＃０）の実行を開始する。スケジューラ（１０２）は、ＣＰＵ（＃１）に対して、各ＣＰＵ（＃０）〜ＣＰＵ（＃Ｎ）の負荷の計算を指示する。スケジューラ（１０２）は、ＣＰＵ（＃０）〜ＣＰＵ（＃Ｎ）のうち負荷が最小のＣＰＵ（＃ｉ）にアプリ（＃０）を割り当てる。この結果、アプリ（＃０）のコンテキスト情報がＣＰＵ（＃０）のキャッシュに退避され、該コンテキスト情報がＣＰＵ（＃ｉ）のキャッシュに転送される。ＣＰＵ（＃ｉ）は、アプリ（＃０）が割り当てられた結果、アプリ（＃０）の実行を開始する。
2012098683.tif 000002
【特許請求の範囲】
【請求項１】
第１プロセッサおよび第２プロセッサを含む複数のプロセッサを管理するスケジューラが、
アプリケーションが起動されたときに、前記アプリケーションを前記第１プロセッサに割り当て、
前記第２プロセッサに前記複数のプロセッサの負荷の計算を指示し、
前記負荷に基づいて、前記アプリケーションの割り当てを維持し、または、前記アプリケーションの割り当てを変更すること
を特徴とするスケジューリング方法。
【請求項２】
前記アプリケーションの割り当て時に、前記第１プロセッサの動作クロックの周波数を変更すること
を特徴とする請求項１に記載のスケジューリング方法。
【請求項３】
前記アプリケーションが割り当てられたときに、前記第１プロセッサにおいて、前記アプリケーションの実行が開始されること
を特徴とする請求項１または請求項２に記載のスケジューリング方法。
【請求項４】
前記スケジューラは、
前記第１プロセッサの負荷が第３プロセッサの負荷よりも大きいとき、前記アプリケーションの割り当てを前記第３プロセッサに変更すること
を特徴とする請求項１乃至請求項３の何れか一に記載のスケジューリング方法。
【請求項５】
前記アプリケーションの割り当てが第３プロセッサに変更されるとき、前記第１プロセッサでの前記アプリケーションの実行情報およびコンテキスト情報を前記第３プロセッサに供給すること
を特徴とする請求項１乃至請求項４の何れか一に記載のスケジューリング方法。
【請求項６】
第１プロセッサおよび第２プロセッサを含む複数のプロセッサと、
前記複数のプロセッサを管理するスケジューラと、
を含み、
前記第１プロセッサは、起動されたアプリケーションの実行を開始し、
前記第２プロセッサは、前記複数のプロセッサの負荷の計算を指示し、
前記スケジューラは、前記負荷に基づいて、前記アプリケーションの割り当てを前記第１プロセッサに維持しまたは他のプロセッサに変更すること
を特徴とするスケジューリングシステム。
【請求項７】
前記アプリケーションの実行前に、前記第１プロセッサの動作クロックの周波数を変更する分周回路を含むこと
を特徴とする請求項６に記載のスケジューリングシステム。
【請求項８】
前記スケジューラは、
前記第１プロセッサの負荷が前記他のプロセッサの負荷よりも大きいとき、前記アプリケーションの割り当てを前記他のプロセッサに変更すること
を特徴とする請求項６または請求項７に記載のスケジューリングシステム。
【請求項９】
前記スケジューラは、
前記第１プロセッサでの前記アプリケーションの実行情報およびコンテキスト情報を前記他のプロサッサに供給すること
を特徴とする請求項６乃至請求項８の何れか一に記載のスケジューリングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スケジューリング方法およびスケジューリングシステムに関する。
【背景技術】
【０００２】
近年、多くの情報機器において、高性能および低消費電力に対する要求は大きく、高性能および低消費電力化を実現するための手段として、マルチコアプロセッサを用いたシステム開発が行われるようになってきた。【０００３】
関連する先行技術としては、例えば、マイクロコンピュータにおけるタスクの切り替えに関するものがある（例えば、下記特許文献１，２参照。）。また、複数のプロセッサコアの電力制御に関する技術がある（例えば、下記特許文献３参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−２７２８９４号公報
【特許文献２】特開平１０−２０７７１７号公報
【特許文献３】特許第４４１３９２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来のマルチコアプロセッサシステムでは、アプリケーションの起動時に、割当先となるプロセッサをスケジューリングした後、アプリケーションの実行を開始する。このため、従来のマルチコアプロセッサシステムは、シングルコアでアプリケーションを実行する場合に比べて、起動時間の長期化を招くという問題があった。【０００６】
本発明は、上述した従来技術による問題点を解消するため、アプリケーションの起動時間の高速化を図ることができるスケジューリング方法およびスケジューリングシステムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、第１プロセッサおよび第２プロセッサを含む複数のプロセッサを管理するスケジューラが、アプリケーションが起動されたときに、前記アプリケーションを前記第１プロセッサに割り当て、前記第２プロセッサに前記複数のプロセッサの負荷の計算を指示し、前記負荷に基づいて、前記アプリケーションの割り当てを維持し、または、前記アプリケーションの割り当てを変更するスケジューリング方法が提案される。【０００８】
また、上述した課題を解決し、目的を達成するため、本発明の一側面によれば、第１プロセッサおよび第２プロセッサを含む複数のプロセッサと、前記複数のプロセッサを管理するスケジューラとを含み、前記第１プロセッサは、起動されたアプリケーションの実行を開始し、前記第２プロセッサは、前記複数のプロセッサの負荷の計算を指示し、前記スケジューラは、前記負荷に基づいて、前記アプリケーションの割り当てを前記第１プロセッサに維持しまたは他のプロセッサに変更するスケジューリングシステムが提案される。
【発明の効果】
【０００９】
本発明の一側面によれば、アプリケーションの起動時間の高速化を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施の形態にかかるマルチコアプロセッサシステムのスケジューリング処理の一実施例を示す説明図である。
【図２】図２は、実施の形態にかかるマルチコアプロセッサシステム構成の一例を示す説明図である。
【図３】図３は、分周回路の一例を示す説明図である。
【図４】図４は、実施の形態にかかるスケジューラの機能的構成を示すブロック図である。
【図５】図５は、実施の形態にかかるスケジューラによるスケジューリング処理手順の一例を示すフローチャート（その１）である。
【図６】図６は、実施の形態にかかるスケジューラによるスケジューリング処理手順の一例を示すフローチャート（その２）である。
【図７】図７は、ＣＰＵ＃１の割当先決定処理手順の一例を示すフローチャートである。
【図８】図８は、ＣＰＵ＃２の実行処理手順の一例を示すフローチャートである。
【図９】図９は、実施の形態にかかるマルチコアプロセッサシステムの一実施例を示す説明図である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、この発明にかかるスケジューリング方法およびスケジューリングシステムの実施の形態を詳細に説明する。本実施の形態において、スケジューリングシステムは、コアが複数搭載されたマルチコアプロセッサを含むマルチコアプロセッサシステムである。マルチコアプロセッサは、コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。ただし、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１２】
（マルチコアプロセッサシステム１００のスケジューリング処理の一実施例）
図１は、実施の形態にかかるマルチコアプロセッサシステムのスケジューリング処理の一実施例を示す説明図である。図１において、マルチコアプロセッサシステム１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）＃０〜ＣＰＵ＃Ｎと、メモリ１０１と、を含むスケジューリングシステムである。
【００１３】
ＣＰＵ＃０は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）＃０を実行し、マルチコアプロセッサシステム１００の全体の制御を司る。ＯＳ＃０は、マスタＯＳであり、アプリケーションをどのＣＰＵに割り当てるかを制御するスケジューラ１０２を備えている。また、ＣＰＵ＃０は、割り当てられたアプリケーションを実行する。
【００１４】
ＣＰＵ＃１〜ＣＰＵ＃Ｎは、それぞれＯＳ＃１〜ＯＳ＃Ｎを実行し、各ＯＳに割り当てられたアプリケーションを実行する。ＯＳ＃１〜ＯＳ＃Ｎは、スレーブＯＳである。メモリ１０１は、ＣＰＵ＃０〜＃Ｎに共有される共有メモリである。なお、アプリケーションが割り当てられているＣＰＵとアプリケーションが割り当てられているＯＳとは同一の意味である。
【００１５】
以下、アプリ（アプリケーション）＃０が起動された場合を例に挙げて、マルチコアプロセッサシステム１００のスケジューリング処理手順について説明する。
【００１６】
（１）マルチコアプロセッサシステム１００において、スケジューラ１０２は、アプリ＃０が起動された場合、ＣＰＵ＃０にアプリ＃０を割り当てる。
【００１７】
（２）ＣＰＵ＃０は、アプリ＃０が割り当てられた結果、アプリ＃０の実行を開始する。具体的には、例えば、ＣＰＵ＃０が、アプリ＃０の実行情報をメモリ１０１から読み出して、アプリ＃０の実行を開始する。実行情報は、例えば、アプリ＃０の命令コードである。
【００１８】
（３）スケジューラ１０２は、ＣＰＵ＃１に対して、各ＣＰＵ＃０〜ＣＰＵ＃Ｎの負荷の計算を指示する。この結果、ＣＰＵ＃１により、各ＣＰＵ＃０〜ＣＰＵ＃Ｎの負荷が計算される。ここでは、各ＣＰＵ＃０〜ＣＰＵ＃Ｎの負荷が計算された結果、ＣＰＵ＃ｉの負荷が最小の場合を例に挙げて説明する。
【００１９】
（４）スケジューラ１０２は、各ＣＰＵ＃０〜ＣＰＵ＃Ｎの負荷の計算結果に基づいて、アプリ＃０の割当先となるＣＰＵを決定する。具体的には、例えば、スケジューラ１０２が、ＣＰＵ＃１〜ＣＰＵ＃Ｎのうち、少なくともＣＰＵ＃０よりも負荷が小さいＣＰＵを、アプリ＃０の割当先となるＣＰＵに決定する。
【００２０】
ここでは、ＣＰＵ＃０〜ＣＰＵ＃Ｎのうち負荷が最小のＣＰＵ＃ｉにアプリ＃０が割り当てられている。この結果、ＣＰＵ＃０によるアプリ＃０の実行が停止される。この際、アプリ＃０のコンテキスト情報がＣＰＵ＃０のキャッシュに退避され、該コンテキスト情報がＣＰＵ＃ｉのキャッシュに転送される。
【００２１】
（５）ＣＰＵ＃ｉは、アプリ＃０が割り当てられた結果、アプリ＃０の実行を開始する。具体的には、例えば、ＣＰＵ＃ｉが、アプリ＃０の実行情報をメモリ１０１から読み出し、ＣＰＵ＃ｉのキャッシュに転送されたアプリ＃０のコンテキスト情報を用いて、アプリ＃０の実行を開始する。
【００２２】
以上説明した実施の形態にかかるマルチコアプロセッサシステム１００によれば、新たに起動されたアプリ＃０の割当先の決定に先立って、制御用のＣＰＵ＃０によって暫定的にアプリ＃０の実行を開始することができる。そして、ＣＰＵ＃１によってアプリ＃０の割当先が決定されると、ＣＰＵ＃０から割当先のＣＰＵ＃ｉにアプリ＃０を引き渡すことができる。これにより、ＣＰＵ＃０がアプリ＃０をどのＣＰＵに割り当てるかを決定した後に割当先のＣＰＵｉ＃によってアプリ＃０の実行を開始する場合に比べて、アプリ＃０の起動時間の高速化を図ることができる。
【００２３】
（マルチコアプロセッサシステム１００のシステム構成）
つぎに、図１に示したマルチコアプロセッサシステム１００のシステム構成について説明する。ここでは、マルチコアプロセッサシステム１００に含まれるＣＰＵが、ＣＰＵ＃０、ＣＰＵ＃１、ＣＰＵ＃２およびＣＰＵ＃３の場合を例に挙げて説明する（Ｎ＝３）。
【００２４】
図２は、実施の形態にかかるマルチコアプロセッサシステム構成の一例を示す説明図である。図２において、マルチコアプロセッサシステム１００は、ＣＰＵ＃０と、ＣＰＵ＃１と、ＣＰＵ＃２と、ＣＰＵ＃３と、メモリ１０１と、１次キャッシュ２０１と、１次キャッシュ２０２と、１次キャッシュ２０３と、１次キャッシュ２０４と、スヌープ回路２０５と、２次キャッシュ２０６と、Ｉ／Ｆ（ＩｎｔｅｒＦａｃｅ）２０７と、メモリコントローラ２０８と、分周回路２０９と、を有している。マルチコアプロセッサシステム１００において、２次キャッシュ２０６と、Ｉ／Ｆ２０７と、メモリコントローラ２０８と、分周回路２０９とは、バス２２０を介して接続されている。また、メモリ１０１は、メモリコントローラ２０８を介して各部と接続されている。
【００２５】
ＣＰＵ＃０、ＣＰＵ＃１、ＣＰＵ＃２およびＣＰＵ＃３は、それぞれレジスタとコアとを有している。各レジスタには、プログラムカウンタやリセットレジスタがある。ＣＰＵ＃０は、１次キャッシュ２０１とスヌープ回路２０５と２次キャッシュ２０６とを介して各部に接続されている。ＣＰＵ＃１は、１次キャッシュ２０２とスヌープ回路２０５と２次キャッシュ２０６とを介して各部に接続されている。ＣＰＵ＃２は、１次キャッシュ２０３とスヌープ回路２０５と２次キャッシュ２０６とを介して各部に接続されている。ＣＰＵ＃３は、１次キャッシュ２０４とスヌープ回路２０５と２次キャッシュ２０６とを介して各部に接続されている。
【００２６】
メモリ１０１は、ＣＰＵ＃０〜＃３に共有されるメモリである。具体的には、例えば、メモリ１０１は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有している。例えば、フラッシュＲＯＭが各ＯＳのプログラムを記憶し、ＲＯＭがアプリケーションプログラムを記憶し、ＲＡＭがＣＰＵ＃０〜ＣＰＵ＃３のワークエリアとして使用される。メモリ１０１に記憶されているプログラムは、各ＣＰＵにロードされることで、コーディングされている処理を該各ＣＰＵに実行させることとなる。
【００２７】
１次キャッシュ２０１〜２０４は、それぞれキャッシュメモリとキャッシュコントローラとを有している。例えば、１次キャッシュ２０１は、ＯＳ＃０が実行するアプリケーションからメモリ１０１への書込処理を一時的に記憶する。１次キャッシュ２０１は、メモリ１０１から読み出されたデータを一時的に記憶する。
【００２８】
スヌープ回路２０５は、ＣＰＵ＃０〜ＣＰＵ＃３がアクセスする１次キャッシュ２０１〜２０４の整合性を取る。具体的には、例えば、スヌープ回路２０５は、１次キャッシュ２０１〜２０４の間で共有するデータがいずれかの１次キャッシュで更新された場合、該更新を検出して、他の１次キャッシュを更新する。
【００２９】
２次キャッシュ２０６は、キャッシュメモリとキャッシュコントローラとを有している。２次キャッシュ２０６では、各１次キャッシュ２０１〜２０４から追い出されたデータを記憶する。具体的には、例えば、２次キャッシュ２０６は、ＯＳ＃０〜＃３で共有するデータを記憶する。
【００３０】
Ｉ／Ｆ２０７は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、ネットワークを介して他の装置に接続される。そして、Ｉ／Ｆ２０７は、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０７には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００３１】
メモリコントローラ２０８は、メモリ１０１に対するデータのリード／ライトを制御する。分周回路２０９は、クロックを供給する供給源である。具体的には、例えば、分周回路２０９は、ＣＰＵ＃０〜ＣＰＵ＃３と各ＣＰＵのキャッシュとバス２２０とメモリ１０１へクロックを供給する。なお、分周回路２０９についての詳細な説明は、図３を用いて後述する。
【００３２】
ファイルシステム２１０は、例えば、アプリケーションの命令コードや画像、映像などのコンテンツデータを記憶している。ファイルシステム２１０は、例えば、ハードディスクや光ディスクなどの補助記憶装置により実現される。なお、図示は省略するが、マルチコアプロセッサシステム１００は、各部に電源電圧を供給するＰＭＵ（Ｐｏｗｅｒ  Ｍａｎａｇｉｍｅｎｔ  Ｕｎｉｔ）のほか、ディスプレイやキーボードなどを有することにしてもよい。
【００３３】
（分周回路２０９の一例）
図３は、分周回路の一例を示す説明図である。図３において、分周回路２０９は、クロックを逓倍にするＰＬＬ（Ｐｈａｓｅ−ｌｏｃｋｅｄ  ｌｏｏｐ）回路３０１とクロックを分周するカウンタ回路３０２とを備えている。分周回路２０９は、ＣＬＫＩＮと、ＣＭＯＤＥ［３：０］と、ＣＭＯＤＥ＿０［３：０］と、ＣＭＯＤＥ＿１［３：０］と、ＣＭＯＤＥ＿２［３：０］と、ＣＭＯＤＥ＿３［３：０］と、を入力とし、各構成部へのクロックを出力とする。
【００３４】
ＣＬＫＩＮには、例えば、発振回路からのクロックが入力される。例えば、ＣＬＫＩＮに周波数が５０ＭＨｚのクロックが入力されると、入力されたクロックの周波数をＰＬＬ回路３０１が２倍にし、ＰＬＬ回路３０１が逓倍後の１００ＭＨｚのクロックをカウンタ回路３０２に与える。カウンタ回路３０２は、ＣＭＯＤＥ［３：０］の値とＣＭＯＤＥ＿０［３：０］の値とＣＭＯＤＥ＿１［３：０］の値とＣＭＯＤＥ＿２［３：０］の値とＣＭＯＤＥ＿３［３：０］の値に沿って各構成部に１００ＭＨｚを分周して与える。ここで、分周とは、周波数をさげることであり、２分周とは周波数を１／２にすることであり、４分周とは周波数を１／４にすることである。
【００３５】
ＣＭＯＤＥ＿０［３：０］に入力される値に基づいて、ＣＰＵ＃０のキャッシュへ与えるクロックの周波数とメモリ１０１へのクロックの周波数が決定される。ＣＭＯＤＥ＿１［３：０］に入力される値に基づいて、ＣＰＵ＃１のキャッシュへ与えるクロックの周波数とメモリ１０１へのクロックの周波数が決定される。
【００３６】
ＣＭＯＤＥ＿２［３：０］に入力される値に基づいて、ＣＰＵ＃２のキャッシュへ与えるクロックの周波数とメモリ１０１へのクロックの周波数が決定される。ＣＭＯＤＥ＿３［３：０］に入力される値に基づいて、ＣＰＵ＃３のキャッシュへ与えるクロックの周波数とメモリ１０１へのクロックの周波数が決定される。また、ＣＭＯＤＥ［３：０］に入力される値に基づいて、マルチコアプロセッサの構成部のうち各ＣＰＵのキャッシュおよびメモリ１０１を除く残余の構成部に与えるクロックの周波数が決定される。
【００３７】
（スケジューラ１０２の機能的構成例）
つぎに、スケジューラ１０２の機能的構成例について説明する。図４は、実施の形態にかかるスケジューラの機能的構成を示すブロック図である。図４において、スケジューラ１０２は、受付部４０１と、判定部４０２と、通知部４０３と、実行制御部４０４と、判断部４０５と、を含む構成である。各機能部（受付部４０１〜判断部４０５）は、具体的には、例えば、メモリ１０１に記憶されたスケジューラ１０２をＣＰＵ♯０に実行させることにより、その機能を実現する。なお、各機能部の処理結果は、例えば、ＣＰＵ＃０のレジスタ、１次キャッシュ２０１、２次キャッシュ２０６およびメモリ１０１などに記憶される。
【００３８】
受付部４０１は、イベント通知を受け付ける。イベント通知とは、例えば、アプリケーションの起動通知、終了通知、切替通知を示すものである。具体的には、例えば、受付部４０１が、アプリケーションの起動通知をＯＳ＃０から受け付ける。なお、以下の説明では、起動、終了対象となるアプリケーションを「アプリ＃０」と表記し、切替対象となるアプリケーションを「アプリ＃１」と表記する。
【００３９】
判定部４０２は、アプリ＃０の起動通知が受け付けられた場合、ＣＰＵ＃０のクロック周波数をオーバークロックするか否かを判定する。オーバークロックとは、ＣＰＵ＃０のクロック周波数を、デフォルトのクロック周波数よりも高いクロック周波数に変更することである。
【００４０】
ここで、ＣＰＵ＃０は、制御用ＣＰＵであり、ＣＰＵ＃２やＣＰＵ＃３などの処理用ＣＰＵに比べてクロック周波数が低い。このため、ＣＰＵ＃０が処理用ＣＰＵと同等の処理能力を実現するためには、ＣＰＵ＃０のクロック周波数を処理用ＣＰＵと同等のクロック周波数に変更する必要がある。
【００４１】
そこで、判定部４０２が、ＣＰＵ＃０のクロック周波数が処理用ＣＰＵのクロック周波数よりも低い場合、ＣＰＵ＃０のクロック周波数をオーバークロックすると判定する。例えば、ＣＰＵ＃０のクロック周波数を５００ＭＨｚ、ＣＰＵ＃２のクロック周波数を１ＧＨｚとする。この場合、判定部４０２が、ＣＰＵ＃０のクロック周波数を、５００ＭＨｚから１ＧＨｚにオーバークロックすると判定する。なお、各ＣＰＵ＃０〜ＣＰＵ＃３のクロック周波数は、例えば、分周回路２０９の設定レジスタにアクセスすることで参照可能である。
【００４２】
通知部４０３は、ＣＰＵ＃０のクロック周波数をオーバークロックすると判定された場合、分周回路２０９にＣＰＵ＃０のクロック周波数のオーバークロックを通知する。具体的には、例えば、通知部４０３が、ＣＰＵ＃０のクロック周波数を１ＧＨｚに設定する設定通知を分周回路２０９に通知する。
【００４３】
この結果、分周回路２０９により、例えば、ＣＰＵ＃０のクロック周波数が、５００ＭＨｚから１ＧＨｚに変更される。なお、分周回路２０９は、ＣＰＵ＃０のクロック周波数を、要求されている値（例えば、１ＧＨｚ）に変更できない場合、変更可能な最も高い値に変更することにしてもよい。
【００４４】
実行制御部４０４は、分周回路２０９にオーバークロックが通知された結果、アプリ＃０の実行を制御する。具体的には、例えば、実行制御部４０４が、アプリ＃０をＣＰＵ＃０に割り当てる。この結果、ＣＰＵ＃０が、アプリ＃０の命令コードをファイルシステム２１０からメモリ１０１に読み出す。そして、ＣＰＵ＃０が、アプリ＃０の命令コードをメモリ１０１から１次キャッシュ２０１にロードして、アプリ＃０を実行する。
【００４５】
また、通知部４０３は、アプリ＃０の起動通知が受け付けられた場合、アプリ＃０の割当先となるＣＰＵの探索指示を他のＣＰＵに通知する。具体的には、例えば、通知部４０３が、アプリ＃０の割当先となるＣＰＵの探索指示をＣＰＵ＃１に通知する。ＣＰＵ＃１は、例えば、ＣＰＵ＃０と同様に、ＣＰＵ＃２やＣＰＵ＃３よりもクロック周波数が低いＣＰＵである。
【００４６】
この結果、ＣＰＵ＃１により、各ＣＰＵ＃０〜ＣＰＵ＃３の負荷が計算されて、アプリ＃０の割当先となるＣＰＵが決定される。なお、ＣＰＵの探索指示を受け付けたＣＰＵ＃１の具体的な処理内容については後述する。
【００４７】
また、受付部４０１は、アプリ＃０の割当先となるＣＰＵの探索指示を通知した他のＣＰＵから、アプリ＃０の割当結果を受け付ける。具体的には、例えば、受付部４０１が、ＣＰＵ＃０にアプリ＃０が割り当てられたことを示す割当結果をＣＰＵ＃１から受け付ける。
【００４８】
また、実行制御部４０４は、アプリ＃０の割当結果が受け付けられた場合、ＣＰＵ＃０に対するアプリ＃０の割り当てを維持する。この結果、ＣＰＵ＃０により、アプリ＃０の実行が継続して行われる。
【００４９】
判断部４０５は、アプリ＃０の割当結果が受け付けられた場合、ＣＰＵ＃０のクロック周波数をオーバークロックしているか否かを判断する。具体的には、例えば、判断部４０５が、分周回路２０９のＣＰＵ＃０のクロック周波数を示す設定レジスタの値を参照して、オーバークロックしているか否かを判断する。
【００５０】
また、判断部４０５は、ＣＰＵ＃０のクロック周波数をオーバークロックしている場合、ＣＰＵ＃０のデフォルトのクロック周波数でアプリ＃０の要求性能を満たすか否かを判断する。具体的には、例えば、判断部４０５が、ＣＰＵ＃０のデフォルトのクロック周波数がアプリ＃０の要求性能を満たすクロック周波数以上か否かを判断する。なお、アプリ＃０の要求性能を満たすクロック周波数は、例えば、メモリ１０１に記憶されている。
【００５１】
また、通知部４０３は、デフォルトのクロック周波数でアプリ＃０の要求性能を満たすと判断された場合、分周回路２０９にＣＰＵ＃０のクロック周波数をデフォルトのクロック周波数に戻すよう通知する。具体的には、例えば、通知部４０３が、ＣＰＵ＃０のクロック周波数をデフォルトのクロック周波数に設定する設定通知を分周回路２０９に通知する。この結果、分周回路２０９により、ＣＰＵ＃０のクロック周波数が、デフォルトのクロック周波数に変更される。
【００５２】
また、受付部４０１は、アプリ＃０の割当先のＣＰＵから、アプリ＃０の実行情報のロード完了通知を受け付ける。具体的には、例えば、アプリ＃０の割当先となるＣＰＵ＃２によってアプリ＃０の命令コードがメモリ１０１からロードされた結果、受付部４０１が、ＣＰＵ＃２からアプリ＃０の命令コードのロード完了通知を受け付ける。
【００５３】
また、実行制御部４０４は、アプリ＃０の実行情報のロード完了通知が受け付けられた場合、アプリ＃０の実行を停止するよう制御する。具体的には、例えば、実行制御部４０４が、アプリ＃０の割当先をＣＰＵ＃０からＣＰＵ＃２に変更する。この結果、ＣＰＵ＃０が、アプリ＃０の実行時情報を１次キャッシュ２０１に退避する。実行時情報とは、例えば、ＣＰＵ＃０のプログラムカウンタの値や、関数内の変数の値を格納する汎用レジスタの値などのコンテキスト情報である。
【００５４】
この結果、スヌープ回路２０５により、ＣＰＵ＃０の１次キャッシュ２０１上の実行時情報が、例えば、アプリ＃０の割当先となるＣＰＵ＃２の１次キャッシュ２０３に転送され、ＣＰＵ＃０とＣＰＵ＃２との間のキャッシュメモリの整合性が確保される。
【００５５】
また、通知部４０３は、アプリ＃０の実行時情報が１次キャッシュ２０１に退避されて、ＣＰＵ＃０とアプリ＃０の割当先となるＣＰＵとの間のキャッシュメモリの整合性が確保された場合、割当先となるＣＰＵにアプリ＃０の実行開始要求を通知する。この結果、例えば、割当先となるＣＰＵ＃２により、アプリ＃０が実行される。
【００５６】
また、判断部４０５は、アプリ＃０の終了通知が受け付けられた場合、ＣＰＵ＃０のクロック周波数をオーバークロックしているか否かを判断する。そして、ＣＰＵ＃０のクロック周波数をオーバークロックしている場合、通知部４０３は、分周回路２０９にＣＰＵ＃０のクロック周波数をデフォルトのクロック周波数に戻すよう通知する。この結果、分周回路２０９により、ＣＰＵ＃０のクロック周波数が、デフォルトのクロック周波数に変更される。
【００５７】
判断部４０５は、アプリ＃０からアプリ＃１への切替通知が受け付けられた場合、ＣＰＵ＃０のデフォルトのクロック周波数でアプリ＃１の要求性能を満たすか否かを判断する。ここで、アプリ＃１の要求性能を満たし、かつ、ＣＰＵ＃０のクロック周波数をオーバークロックしている場合、通知部４０３は、分周回路２０９にＣＰＵ＃０のクロック周波数をデフォルトのクロック周波数に戻すよう通知する。
【００５８】
この結果、分周回路２０９により、ＣＰＵ＃０のクロック周波数が、デフォルトのクロック周波数に変更される。そして、実行制御部４０４は、アプリ＃１の実行を制御する。具体的には、例えば、実行制御部４０４が、アプリ＃１をＣＰＵ＃０に割り当てる。この結果、ＣＰＵ＃０が、例えば、アプリ＃１の命令コードを１次キャッシュ２０１にロードし、１次キャッシュ２０１上のアプリ＃１の実行時情報を用いてアプリ＃１の実行を開始する。
【００５９】
一方、アプリ＃１の要求性能を満たさず、かつ、ＣＰＵ＃０のクロック周波数をオーバークロックしていない場合、通知部４０３は、分周回路２０９にＣＰＵ＃０のクロック周波数のオーバークロックを通知する。この結果、分周回路２０９により、ＣＰＵ＃０のクロック周波数がオーバークロックされる。そして、実行制御部４０４は、アプリ＃１の実行を制御する。
【００６０】
（ＣＰＵの探索指示を受け付けた他のＣＰＵの処理内容）
つぎに、アプリ＃０の割当先となるＣＰＵの探索指示を受け付けた他のＣＰＵの具体的な処理内容の一例について説明する。ここでは、ＣＰＵ＃１が、ＣＰＵ＃０からアプリ＃０の割当先となるＣＰＵの探索指示を受け付けた場合を例に挙げて説明する。
【００６１】
ＣＰＵ＃１は、アプリ＃０の割当先となるＣＰＵの探索指示を受け付けた場合、各ＣＰＵ＃０〜ＣＰＵ＃３の負荷を計算する。具体的には、例えば、ＣＰＵ＃１が、各ＣＰＵ＃０〜ＣＰＵ＃３に割り当てられているアプリケーションの数や各アプリケーションの実行時間に基づいて、各ＣＰＵ＃０〜ＣＰＵ＃３の負荷を計算する。
【００６２】
そして、ＣＰＵ＃１は、計算された各ＣＰＵ＃０〜ＣＰＵ＃３の負荷に基づいて、アプリ＃０の割当先となるＣＰＵを決定する。具体的には、例えば、ＣＰＵ＃１が、ＣＰＵ＃０〜ＣＰＵ＃３のうち、負荷が最小となるＣＰＵを、アプリ＃０の割当先となるＣＰＵに決定する。
【００６３】
また、ＣＰＵ＃１は、アプリ＃０の割当先に決定したＣＰＵに、アプリ＃０の割当結果を通知する。例えば、割当先がＣＰＵ＃０の場合、ＣＰＵ＃１が、ＣＰＵ＃０にアプリ＃０が割り当てられたことを示す割当結果をＣＰＵ＃０に通知する。割当先がＣＰＵ＃０とは異なる他のＣＰＵの場合、ＣＰＵ＃１が、アプリ＃０の実行要求を示す割当結果を他のＣＰＵに通知する。
【００６４】
アプリ＃０の実行要求は、具体的には、例えば、アプリ＃０の命令コードのロード命令である。なお、アプリ＃０の実行要求には、アプリ＃０を現在実行中のＣＰＵ＃０を識別する情報が含まれている。これにより、アプリ＃０の割当先のＣＰＵは、アプリ＃０を現在実行しているＣＰＵ＃０を識別することができる。
【００６５】
ここで、アプリ＃０の割当先をＣＰＵ＃２とする。ＣＰＵ＃２は、ＣＰＵ＃１からアプリ＃０の命令コードのロード命令を受け付けた場合、アプリ＃０の命令コードをメモリ１０１から１次キャッシュ２０３にロードする。そして、アプリ＃０の命令コードのロードが完了した場合、ＣＰＵ＃２は、アプリ＃０の命令コードのロード完了通知をＣＰＵ＃０に通知する。
【００６６】
このあと、ＣＰＵ＃２は、スヌープ回路２０５を介して、アプリ＃０の実行時情報を受信した場合、アプリ＃０の命令コードおよび実行時情報を用いて、アプリ＃０の実行を開始する。これにより、制御用ＣＰＵであるＣＰＵ＃０により暫定的に実行していたアプリ＃０を、処理用ＣＰＵであるＣＰＵ＃２に引き渡すことができる。
【００６７】
なお、上述した説明では、ＣＰＵの探索要求を受け付けたＣＰＵ＃１が、アプリ＃０の割当先となるＣＰＵを決定することにしたが、これに限らない。具体的には、例えば、スケジューラ１０２が、ＣＰＵ＃１から各ＣＰＵ＃０〜ＣＰＵ＃３の負荷の計算結果を受信して、アプリ＃０の割当先となるＣＰＵを決定することにしてもよい。
【００６８】
（マルチコアプロセッサシステム１００のスケジューリング処理手順）
つぎに、実施の形態にかかるマルチコアプロセッサシステム１００のスケジューリング処理手順について説明する。まず、実施の形態にかかるスケジューラ１０２によるスケジューリング処理手順について説明する。
【００６９】
＜スケジューラ１０２によるスケジューリング処理手順＞
図５および図６は、実施の形態にかかるスケジューラによるスケジューリング処理手順の一例を示すフローチャートである。図５のフローチャートにおいて、まず、ＣＰＵ＃０により、イベント通知を受け付けたか否かを判断する（ステップＳ５０１）。
【００７０】
ここで、ＣＰＵ＃０により、イベント通知を受け付けるのを待って（ステップＳ５０１：Ｎｏ）、受け付けた場合（ステップＳ５０１：Ｙｅｓ）、受け付けたイベント通知がアプリ＃０の起動通知か否かを判断する（ステップＳ５０２）。
【００７１】
そして、受け付けたイベント通知がアプリ＃０の起動通知ではない場合（ステップＳ５０２：Ｎｏ）、図６に示すステップＳ６０１に移行する。一方、受け付けたイベント通知がアプリ＃０の起動通知の場合（ステップＳ５０２：Ｙｅｓ）、ＣＰＵ＃０により、ＣＰＵ＃０のクロック周波数をオーバークロックするか否かを判定する（ステップＳ５０３）。
【００７２】
ここで、ＣＰＵ＃０のクロック周波数をオーバークロックしない場合（ステップＳ５０３：Ｎｏ）、ステップＳ５０５に移行する。一方、ＣＰＵ＃０のクロック周波数をオーバークロックする場合（ステップＳ５０３：Ｙｅｓ）、ＣＰＵ＃０により、分周回路２０９にＣＰＵ＃０のクロック周波数のオーバークロックを通知する（ステップＳ５０４）。
【００７３】
つぎに、ＣＰＵ＃０により、アプリ＃０の割当先となるＣＰＵの探索指示をＣＰＵ＃１に通知する（ステップＳ５０５）。そして、ＣＰＵ＃０により、アプリ＃０の命令コードをロードして（ステップＳ５０６）、アプリ＃０の実行を開始する（ステップＳ５０７）。
【００７４】
このあと、ＣＰＵ＃０により、ＣＰＵ＃１からアプリ＃０の割当結果を受け付けたか否かを判断する（ステップＳ５０８）。ここで、アプリ＃０の割当結果を受け付けた場合（ステップＳ５０８：Ｙｅｓ）、ステップＳ５１２に移行する。
【００７５】
一方、アプリ＃０の割当結果を受け付けていない場合（ステップＳ５０８：Ｎｏ）、ＣＰＵ＃０により、アプリ＃０の割当先のＣＰＵから、アプリ＃０の命令コードのロード完了通知を受け付けたか否かを判断する（ステップＳ５０９）。ここで、ロード完了通知を受け付けていない場合（ステップＳ５０９：Ｎｏ）、ステップＳ５０８に戻る。
【００７６】
一方、ロード完了通知を受け付けた場合（ステップＳ５０９：Ｙｅｓ）、ＣＰＵ＃０により、アプリ＃０の実行時情報を１次キャッシュ２０１に退避する（ステップＳ５１０）。この結果、アプリ＃０の実行時情報が、アプリ＃０の割当先のＣＰＵの１次キャッシュに転送される。
【００７７】
このあと、ＣＰＵ＃０により、アプリ＃０の実行開始要求を割当先のＣＰＵに通知する（ステップＳ５１１）。つぎに、ＣＰＵ＃０により、ＣＰＵ＃０のクロック周波数をオーバークロックしているか否かを判断する（ステップＳ５１２）。ここで、オーバークロックしていない場合（ステップＳ５１２：Ｎｏ）、ステップＳ５０１に戻る。
【００７８】
一方、オーバークロックしている場合（ステップＳ５１２：Ｙｅｓ）、ＣＰＵ＃０により、ＣＰＵ＃０のデフォルトのクロック周波数でアプリ＃０の要求性能を満たすか否かを判断する（ステップＳ５１３）。ここで、アプリ＃０の要求性能を満たさない場合（ステップＳ５１３：Ｎｏ）、ステップＳ５０１に戻る。
【００７９】
一方、アプリ＃０の要求性能を満たす場合（ステップＳ５１３：Ｙｅｓ）、ＣＰＵ＃０により、分周回路２０９にＣＰＵ＃０のクロック周波数をデフォルトのクロック周波数に戻すよう通知して（ステップＳ５１４）、ステップＳ５０１に戻る。
【００８０】
図６のフローチャートにおいて、まず、ＣＰＵ＃０により、図５に示したステップＳ５０１において受け付けたイベント通知がアプリ＃０の終了通知か否かを判断する（ステップＳ６０１）。
【００８１】
ここで、受け付けたイベント通知がアプリ＃０の終了通知の場合（ステップＳ６０１：Ｙｅｓ）、ＣＰＵ＃０により、ＣＰＵ＃０のクロック周波数をオーバークロックしているか否かを判断する（ステップＳ６０２）。そして、ＣＰＵ＃０のクロック周波数をオーバークロックしていない場合（ステップＳ６０２：Ｎｏ）、図５に示したステップＳ５０１に移行する。
【００８２】
一方、ＣＰＵ＃０のクロック周波数をオーバークロックしている場合（ステップＳ６０２：Ｙｅｓ）、ＣＰＵ＃０により、分周回路２０９にＣＰＵ＃０のクロック周波数をデフォルトのクロック周波数に戻すよう通知して（ステップＳ６０３）、図５に示したステップＳ５０１に移行する。
【００８３】
また、ステップＳ６０１において、受け付けたイベント通知がアプリ＃０の終了通知ではない場合（ステップＳ６０１：Ｎｏ）、ＣＰＵ＃０により、受け付けたイベント通知がアプリ＃１の切替通知か否かを判断する（ステップＳ６０４）。ここで、受け付けたイベント通知がアプリ＃１の切替通知ではない場合（ステップＳ６０４：Ｎｏ）、図５に示したステップＳ５０１に移行する。
【００８４】
一方、受け付けたイベント通知がアプリ＃１の切替通知の場合（ステップＳ６０４：Ｙｅｓ）、ＣＰＵ＃０により、ＣＰＵ＃０のデフォルトのクロック周波数でアプリ＃１の要求性能を満たすか否かを判断する（ステップＳ６０５）。ここで、アプリ＃１の要求性能を満たす場合（ステップＳ６０５：Ｙｅｓ）、ＣＰＵ＃０により、ＣＰＵ＃０のクロック周波数をオーバークロックしているか否かを判断する（ステップＳ６０６）。
【００８５】
ここで、ＣＰＵ＃０のクロック周波数をオーバークロックしていない場合（ステップＳ６０６：Ｎｏ）、ステップＳ６０８に移行する。一方、ＣＰＵ＃０のクロック周波数をオーバークロックしている場合（ステップＳ６０６：Ｙｅｓ）、ＣＰＵ＃０により、分周回路２０９にＣＰＵ＃０のクロック周波数をデフォルトのクロック周波数に戻すよう通知する（ステップＳ６０７）。
【００８６】
そして、ＣＰＵ＃０により、アプリ＃１の実行を開始して（ステップＳ６０８）、図５に示したステップＳ５０１に移行する。また、ステップＳ６０５において、アプリ＃１の要求性能を満たさない場合（ステップＳ６０５：Ｎｏ）、ＣＰＵ＃０により、ＣＰＵ＃０のクロック周波数をオーバークロックしているか否かを判断する（ステップＳ６０９）。
【００８７】
ここで、ＣＰＵ＃０のクロック周波数をオーバークロックしている場合（ステップＳ６０９：Ｙｅｓ）、ステップＳ６０８に移行する。一方、ＣＰＵ＃０のクロック周波数をオーバークロックしていない場合（ステップＳ６０９：Ｎｏ）、ＣＰＵ＃０により、分周回路２０９にＣＰＵ＃０のクロック周波数のオーバークロックを通知して（ステップＳ６１０）、ステップＳ６０８に移行する。
【００８８】
これにより、ＣＰＵ＃０がアプリ＃０の割当先を決定した後に、割当先のＣＰＵによってアプリ＃０の実行を開始する場合に比べて、アプリ＃０の起動時間の高速化を図ることができる。
【００８９】
＜ＣＰＵ＃１の割当先決定処理手順＞
つぎに、アプリ＃０の割当先となるＣＰＵの探索指示を受け付けたＣＰＵ＃１の割当先決定処理手順について説明する。
【００９０】
図７は、ＣＰＵ＃１の割当先決定処理手順の一例を示すフローチャートである。図７のフローチャートにおいて、まず、ＣＰＵ＃１により、アプリ＃０の割当先となるＣＰＵの探索指示をＣＰＵ＃０から受け付けたか否かを判断する（ステップＳ７０１）。
【００９１】
ここで、探索指示を受け付けるのを待って（ステップＳ７０１：Ｎｏ）、受け付けた場合（ステップＳ７０１：Ｙｅｓ）、ＣＰＵ＃１により、アプリ＃０の割当先となるＣＰＵを決定する（ステップＳ７０２）。そして、ＣＰＵ＃１により、決定したアプリ＃０の割当先がＣＰＵ＃０か否かを判断する（ステップＳ７０３）。
【００９２】
ここで、割当先がＣＰＵ＃０の場合（ステップＳ７０３：Ｙｅｓ）、ＣＰＵ＃１により、ＣＰＵ＃０にアプリ＃０の割当結果を通知して（ステップＳ７０４）、本フローチャートによる一連の処理を終了する。
【００９３】
一方、割当先がＣＰＵ＃０ではない場合（ステップＳ７０３：Ｎｏ）、ＣＰＵ＃１により、割当先のＣＰＵにアプリ＃０の命令コードのロード命令を通知して（ステップＳ７０５）、本フローチャートによる一連の処理を終了する。
【００９４】
これにより、アプリ＃０の割当先を決定して、割当先となるＣＰＵにアプリ＃０の割当結果を通知することができる。なお、ステップＳ７０２において決定されたアプリ＃０の割当先がＣＰＵ＃１の場合、後述の図８に示すステップＳ８０２〜Ｓ８０６の一連の処理をＣＰＵ＃１が実行することになる。
【００９５】
＜ＣＰＵ＃２の実行処理手順＞
つぎに、図７に示したステップＳ７０２において、アプリ＃０の割当先としてＣＰＵ＃２が決定された場合を例に挙げて、ＣＰＵ＃２の実行処理手順について説明する。
【００９６】
図８は、ＣＰＵ＃２の実行処理手順の一例を示すフローチャートである。図８のフローチャートにおいて、まず、ＣＰＵ＃２により、アプリ＃０の命令コードのロード命令をＣＰＵ＃１から受け付けたか否かを判断する（ステップＳ８０１）。
【００９７】
ここで、ロード命令を受け付けるのを待って（ステップＳ８０１：Ｎｏ）、受け付けた場合（ステップＳ８０１：Ｙｅｓ）、ＣＰＵ＃２により、アプリ＃０の命令コードをロードする（ステップＳ８０２）。そして、ＣＰＵ＃２により、アプリ＃０の命令コードのロード完了通知をＣＰＵ＃０に送信する（ステップＳ８０３）。
【００９８】
つぎに、ＣＰＵ＃２により、アプリ＃０の実行時情報をＣＰＵ＃０から受信したか否かを判断する（ステップＳ８０４）。ここで、アプリ＃０の実行時情報を受信するのを待って（ステップＳ８０４：Ｎｏ）、受信した場合（ステップＳ８０４：Ｙｅｓ）、ＣＰＵ＃２により、アプリ＃０の実行開始要求をＣＰＵ＃０から受け付けたか否かを判断する（ステップＳ８０５）。
【００９９】
ここで、アプリ＃０の実行開始要求を受け付けるのを待って（ステップＳ８０５：Ｎｏ）、受け付けた場合（ステップＳ８０５：Ｙｅｓ）、ＣＰＵ＃２により、アプリ＃０の実行を開始して（ステップＳ８０６）、本フローチャートによる一連の処理を終了する。
【０１００】
これにより、制御用ＣＰＵであるＣＰＵ＃０で実行されているアプリ＃０を処理用ＣＰＵであるＣＰＵ＃２に引き渡すことができる。
【０１０１】
（マルチコアプロセッサシステム１００の一実施例）
つぎに、実施の形態にかかるマルチコアプロセッサシステム１００の一実施例について説明する。
【０１０２】
図９は、実施の形態にかかるマルチコアプロセッサシステムの一実施例を示す説明図である。なお、図９では、ＯＳ＃０が備えるスケジューラ１０２の図示を省略している。
【０１０３】
（９−１）マルチコアプロセッサシステム１００において、新たなアプリ＃７が起動されると、ＣＰＵ＃０が、クロック周波数をオーバークロックしてアプリ＃７の実行を開始する。（９−２）ＣＰＵ＃１が、アプリ＃７の割当先となるＣＰＵを決定する。ここでは、アプリ＃７の割当先としてＣＰＵ＃２が決定された場合を想定する。
【０１０４】
（９−３）ＣＰＵ＃２が、アプリ＃７の命令コード（図９中、「ｓｔａｔｉｃ  ｃｏｎｔｅｘｔ９０１」）をメモリ１０１から１次キャッシュ２０３にロードする。（９−４）ＣＰＵ＃２が、スヌープ回路２０５を介して、ＣＰＵ＃０の１次キャッシュ２０１に退避されたアプリ＃７の実行時情報（図９中、「ｄｙｎａｍｉｃ  ｃｏｎｔｅｘｔ９０２」）を受信する。
【０１０５】
（９−５）ＣＰＵ＃２が、アプリ＃７の実行を開始する。（９−６）ＣＰＵ＃０が、分周回路２０９にＣＰＵ＃０のクロック周波数をデフォルトのクロック周波数に戻すよう通知する。これにより、ＣＰＵ＃０がアプリ＃７の割当先を決定した後に、割当先のＣＰＵ＃２によってアプリ＃７の実行を開始する場合に比べて、アプリ＃７の起動時間の高速化を図ることができる。
【０１０６】
以上説明したように、本実施の形態によれば、新たに起動されたアプリ＃０の割当先の決定に先立って、制御用のＣＰＵ＃０により暫定的にアプリ＃０の実行を開始し、アプリ＃０の割当先が決まったら、ＣＰＵ＃０から割当先のＣＰＵにアプリを引き渡すことができる。これにより、ＣＰＵ＃０がアプリ＃０の割当先を決定した後に、割当先のＣＰＵによってアプリ＃０の実行を開始する場合に比べて、アプリ＃０の起動時間の高速化を図ることができる。
【０１０７】
また、本実施の形態によれば、ＣＰＵ＃０のクロック周波数が処理用ＣＰＵのクロック周波数よりも低い場合、ＣＰＵ＃０のクロック周波数をオーバークロックして、アプリ＃０の実行を開始することができる。これにより、制御用のＣＰＵ＃０が処理用ＣＰＵと同等の性能でアプリ＃０を実行することができる。
【０１０８】
また、本実施の形態によれば、ＣＰＵ＃０のデフォルトのクロック周波数でアプリ＃０の要求性能を満たす場合、オーバークロックしたＣＰＵ＃０のクロック周波数をデフォルトのクロック周波数に戻すことにより、無駄な消費電力を削減することができる。
【０１０９】
また、本実施の形態によれば、ＣＰＵ＃０によるアプリ＃０の実行が終了した場合、オーバークロックしたＣＰＵ＃０のクロック周波数をデフォルトのクロック周波数に戻すことにより、無駄な消費電力を削減することができる。
【０１１０】
なお、本実施の形態で説明したスケジューリング方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本スケジューリングプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本スケジューリングプログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１１１】
１００  マルチコアプロセッサシステム
１０１  メモリ
１０２  スケジューラ
２０９  分周回路
４０１  受付部
４０２  判定部
４０３  通知部
４０４  実行制御部
４０５  判断部
【図１】
2012098683.tif 000003
【図２】
2012098683.tif 000004
【図３】
2012098683.tif 000005
【図４】
2012098683.tif 000006
【図５】
2012098683.tif 000007
【図６】
2012098683.tif 000008
【図７】
2012098683.tif 000009
【図８】
2012098683.tif 000010
【図９】
2012098683.tif 000011
【国際調査報告】
2012098683.tif 000012
2012098683.tif 000013