(57)【要約】  アプリの起動処理が完了するまでにかかる時間の短縮化を図る。マルチコアプロセッサシステム（１００）は、ＣＰＵ（＃０）〜ＣＰＵ（＃３）と、共有メモリ（１０１）を有する。スケジューリングプログラムを実行するＣＰＵ（＃０）は、ＣＰＵ（＃０）〜ＣＰＵ（＃３）の中から、ＣＰＵ（＃１）を起動用ＣＰＵとして選択する。次に、ＣＰＵ（＃０）は、ＣＰＵ（＃１）に割り当てられているアプリ（４）を、ＣＰＵ（＃０）〜ＣＰＵ（＃３）のうち、ＣＰＵ（＃１）以外のＣＰＵに割り当てる。アプリの起動要求を受け付けた場合、ＣＰＵ（＃０）は、起動要求の対象となるアプリ（１）を、起動用ＣＰＵとして選択されたＣＰＵ（＃１）に割り当てる。
2013140518.tif 000002
【特許請求の範囲】
【請求項１】
複数のコアのうち特定のコアに、
前記複数のコアの中からいずれかのコアを選択し、
前記複数のコアの各コアに割り当てられているソフトウェアの識別情報をコアごとに記憶する記憶部を参照して、前記選択したコアに割り当てられているソフトウェアを、前記複数のコアのうち前記選択したコアとは異なる他のコアに割り当て、
ソフトウェアの起動要求を受け付けた場合、前記選択したコアに割り当てられているソフトウェアを前記他のコアに割り当てた結果、前記選択したコアに前記起動要求の対象となるソフトウェアを割り当てる、
処理を実行させることを特徴とするスケジューリングプログラム。
【請求項２】
前記特定のコアに、
前記各コアの温度の測定結果を取得する処理を実行させ、
前記選択する処理は、
前記取得した各コアの温度の測定結果に基づいて、前記複数のコアの中からいずれかのコアを選択することを特徴とする請求項１に記載のスケジューリングプログラム。
【請求項３】
前記特定のコアに、
前記各コアの使用率を取得する処理を実行させ、
前記選択する処理は、
前記取得した各コアの使用率に基づいて、前記複数のコアの中からいずれかのコアを選択することを特徴とする請求項１に記載のスケジューリングプログラム。
【請求項４】
前記特定のコアに、
前記記憶部を参照して、前記各コアに割り当てられているソフトウェアの数を前記コアごとに算出する処理を実行させ、
前記選択する処理は、
前記算出したコアごとのソフトウェアの数に基づいて、前記複数のコアの中からいずれかのコアを選択することを特徴とする請求項１に記載のスケジューリングプログラム。
【請求項５】
前記特定のコアに、
前記選択したコアに割り当てられているソフトウェアを前記他のコアに割り当てた場合、前記選択したコアのクロック周波数の値を当該値より低い値に変更する処理を実行させることを特徴とする請求項１〜４のいずれか一つに記載のスケジューリングプログラム。
【請求項６】
前記特定のコアに、
前記選択したコアに前記起動要求の対象となるソフトウェアを割り当てた場合、前記選択したコアのクロック周波数の値を、前記起動要求の対象となるソフトウェアを起動可能なクロック周波数の値に変更する処理を実行させることを特徴とする請求項１〜５のいずれか一つに記載のスケジューリングプログラム。
【請求項７】
前記特定のコアに、
前記起動要求の対象となるソフトウェアの起動処理が完了したことを検出し、
前記起動処理が完了したことを検出した場合、前記複数のコアの中からいずれかのコアを選択し、
前記記憶部を参照して、前記選択したコアに割り当てられているソフトウェアを、前記複数のコアのうち前記選択したコアとは異なるコアに割り当て、
ソフトウェアの起動要求を受け付けた場合、前記選択したコアに割り当てられているソフトウェアを前記複数のコアのうち前記選択したコアとは異なるコアに割り当てた結果、前記選択したコアに前記起動要求の対象となるソフトウェアを割り当てる処理を実行させることを特徴とする請求項１〜６のいずれか一つに記載のスケジューリングプログラム。
【請求項８】
前記記憶部は、前記各コアに割り当てられているソフトウェアの起動時刻を表す時刻情報を記憶しており、
前記特定のコアに、
前記記憶部に記憶されている前記各コアに割り当てられているソフトウェアの起動時刻を表す時刻情報を参照して、前記各コアに割り当てられているソフトウェアのうち操作対象のソフトウェアを特定し、
前記記憶部に記憶されている前記コアごとのソフトウェアの識別情報を参照して、前記特定した操作対象のソフトウェアが割り当てられているコアに割り当てられている前記操作対象のソフトウェア以外の他のソフトウェアを、前記他のコアのうち前記操作対象のソフトウェアが割り当てられているコアとは異なるコアに割り当てる処理を実行させることを特徴とする請求項１〜７のいずれか一つに記載のスケジューリングプログラム。
【請求項９】
前記特定のコアに、
前記操作対象のソフトウェアの実行が終了したことを検出し、
前記操作対象のソフトウェアの実行が終了したことを検出した場合、前記記憶部に記憶されている前記各コアに割り当てられているソフトウェアの起動時刻を表す時刻情報を参照して、前記各コアに割り当てられているソフトウェアのうち新たな操作対象のソフトウェアを特定し、
前記新たな操作対象のソフトウェアを特定した場合、前記操作対象のソフトウェアが割り当てられていたコアに、前記新たな操作対象のソフトウェアを割り当てる処理を実行させることを特徴とする請求項８に記載のスケジューリングプログラム。
【請求項１０】
前記特定のコアに、
前記操作対象のソフトウェアの実行が終了したことを検出し、
前記操作対象のソフトウェアの実行が終了したことを検出した場合、前記記憶部に記憶されている時刻情報を参照して、前記各コアに割り当てられているソフトウェアのうち新たな操作対象のソフトウェアを特定し、
前記新たな操作対象のソフトウェアを特定した場合、前記新たな操作対象のソフトウェアが割り当てられているコアに割り当てられている前記新たな操作対象のソフトウェア以外のソフトウェアを、前記他のコアのうち前記新たな操作対象のソフトウェアが割り当てられているコアとは異なるコアに割り当てる処理を実行させることを特徴とする請求項８に記載のスケジューリングプログラム。
【請求項１１】
複数のコアの中からいずれかのコアを選択する選択部と、
前記複数のコアの各コアに割り当てられているソフトウェアの識別情報をコアごとに記憶する記憶部を参照して、前記選択部が選択したコアに割り当てられているソフトウェアを、前記複数のコアのうち前記選択したコアとは異なる他のコアに割り当てる第１の割当部と、
ソフトウェアの起動要求を受け付けた場合、前記選択したコアに割り当てられているソフトウェアを前記第１の割当部が前記他のコアに割り当てた結果、前記選択したコアに前記起動要求の対象となるソフトウェアを割り当てる第２の割当部と、
を有することを特徴とするマルチコアプロセッサシステム。
【請求項１２】
複数のコアのうち特定のコアが、
前記複数のコアの中からいずれかのコアを選択し、
前記複数のコアの各コアに割り当てられているソフトウェアの識別情報をコアごとに記憶する記憶部を参照して、前記選択したコアに割り当てられているソフトウェアを、前記複数のコアのうち前記選択したコアとは異なる他のコアに割り当て、
ソフトウェアの起動要求を受け付けた場合、前記選択したコアに割り当てられているソフトウェアを前記他のコアに割り当てた結果、前記選択したコアに前記起動要求の対象となるソフトウェアを割り当てる、
処理を実行することを特徴とするスケジューリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スケジューリングプログラム、マルチコアプロセッサシステム、およびスケジューリング方法に関する。
【背景技術】
【０００２】
従来から、複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の各々のＣＰＵに対して割り当てるアプリケーションソフトウェアを決定するスケジューリング技術が存在する。以下、アプリケーションソフトウェアを、「アプリ」と称する。【０００３】
関連する技術として、たとえば、ＣＰＵに割り当てられているアプリがスケジューリング技術にて決定された際に、ＣＰＵに割り当てられたアプリの処理要求に応じて、クロック周波数を変更するという技術が開示されている。また、リアルタイム制約のあるアプリとリアルタイム制約のないアプリを周期的に実行するシステムにおいて、リアルタイム制約のアプリを実行する際に、リアルタイム制約を満たせるようにクロック周波数を変更する技術が開示されている。また、アプリを実行した際に、ＣＰＵが達する温度を予測して、予測した温度が規定温度を超える場合には、アプリを他のＣＰＵに割り当てる技術が開示されている（たとえば、下記特許文献１〜３を参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２００２−５３３８０１号公報
【特許文献２】特開２００２−９９４３３号公報
【特許文献３】特開２００６−１３３９９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術によれば、ソフトウェアの起動要求を受け付けた場合に、既に割り当てられている他のソフトウェアの処理により、起動要求を受け付けたソフトウェアの起動処理が遅延してしまう場合がある。たとえば、ソフトウェアの起動要求の受付時、他のソフトウェアの処理の実行中の場合、ＣＰＵは他のソフトウェアの処理の完了後、または他のソフトウェアの処理の停止後にソフトウェアの起動処理を開始することになり、ソフトウェアの起動処理が遅延する。また、ソフトウェアの起動処理と他のソフトウェアの処理を時分割にて切り替えて処理している場合、ＣＰＵは割当時間の満了後にソフトウェアの起動処理を停止して他のソフトウェアの処理を実行することになり、ソフトウェアの起動処理が遅延する場合がある。【０００６】
本発明は、上述した従来技術による問題点を解消するため、ソフトウェアの起動処理が完了するまでの時間を短縮化できるスケジューリングプログラム、マルチコアプロセッサシステム、およびスケジューリング方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、複数のコアの中からいずれかのコアを選択し、複数のコアの各コアに割り当てられているソフトウェアの識別情報をコアごとに記憶する記憶部を参照して、選択したコアに割り当てられているソフトウェアを、複数のコアのうち選択したコアとは異なる他のコアに割り当て、ソフトウェアの起動要求を受け付けた場合、選択したコアに割り当てられているソフトウェアを他のコアに割り当てた結果、選択したコアに起動要求の対象となるソフトウェアを割り当てるスケジューリングプログラム、マルチコアプロセッサシステム、およびスケジューリング方法が提案される。
【発明の効果】
【０００８】
本発明の一側面によれば、ソフトウェアの起動処理が完了するまでの時間の短縮化を図ることができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施の形態におけるマルチコアプロセッサシステムの動作例を示す説明図である。
【図２】図２は、マルチコアプロセッサシステムのハードウェア構成例を示すブロック図である。
【図３】図３は、マルチコアプロセッサシステムの機能構成例を示す説明図である。
【図４】図４は、システム情報テーブルの記憶内容の一例を示す説明図である。
【図５】図５は、アプリ情報テーブルの記憶内容の一例を示す説明図である。
【図６】図６は、起動用ＣＰＵの選択方法の一例を示す説明図である。
【図７】図７は、スケジューリング処理の動作例を示す説明図（その１）である。
【図８】図８は、スケジューリング処理の動作例を示す説明図（その２）である。
【図９】図９は、スケジューリング処理の動作例を示す説明図（その３）である。
【図１０】図１０は、スケジューリング処理の動作例を示す説明図（その４）である。
【図１１】図１１は、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す説明図（その１）である。
【図１２】図１２は、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す説明図（その２）である。
【図１３】図１３は、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す説明図（その３）である。
【図１４】図１４は、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す説明図（その４）である。
【図１５】図１５は、起動用ＣＰＵの再設定に伴うクロック周波数の変更例を示す説明図（その１）である。
【図１６】図１６は、起動用ＣＰＵの再設定に伴うクロック周波数の変更例を示す説明図（その２）である。
【図１７】図１７は、スケジューリング処理手順の一例を示すフローチャートである。
【図１８】図１８は、アプリ起動時処理手順の一例を示すフローチャートである。
【図１９】図１９は、再スケジューリング処理手順の一例を示すフローチャートである。
【図２０】図２０は、クロック周波数変更処理手順の一例を示すフローチャートである。
【図２１】図２１は、本実施の形態にかかるスケジューリングプログラムの適用例を示す説明図である。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、開示のスケジューリングプログラム、マルチコアプロセッサシステム、およびスケジューリング方法の実施の形態を詳細に説明する。なお、本実施の形態にかかるスケジューリングプログラムを実行する装置の例として、複数のプロセッサを有するマルチコアプロセッサシステムにて説明を行う。マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。また、プロセッサを、以下ＣＰＵとして説明する。
【００１１】
図１は、本実施の形態におけるマルチコアプロセッサシステムの動作例を示す説明図である。マルチコアプロセッサシステム１００は、ＣＰＵ＃０〜ＣＰＵ＃３と、共有メモリ１０１を有する。また、ＣＰＵ＃０〜ＣＰＵ＃３は、それぞれバス１０２により接続されている。
【００１２】
また、図１の（Ａ）では、ＣＰＵ＃０はアプリ０が割り当てられており、ＣＰＵ＃１はアプリ４が割り当てられており、ＣＰＵ＃２はアプリ２が割り当てられており、ＣＰＵ＃３はアプリ３とアプリ５が割り当てられている。
【００１３】
このような状態において、スケジューリングプログラムを実行するＣＰＵ＃０は、ＣＰＵ＃０〜ＣＰＵ＃３の中から、たとえばＣＰＵ＃１を起動用ＣＰＵとして選択する。選択されるＣＰＵは、いずれのＣＰＵであってもよい。次に、ＣＰＵ＃０は、各ＣＰＵに割り当てられているアプリの識別情報をＣＰＵごとに記憶する共有メモリ１０１を参照して、ＣＰＵ＃１に割り当てられているアプリ４を、ＣＰＵ＃０〜ＣＰＵ＃３のうち、ＣＰＵ＃１以外のＣＰＵに割り当てる。図１の（Ａ）の例では、ＣＰＵ＃０は、アプリ４をＣＰＵ＃２に割り当てている。
【００１４】
次に、図１の（Ｂ）では、図１の（Ａ）にて示した状態の後、アプリの起動要求を受け付けた場合を示している。ＣＰＵ＃０は、起動要求の対象となるアプリ１を、起動用ＣＰＵとして選択されたＣＰＵ＃１に割り当てる。ＣＰＵ＃１は、アプリ１以外に割り当てられているアプリが存在しないため、アプリ１の起動処理に特化できるため、アプリ１の起動処理を高速に行うことができる。
【００１５】
このように、ＣＰＵ＃０は、ＣＰＵ群の中からアプリ起動用となる起動用ＣＰＵを選択して、選択した起動用ＣＰＵに割り当てられているアプリを他のコアに移行する。これにより、マルチコアプロセッサシステム１００は、アプリの起動要求時に起動用ＣＰＵがアプリの起動処理に特化できるため、アプリの起動処理が完了するまでの時間の短縮化を図ることができる。以下、図２〜図２１にて、本実施の形態にかかるマルチコアプロセッサシステム１００についての説明を行う。
【００１６】
（マルチコアプロセッサシステム１００のハードウェア）
図２は、マルチコアプロセッサシステムのハードウェア構成例を示すブロック図である。図２において、携帯電話などの携帯端末を想定するマルチコアプロセッサシステム１００は、ＣＰＵｓ２０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、フラッシュＲＯＭ２０４と、フラッシュＲＯＭコントローラ２０５と、フラッシュＲＯＭ２０６を有する。マルチコアプロセッサシステム１００は、さらに、ディスプレイ２０７と、ＩＦ２０８と、キーボード２０９と、クロックジェネレータ２１０と、熱センサ２１１を有する。なお、図１にて示した共有メモリ１０１は、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６といった記憶装置である。また、マルチコアプロセッサシステム１００は、スマートフォン、ＰＨＳ、といった形態電話に適用してもよいし、パーソナルコンピュータに適用してもよい。
【００１７】
ここで、ＣＰＵｓ２０１は、マルチコアプロセッサシステム１００の全体の制御を司る制御装置群である。ＣＰＵｓ２０１は、ＣＰＵ＃０〜ＣＰＵ＃３を含む。さらに、ＣＰＵｓ２０１は、Ｎ個のＣＰＵを含んでいてもよい。Ｎは、２以上の整数である。また、ＣＰＵｓ２０１の各ＣＰＵは、専用のキャッシュメモリを有してもよい。
【００１８】
ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している不揮発性メモリである。ＲＡＭ２０３は、ＣＰＵｓ２０１のワークエリアとして使用される揮発性メモリである。フラッシュＲＯＭ２０４は、書き換え可能な不揮発性メモリであり、たとえば、読出し速度が高速なＮＯＲ型フラッシュメモリである。フラッシュＲＯＭ２０４は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリなどを記憶している。たとえば、ＯＳを更新する場合、マルチコアプロセッサシステム１００は、ＩＦ２０８によって新しいＯＳを受信し、フラッシュＲＯＭ２０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００１９】
フラッシュＲＯＭコントローラ２０５は、ＣＰＵｓ２０１の制御にしたがってフラッシュＲＯＭ２０６に対するデータのリード／ライトを制御する制御装置である。フラッシュＲＯＭ２０６は、書き換え可能な不揮発性メモリであり、たとえば、データの保存、運搬を主に目的とした、ＮＡＮＤ型フラッシュメモリである。フラッシュＲＯＭ２０６は、フラッシュＲＯＭコントローラ２０５の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがＩＦ２０８を通して取得した画像データ、映像データなどや、また本実施の形態にかかるスケジューリングプログラムを記憶してもよい。フラッシュＲＯＭ２０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２０】
ディスプレイ２０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ２０７は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００２１】
ＩＦ２０８は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１２に接続され、ネットワーク２１２を介して他の装置に接続される。そして、ＩＦ２０８は、ネットワーク２１２と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。ＩＦ２０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２２】
キーボード２０９は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２３】
クロックジェネレータ２１０は、ＣＰＵｓ２０１の各ＣＰＵにクロックを供給する回路である。また、クロックジェネレータ２１０が供給するクロック周波数の値は、ＣＰＵｓ２０１から制御可能とする。熱センサ２１１は、ＣＰＵｓ２０１の各ＣＰＵの温度を測定する。ＣＰＵの温度の測定方法は、たとえば、各ＣＰＵの内部にあるサーマルダイオードから値を取得してもよいし、各ＣＰＵのパッケージの外側にある温度計から値を取得してもよい。測定結果は、共有メモリ１０１に記憶される。
【００２４】
（マルチコアプロセッサシステム１００の機能）
次に、マルチコアプロセッサシステム１００の機能について説明する。図３は、マルチコアプロセッサシステムの機能構成例を示す説明図である。マルチコアプロセッサシステム１００は、記憶部３０１と、取得部３０２と、算出部３０３と、検出部３０４と、選択部３０５と、特定部３０６と、第１割当部３０７と、第２割当部３０８と、変更部３０９を含む。制御部となる取得部３０２〜変更部３０９は、記憶装置に記憶されたプログラムをＣＰＵｓ２０１のうち特定のＣＰＵが実行することにより、取得部３０２〜変更部３０９の各機能を実現する。図３では、ＣＰＵ＃０が実行する場合について説明する。また、記憶装置は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などである。または、ＩＦ２０８を経由して他のＣＰＵが実行することにより、取得部３０２〜変更部３０９の各機能を実現してもよい。
【００２５】
また、マルチコアプロセッサシステム１００は、記憶部３０１に含まれるシステム情報テーブル３１１とアプリ情報テーブル３１２にアクセス可能である。システム情報テーブル３１１とアプリ情報テーブル３１２は、記憶部３０１内に含まれる。システム情報テーブル３１１は、複数のＣＰＵの各ＣＰＵに割り当てられているアプリの識別情報をＣＰＵごとに記憶する。システム情報テーブル３１１の詳細は、図４にて後述する。アプリ情報テーブル３１２は、各ＣＰＵに割り当てられているアプリの起動時刻を表す時刻情報を記憶する。アプリ情報テーブル３１２の詳細は、図５にて後述する。システム情報テーブル３１１とアプリ情報テーブル３１２は、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６といった記憶装置に格納されている。
【００２６】
また、図３に示すマルチコアプロセッサシステム１００は、ＣＰＵ＃０にアプリ１が割り当てられており、ＣＰＵ＃１にアプリ４が割り当てられており、ＣＰＵ＃２にアプリ２が割り当てられており、ＣＰＵ＃３に、アプリ３とアプリ５が割り当てられているとする。また、図３では、アプリ１がユーザの操作によって起動されるアプリであるとする。また、本実施の形態にかかるスケジューリングプログラムのスケジュール対象となるソフトウェアはアプリであるが、他のＣＰＵに移行することが可能であれば、ＯＳに含まれる基本ソフトウェアであってもよい。
【００２７】
取得部３０２は、各ＣＰＵの温度の測定結果を取得する。ＣＰＵの温度とは、ＣＰＵの内部にあるサーマルダイオードによって測定された温度でもよいし、ＣＰＵのパッケージの外側の温度であってもよい。たとえば、取得部３０２は、熱センサ２１１による各ＣＰＵの温度の測定結果が格納された共有メモリ１０１から読み出して、各ＣＰＵの温度の測定結果を取得する。
【００２８】
また、取得部３０２は、各ＣＰＵの使用率を取得してもよい。ＣＰＵの使用率とは、ＣＰＵに割り当てられているソフトウェアがＣＰＵを占有している時間の割合である。具体的なＣＰＵの使用率としては、ＣＰＵの単位時間あたりの実行時間の比率を使用率として算出しておく。取得部３０２の機能により、マルチコアプロセッサシステム１００は、起動用ＣＰＵとして選択する際の基準を取得することができる。なお、取得結果は、ＣＰＵ＃０のレジスタまたはキャッシュメモリ、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００２９】
算出部３０３は、システム情報テーブル３１１を参照して、各ＣＰＵに割り当てられているアプリの数をＣＰＵごとに算出する。たとえば、算出部３０３は、ＣＰＵ＃０に割り当てられているアプリが１個、ＣＰＵ＃１に割り当てられているアプリが１個、ＣＰＵ＃２に割り当てられているアプリが１個、ＣＰＵ＃３割り当てられているアプリが２個、というように算出する。また、算出部３０３は、アプリに重みをつけて算出してもよい。たとえば、処理量が多い特定のアプリが、通常のアプリ２個分であるという情報を記憶部３０１に記憶しておき、算出部３０３は、前述の情報を参照して、アプリの数を算出する。算出部３０３の機能により、マルチコアプロセッサシステム１００は、起動用ＣＰＵとして選択する際の基準を算出することができる。なお、算出結果は、ＣＰＵ＃０のレジスタまたはキャッシュメモリ、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００３０】
検出部３０４は、起動要求の対象となるアプリの起動処理が完了したことを検出する。たとえば、検出部３０４は、起動要求の対象となるアプリ１の起動処理が完了したことを検出する。
【００３１】
また、検出部３０４は、操作対象のアプリの実行が終了したことを検出してもよい。なお、操作対象のアプリとは、ユーザによる操作の対象となるアプリである。以下、操作対象のアプリをメインアプリと称する。たとえば、ＣＰＵ＃０は、メインアプリとなったアプリ０の実行が終了したことを検出する。検出部３０４の機能により、マルチコアプロセッサシステム１００は、起動用ＣＰＵを選択する契機、またはメインアプリを特定する契機を検出することができる。なお、検出結果は、ＣＰＵ＃０のレジスタまたはキャッシュメモリ、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００３２】
選択部３０５は、複数のＣＰＵの中からいずれかのＣＰＵを選択する。たとえば、選択部３０５は、ＣＰＵ＃０〜ＣＰＵ＃３のうち、ＣＰＵ＃１を起動用ＣＰＵとして選択する。たとえば、選択部３０５は、初めにＣＰＵ＃０を選択し、次の選択の機会では、ＣＰＵ＃１を選択するというように、固定の順序でＣＰＵを選択してもよいし、ＣＰＵ＃０〜ＣＰＵ＃３のうちランダムで選択してもよい。
【００３３】
また、選択部３０５は、取得部３０２によって取得した各ＣＰＵの温度の測定結果に基づいて、複数のＣＰＵの中からいずれかのＣＰＵを選択してもよい。たとえば、選択部３０５は、取得した各ＣＰＵの温度のうち、最高温度となったＣＰＵを、起動用ＣＰＵとして選択してもよい。また、選択部３０５は、各ＣＰＵの温度の測定結果の時間変化を算出し、温度の上昇度が最も高いＣＰＵを、起動用ＣＰＵとして選択してもよい。または、マルチコアプロセッサシステム１００の開発者が指定した許容温度以上となったＣＰＵを、起動用ＣＰＵとして選択してもよい。許容温度以上となったＣＰＵが複数存在する場合、選択部３０５は、たとえば、温度の上昇度が高いＣＰＵを選択してもよいし、許容温度以上となり続けている時間が長いＣＰＵを選択してもよい。
【００３４】
また、選択部３０５は、取得部３０２によって取得した各コアの使用率に基づいて、複数のＣＰＵの中からいずれかのＣＰＵを選択してもよい。たとえば、選択部３０５は、使用率が最大となったＣＰＵを、起動用ＣＰＵとして選択してもよい。また、選択部３０５は、使用率の時間変化を算出し、使用率の上昇度が最も高いＣＰＵを、起動用ＣＰＵとして選択してもよい。
【００３５】
また、選択部３０５は、算出部３０３によって算出されたＣＰＵごとのアプリの数に基づいて、複数のＣＰＵの中からいずれかのＣＰＵを選択する。たとえば、選択部３０５は、算出されたアプリの数が最も大きい値となったＣＰＵを、起動用ＣＰＵとして選択してもよい。また、選択部３０５は、アプリの数が最も多かったＣＰＵでのアプリ数と、次に多いアプリの数と、が所定の閾値以下である場合に、取得部３０２によって取得する、温度や、使用率を用いて、起動用ＣＰＵを選択してもよい。
【００３６】
また、選択部３０５は、検出部３０４によって起動処理が完了したことが検出された場合、複数のＣＰＵの中からいずれかのＣＰＵを選択してもよい。たとえば、選択部３０５は、検出部３０４がアプリ１の起動処理の完了を検出した場合、ＣＰＵ＃０〜ＣＰＵ＃３のうちいずれかのＣＰＵを起動用ＣＰＵとして選択する。選択部３０５の機能により、マルチコアプロセッサシステム１００は、起動処理に特化するＣＰＵを決定しておくことができる。なお、選択されたＣＰＵの識別情報が、ＣＰＵ＃０のレジスタまたはキャッシュメモリ、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００３７】
特定部３０６は、アプリ情報テーブル３１２を参照して、各ＣＰＵに割り当てられているアプリのうちメインアプリを特定する。アプリの起動時刻とは、起動要求を受け付けた時刻でもよいし、起動処理を開始した時刻でもよいし、起動処理が完了した時刻でもよい。たとえば、特定部３０６は、アプリの起動時刻が最も遅いアプリを、メインアプリとして特定する。または、アプリ情報テーブル３１２が前日以前のアプリの起動時刻を記憶しておき、特定部３０６は、現在時刻の過去方向において最も近い起動時刻となるアプリを、メインアプリとして特定してもよい。これにより、特定部３０６は、いつも同じ時刻に起動されるアプリをメインアプリとして特定できる。
【００３８】
また、アプリ情報テーブル３１２にアプリが起動された回数を記憶しておき、特定部３０６は、起動された回数が最も多いアプリを、メインアプリに特定してもよい。または、特定部３０６は、フォアグラウンドに設定されているアプリをメインアプリとして特定してもよい。
【００３９】
また、特定部３０６は、検出部３０４によってメインアプリの実行を終了したことが検出された場合、アプリ情報テーブル３１２を参照して、各ＣＰＵに割り当てられているアプリのうち新たなメインアプリを特定してもよい。たとえば、検出部３０４によってメインアプリに特定されていたアプリ０の実行を終了したことが検出された場合、特定部３０６は、アプリ情報テーブル３１２を参照して、アプリ１〜アプリ５の中から、新たなメインアプリを特定する。特定部３０６の機能により、マルチコアプロセッサシステム１００は、他のアプリを同時に割り当てたくないアプリを特定できる。なお、特定されたアプリの識別情報が、ＣＰＵ＃０のレジスタまたはキャッシュメモリ、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００４０】
第１割当部３０７は、システム情報テーブル３１１を参照して、選択部３０５が選択したＣＰＵに割り当てられているアプリを、複数のＣＰＵのうち選択したＣＰＵとは異なる他のＣＰＵに割り当てる。たとえば、選択部３０５がＣＰＵ＃１を選択したとする。このとき、第１割当部３０７は、システム情報テーブル３１１を参照して、ＣＰＵ＃１に割り当てられているアプリ４を特定する。続けて、第１割当部３０７は、アプリ４を、ＣＰＵ＃０〜ＣＰＵ＃３のうち、ＣＰＵ＃１とは異なる他のＣＰＵに割り当てる。図３の例では、第１割当部３０７は、アプリ４をＣＰＵ＃２に割り当てる。
【００４１】
また、第１割当部３０７は、システム情報テーブル３１１を参照して、特定部３０６が特定したメインアプリが割り当てられているＣＰＵを特定する。続けて、第１割当部３０７は、特定したＣＰＵに割り当てられているメインアプリ以外の他のアプリを、他のＣＰＵのうちメインアプリが割り当てられているＣＰＵとは異なるＣＰＵに割り当ててもよい。ここで、他のＣＰＵとは、複数のＣＰＵのうち起動用ＣＰＵ以外の他のＣＰＵのことである。
【００４２】
たとえば、特定部３０６によって特定されたメインアプリがアプリ１であり、アプリ１が割り当てられているＣＰＵをＣＰＵ＃０とする。また、図３に図示していないが、ＣＰＵ＃０に、アプリ６が割り当てられているとする。このとき、第１割当部３０７は、アプリ６を、アプリ１が割り当てられているＣＰＵ＃０と、起動用ＣＰＵであるＣＰＵ＃１以外のＣＰＵとなるＣＰＵ＃２またはＣＰＵ＃３のいずれかに割り当てる。
【００４３】
また、第１割当部３０７は、特定部３０６が新たなメインアプリを特定した場合、メインアプリが割り当てられていたＣＰＵに、新たなメインアプリを割り当ててもよい。たとえば、ＣＰＵ＃０に割り当てられていたメインアプリであるアプリ０の実行が終了し、アプリ２が新たなメインアプリとして特定された場合、第１割当部３０７は、アプリ２を、ＣＰＵ＃０に割り当てる。
【００４４】
また、第１割当部３０７は、特定部３０６が新たなメインアプリを特定した場合、新たなメインアプリが割り当てられているＣＰＵを特定する。続けて、第１割当部３０７は、特定したＣＰＵに割り当てられている新たなメインアプリ以外のアプリを、他のＣＰＵのうち特定したＣＰＵとは異なるＣＰＵに割り当ててもよい。たとえば、ＣＰＵ＃０に割り当てられていたメインアプリであるアプリ０の実行が終了し、特定部３０６がアプリ２を新たなメインアプリとして特定したとする。このとき、第１割当部３０７は、アプリ２が割り当てられているＣＰＵ＃２に割り当てられているアプリ２以外のアプリとなるアプリ４を、ＣＰＵ＃２と、起動用ＣＰＵであるＣＰＵ＃１以外のＣＰＵとなるＣＰＵ＃０またはＣＰＵ＃３のいずれかに割り当てる。
【００４５】
第１割当部３０７の機能により、マルチコアプロセッサシステム１００は、起動用ＣＰＵに割り当てられているアプリがなくなるため、起動用ＣＰＵを起動処理に特化させることができる。
【００４６】
第２割当部３０８は、アプリの起動要求を受け付けた場合、選択部３０５が選択したＣＰＵに割り当てられているアプリを、第１割当部３０７が他のＣＰＵに割り当てた結果、選択したＣＰＵに起動要求の対象となるアプリを割り当てる。なお、第１割当部が、選択したＣＰＵに割り当てられているアプリを他のＣＰＵに割り当てたことにより、選択したアプリには、割り当てられているアプリが存在しなくなる。たとえば、第２割当部３０８は、起動要求の対象となるアプリがアプリ１である場合、アプリ１を起動用ＣＰＵであるＣＰＵ＃１に割り当てる。第２割当部３０８の機能により、起動処理に特化できるＣＰＵにアプリを割り当てるため、起動処理が高速化し、ユーザに対する性能を向上できる。
【００４７】
変更部３０９は、選択部３０５が選択したＣＰＵに割り当てられているアプリを、第１割当部３０７が他のＣＰＵに割り当てた場合、選択したＣＰＵのクロック周波数の値を、前述の値より低い値に変更する。たとえば、第１割当部３０７が、起動用ＣＰＵとして選択されたＣＰＵ＃１に割り当てられているアプリ４をＣＰＵ＃２に割り当てたとする。このとき、変更部３０９は、ＣＰＵ＃１のクロック周波数の値を、現在の値より低い値に変更する。なお、変更後のクロック周波数の値は、ＣＰＵ＃１が設定可能な最低のクロック周波数でよい。
【００４８】
また、変更部３０９は、選択したＣＰＵに起動要求の対象となるアプリを割り当てた場合、選択したＣＰＵのクロック周波数の値を、起動要求の対象となるアプリを起動可能なクロック周波数の値に変更する。なお、アプリを起動可能なクロック周波数は、全てのアプリにて同一のクロック周波数であってもよい。または、アプリごとに起動可能なクロック周波数の値をアプリ情報テーブル３１２に記憶しておき、変更部３０９がアプリ情報テーブル３１２を参照して、クロック周波数を変更してもよい。
【００４９】
図４は、システム情報テーブルの記憶内容の一例を示す説明図である。システム情報テーブル３１１は、各ＣＰＵに対する情報を記憶している。図４に示すシステム情報テーブル３１１は、レコード４０１−１〜レコード４０１−４を記憶する。
【００５０】
システム情報テーブル３１１は、ＣＰＵＩＤ、クロック周波数、起動用ＣＰＵフラグ、割当アプリ、温度という５つのフィールドを含む。ＣＰＵＩＤフィールドには、ＣＰＵを識別する識別情報が格納される。クロック周波数フィールドには、対象のＣＰＵに設定されているクロック周波数が格納される。起動用ＣＰＵフラグフィールドには、起動用ＣＰＵか否かを示す識別子が格納される。たとえば、起動用ＣＰＵフラグフィールドに識別子として“１”が格納されていた場合、対象のＣＰＵが起動用ＣＰＵであることを示す。割当アプリフィールドには、対象のＣＰＵに割り当てられているアプリの一覧が格納される。温度フィールドには、対象のＣＰＵの温度が格納される。
【００５１】
たとえば、レコード４０１−１は、ＣＰＵＩＤが＃０となるＣＰＵ＃０について、クロック周波数がｆoverclockであり、起動用ＣＰＵでなく、割り当てられているアプリがアプリ０であり、温度がＴlowである。なお、ｆoverclockは、オーバークロックされたクロック周波数である。
【００５２】
また、レコード４０１−２にて示すｆlowは、ＣＰＵの動作を最低限保証できるクロック周波数である。レコード４０１−３、レコード４０１−４にて示すｆotherは、ｆoverclockとｆlow以外のクロック周波数である。また、ｆotherとｆoverclockとｆlowの関係については、図１４にて後述する。またＴlowと、Ｔhighについては、ＴhighがＴlowより温度が高いことを示す。したがって、図４では、ＣＰＵ＃０〜ＣＰＵ＃３のうち、ＣＰＵ＃１の温度が最も高い。
【００５３】
図５は、アプリ情報テーブルの記憶内容の一例を示す説明図である。アプリ情報テーブル３１２は、各アプリに対する情報を記憶している。図５に示すアプリ情報テーブル３１２は、レコード５０１−１〜レコード５０１−４を記憶する。
【００５４】
アプリ情報テーブル３１２は、アプリＩＤ、起動時刻、メインアプリフラグという３つのフィールドを含む。アプリＩＤフィールドには、アプリを識別する識別情報が格納される。起動時刻フィールドには、対象のアプリが起動した時刻が格納される。メインアプリフラグフィールドには、対象のアプリがメインアプリか否かを示す識別子が格納される。たとえば、メインアプリフラグフィールドに識別子として“１”が格納されていた場合、対象のアプリがメインアプリであることを示す。たとえば、レコード５０１−１は、アプリ０について、起動時刻が“ｍｍ／ｄｄ／ｈｈ：ｍｍ：ｓｓ”であり、メインアプリであることを示す。
【００５５】
図６は、起動用ＣＰＵの選択方法の一例を示す説明図である。ＣＰＵ＃０は、熱センサ２１１によって測定された各ＣＰＵの温度の測定結果を取得する。たとえば、図６の例では、ＣＰＵ＃０は、ＣＰＵ＃０〜ＣＰＵ＃３の各温度を取得する。取得した温度について、ＣＰＵ＃１の温度が高く、ＣＰＵ＃０とＣＰＵ＃２とＣＰＵ＃３の温度が低かったとする。
【００５６】
このとき、ＣＰＵ＃０は、温度が最も高いＣＰＵ＃１を起動用ＣＰＵとして選択する。続けて、ＣＰＵ＃０は、システム情報テーブル３１１について、ＣＰＵ＃１の情報を格納するレコード４０１−２の起動用ＣＰＵフラグフィールドに“１”を設定する。さらに、ＣＰＵ＃０は、レコード４０１−１、レコード４０１−３、レコード４０１−４の起動用ＣＰＵフラグフィールドに“０”を設定する。
【００５７】
なお、起動用ＣＰＵの選択が行われるタイミングは、下記４つのタイミングである。１つ目のタイミングは、システム起動時である。２つ目のタイミングは、アプリが起動完了した時である。３つ目のタイミングは、ＣＰＵ＃０〜ＣＰＵ＃３のいずれかのＣＰＵにて、ＣＰＵの温度が予め指定していた許容温度に到達した時である。４つ目のタイミングは、メインアプリの実行が終了した時である。次に、図７〜図１０を用いて、スケジューリング処理の動作例について説明する。
【００５８】
図７は、スケジューリング処理の動作例を示す説明図（その１）である。図７にて示すマルチコアプロセッサシステム１００は、アプリ０がＣＰＵ＃０に割り当てられており、アプリ２とアプリ４がＣＰＵ＃２に割り当てられており、アプリ３とアプリ５がＣＰＵ＃３に割り当てられている。
【００５９】
このような状態にて、ＣＰＵ＃０は、ユーザからの操作により、アプリ１を起動する。ＣＰＵ＃０は、アプリ１を起動用ＣＰＵであるＣＰＵ＃１に割り当てる。ＣＰＵ＃１は、アプリ１の起動処理を行う。アプリ１の起動完了後、ＣＰＵ＃０は、システム情報テーブル３１１を更新する。具体的には、ＣＰＵ＃０は、レコード４０１−２の割当アプリフィールドに、“アプリ１”を格納する。
【００６０】
図８は、スケジューリング処理の動作例を示す説明図（その２）である。図８にて示すマルチコアプロセッサシステム１００は、アプリ１が起動完了した状態である。このような状態にて、ＣＰＵ＃０は、新たな起動用ＣＰＵを選択する。図８に示す状態において、ＣＰＵ＃０は、温度が最も高いＣＰＵ＃２を起動用ＣＰＵとして選択する。続けて、ＣＰＵ＃０は、システム情報テーブル３１１について、ＣＰＵ＃２の情報を格納するレコード４０１−３の起動用ＣＰＵフラグフィールドに“１”を設定する。さらに、ＣＰＵ＃０は、レコード４０１−１、レコード４０１−２、レコード４０１−４の起動用ＣＰＵフラグフィールドに“０”を設定する。
【００６１】
次に、ＣＰＵ＃０は、メインアプリとなったアプリ１以外となる、アプリ０、アプリ２〜アプリ５を再スケジューリング対象アプリに設定し、再スケジューリング対象アプリに対して再スケジューリング処理を実行する。
【００６２】
なお、図８にて説明した状態は、図６にて示した、２つ目のタイミングであるアプリが起動完了した時である。もし、図８の状態が、１つ目のタイミングとなるシステム起動時であれば、ＣＰＵ＃０は、たとえば温度が最も高いＣＰＵを起動用ＣＰＵとして選択して、図８にて示したシステム情報テーブル３１１の更新処理と再スケジューリング処理を実行する。また、図８の状態が、３つ目のタイミングとなるＣＰＵの温度が許容温度に達した時であれば、ＣＰＵ＃０は、許容温度に達したＣＰＵを起動用ＣＰＵとして選択して、システム情報テーブル３１１の更新処理と再スケジューリング処理を実行する。４つ目のタイミングについては、図１０にて後述する。
【００６３】
図９は、スケジューリング処理の動作例を示す説明図（その３）である。図９にて示すマルチコアプロセッサシステム１００は、図８にて示した再スケジューリング対象アプリに対して再スケジューリング処理を実行した後の状態である。具体的に、ＣＰＵ＃０は、ＣＰＵ＃２に割り当てられていたアプリ２とアプリ４を、ＣＰＵ＃０に割り当てている。
【００６４】
また、ＣＰＵ＃０は、システム情報テーブル３１１の割当アプリフィールドを更新する。具体的には、ＣＰＵ＃０は、レコード４０１−１の割当アプリフィールドに、“アプリ０”、“アプリ４”、“アプリ２”を格納する。また、ＣＰＵ＃０は、レコード４０１−３の割当アプリフィールドを、空白に設定する。なお、レコード４０１−２と、レコード４０１−４の割当アプリフィールドの記憶内容は、図８にて示した内容と同一である。
【００６５】
図１０は、スケジューリング処理の動作例を示す説明図（その４）である。図１０にて示すマルチコアプロセッサシステム１００は、図９にて示した状態から、メインアプリであるアプリ１の実行が終了した状態である。このとき、ＣＰＵ＃０は、各ＣＰＵに割り当てられているアプリから、新たなメインアプリを特定する。たとえば、ＣＰＵ＃０は、アプリ０、アプリ２〜アプリ５のうち、最も起動時刻が遅いアプリ２をメインアプリに特定する。
【００６６】
続けて、ＣＰＵ＃０は、メインアプリに特定されたアプリ２が割り当てられているＣＰＵに、アプリ２以外のアプリが割り当てられていないように設定する。図１０では、ＣＰＵ＃０は、アプリ２を、メインアプリであったアプリ１が割り当てられていたＣＰＵ＃１に移行する。また、ＣＰＵ＃０は、システム情報テーブル３１１の割当アプリフィールドを更新する。具体的には、ＣＰＵ＃０は、レコード４０１−１の割当アプリフィールドに、“アプリ０”、“アプリ４”を格納する。また、ＣＰＵ＃０は、レコード４０１−２の割当アプリフィールドに、“アプリ２”を格納する。
【００６７】
なお、図１０では、ＣＰＵ＃０が、アプリ２をメインアプリであったアプリ１が割り当てられていたＣＰＵ＃１に移行することにより、アプリ２が割り当てられているＣＰＵに、アプリ２以外のアプリが割り当てられていないように設定している。別の割当方法として、ＣＰＵ＃０は、ＣＰＵ＃０に割り当てられているアプリ２以外のアプリ０とアプリ４を、ＣＰＵ＃０とＣＰＵ＃２以外のＣＰＵに割り当ててもよい。
【００６８】
続けて、図１１〜図１４において、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す。また、図１５、図１６において、起動用ＣＰＵの再設定に伴うクロック周波数の変更例を示す。
【００６９】
図１１は、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す説明図（その１）である。初めに、図１１〜図１５に共通する説明として、マスタＣＰＵとなるＣＰＵ＃０は、マスタＯＳ１１０１を実行する。また、ＣＰＵ＃１〜ＣＰＵ＃３は、それぞれ、ＯＳ１１０２、ＯＳ１１０３、ＯＳ１１０４を実行する。また、マスタＯＳ１１０１がアクセスする記憶領域として、ＣＰＵ＃０は、ウェイトキュー１１１１とランキュー１１１２にアクセス可能である。また、ＯＳ１１０２〜ＯＳ１１０４のそれぞれが、アクセスする記憶領域として、ＣＰＵ＃１〜ＣＰＵ＃３は、それぞれ、ランキュー１１１３、ランキュー１１１４、ランキュー１１１５にアクセス可能である。なお、ウェイトキュー１１１１〜ランキュー１１１５は、たとえば、それぞれにアクセスするＣＰＵのキャッシュメモリに存在してもよいし、共有メモリ１０１に存在してもよい。
【００７０】
マスタＯＳ１１０１は、マルチコアプロセッサシステム１００全体の制御を司る。また、マスタＯＳ１１０１は、ＣＰＵ＃０の制御を司る。具体的に、マスタＯＳ１１０１は、ユーザからの起動指示の対象となるアプリを、ＣＰＵ＃０〜ＣＰＵ＃３のいずれかに割り当てる。ＯＳ１１０２〜ＯＳ１１０４は、各ＣＰＵの制御を司る。
【００７１】
ウェイトキュー１１１１は、起動指示を受け付け、起動処理待ちのアプリの識別情報を記憶する記憶領域である。マスタＯＳの機能によりＣＰＵ＃０は、ウェイトキュー１１１１にアプリが挿入された順番に、挿入されたアプリを各ＣＰＵに割り当てる。ランキュー１１１２〜ランキュー１１１５は、各ＣＰＵにて割り当てられたアプリの識別情報を記憶する。各ＣＰＵは、ＣＰＵが実行するアプリをランキューから一つずつ取り出して、取り出したアプリを実行することにより、マルチタスク処理を実現する。また、図１１で示すＣＰＵ＃０〜ＣＰＵ＃３は、クロックジェネレータ２１０の制御により、クロック周波数の値がｆにて動作している。
【００７２】
図１２は、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す説明図（その２）である。図１２に示すマルチコアプロセッサシステム１００は、図１１で示した状態から、起動用ＣＰＵを選択した状態である。ＣＰＵ＃０は、熱センサ２１１によって測定された各ＣＰＵの温度によって、ＣＰＵ＃０〜ＣＰＵ＃３のうち、ＣＰＵ＃１を起動用ＣＰＵとして選択する。
【００７３】
次に、ＣＰＵ＃０は、クロックジェネレータ２１０を制御して、ＣＰＵ＃１のクロック周波数を、ｆからｆlowに変更する。ｆlowは、ＣＰＵ＃１が動作可能なクロック周波数のうち、最低のクロック周波数である。
【００７４】
図１３は、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す説明図（その３）である。図１３に示すマルチコアプロセッサシステム１００は、図１２にて示した状態から、ユーザの操作によりアプリ１の起動要求を受け付けた状態に遷移した場合を示す。ＣＰＵ＃０は、アプリ１の識別情報をウェイトキュー１１１１に格納する。
【００７５】
次に、ＣＰＵ＃０は、アプリ１を起動用ＣＰＵとして選択されたＣＰＵ＃１に割り当てる。続いて、ＣＰＵ＃０は、クロックジェネレータ２１０を制御して、ＣＰＵ＃１のクロック周波数の値を、ｆlowからｆoverclockに変更する。ｆoverclockは、通常設定されているクロック周波数よりも高いクロック周波数の値である。
【００７６】
図１４は、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す説明図（その４）である。図１４に示すマルチコアプロセッサシステム１００は、図１３にて示した状態から、アプリ１の起動処理が完了した状態に遷移した場合を示す。ＣＰＵ＃０は、ＣＰＵ＃０〜ＣＰＵ＃３のうち、温度が最も高いＣＰＵであるＣＰＵ＃２を新たな起動用ＣＰＵとして選択する。
【００７７】
また、ＣＰＵ＃０は、クロックジェネレータ２１０を制御して、ＣＰＵ＃２のクロック周波数を、ｆからｆlowに変更する。また、ＣＰＵ＃０は、クロックジェネレータ２１０を制御して、ＣＰＵ＃０とＣＰＵ＃３のクロック周波数の値を、ｆからｆotherに変更する。
【００７８】
なお、ＣＰＵ＃１のクロック周波数の値をｆoverclockに変更することにより、マルチコアプロセッサシステム１００の消費電力量が増大してしまう恐れがある。したがって、図１４に示すマルチコアプロセッサシステム１００は、ＣＰＵ＃０、ＣＰＵ＃２とＣＰＵ＃３のクロック周波数を変更することにより、マルチコアプロセッサシステム１００の消費電力量の増大を抑制している。ＣＰＵの消費電力量Ｐ（ｆ）は、ＣＰＵの電源電圧をＶddとし、Ｃを比例定数とすると、下記式を用いて表現できる。
【００７９】
Ｐ（ｆ）＝Ｃ（Ｖdd）2ｆ
【００８０】
ＣＰＵ＃０は、下記（１）式が成り立つように、ｆotherを決定する。
【００８１】
Ｐ（ｆoverclock）＋Ｐ（ｆlow）＋ΣnＰ（ｆother）＝ＮＰ（ｆ）  …（１）
【００８２】
（１）式にて、ｎは、ＣＰＵの個数Ｎから、クロック周波数の値が、ｆoverclockまたはｆlowに変更されたＣＰＵの個数を引いた数となる。
【００８３】
（１）式が成り立つｆotherを設定することにより、マルチコアプロセッサシステム１００は、消費電力量の増大を抑制しつつ、ユーザに対する性能を向上できる。
【００８４】
図１５は、起動用ＣＰＵの再設定に伴うクロック周波数の変更例を示す説明図（その１）である。図１５に示すマルチコアプロセッサシステム１００は、ＣＰＵ＃０にアプリ０が割り当てられており、ＣＰＵ＃１にアプリ１が割り当てられており、ＣＰＵ＃２にアプリ２が割り当てられており、ＣＰＵ＃３にアプリ３が割り当てられている。
【００８５】
このような状態において、ＣＰＵ＃０は、たとえば、メインアプリをアプリ０に特定する。次に、ＣＰＵ＃０は、たとえば、ＣＰＵ＃０〜ＣＰＵ＃３のうちＣＰＵ＃１を起動用ＣＰＵとして選択する。続けて、ＣＰＵ＃０は、クロックジェネレータ２１０を制御して、ＣＰＵ＃０のクロック周波数を、ｆlowからｆoverclockに変更する。また、ＣＰＵ＃０は、クロックジェネレータ２１０を制御して、ＣＰＵ＃１のクロック周波数を、ｆotherからｆlowに変更する。
【００８６】
次に、ＣＰＵ＃０は、起動用ＣＰＵとして選択されたＣＰＵ＃１に割り当てられているアプリ１を、ＣＰＵ＃２またはＣＰＵ＃３のいずれかに割り当てる。図１５の例では、ＣＰＵ＃０は、アプリ１をＣＰＵ＃２に割り当てる。割り当てられたアプリ１の識別情報が、ランキュー１１１４に格納される。
【００８７】
図１６は、起動用ＣＰＵの再設定に伴うクロック周波数の変更例を示す説明図（その２）である。図１６に示すマルチコアプロセッサシステム１００は、図１５に示した状態から、新たなアプリの起動要求を受け付けた状態に遷移した場合を示す。図１６にて、ＣＰＵ＃０は、新たにアプリ５の起動要求を受け付けている。受け付けたアプリ５の識別情報が、ウェイトキュー１１１１に格納されている。
【００８８】
ＣＰＵ＃０は、アプリ５を起動用ＣＰＵであるＣＰＵ＃１に割り当てる。続けて、ＣＰＵ＃０は、クロックジェネレータ２１０を制御して、ＣＰＵ＃１のクロック周波数を、ｆlowからｆoverclockに変更する。また、ＣＰＵ＃０は、アプリ５の起動完了後、アプリ５をメインアプリに設定する。この時点で、アプリ０がメインアプリでなくなったため、ＣＰＵ＃０は、ＣＰＵ＃０のクロック周波数を、ｆoverclockからｆotherに変更する。
【００８９】
続けて、図７〜図１６にて説明した動作を行うスケジューリング処理のフローチャートを、図１７〜図２０を用いて説明する。スケジューリング処理を実行するＣＰＵは、ＣＰＵ＃０〜ＣＰＵ＃３のうちいずれのＣＰＵであってもよい。本実施の形態では、ＣＰＵ＃０がスケジューリング処理を実行する場合を例にして説明する。
【００９０】
図１７は、スケジューリング処理手順の一例を示すフローチャートである。スケジューリング処理は、アプリを割り当てるＣＰＵを決定する処理である。初めに、ＣＰＵ＃０は、熱センサ２１１の測定結果を用いて、温度が最も高いＣＰＵを特定する（ステップＳ１７０１）。次に、ＣＰＵ＃０は、ＣＰＵ＃０〜ＣＰＵ＃３のうち、特定したＣＰＵを起動用ＣＰＵとして選択する（ステップＳ１７０２）。続いて、ＣＰＵ＃０は、クロックジェネレータ２１０により、各ＣＰＵのクロック周波数をｆlowに変更する（ステップＳ１７０３）。
【００９１】
次に、ＣＰＵ＃０は、何らかのイベントを検出したか否かを判断する（ステップＳ１７０４）。アプリ起動要求イベントを検出した場合（ステップＳ１７０４：アプリ起動要求イベント）、ＣＰＵ＃０は、アプリ起動時処理を実行する（ステップＳ１７０５）。アプリ起動時処理の詳細は、図１８にて後述する。ステップＳ１７０５の実行終了後、ＣＰＵ＃０は、ステップＳ１７０４の処理に移行する。
【００９２】
ＣＰＵ許容温度到達イベントを検出した場合（ステップＳ１７０４：ＣＰＵ許容温度到達イベント）、ＣＰＵ＃０は、許容温度に到達したＣＰＵを起動用ＣＰＵとして選択する（ステップＳ１７０６）。なお、ＣＰＵ許容温度到達イベントとは、ＣＰＵ＃０〜ＣＰＵ＃３のうち、許容温度に到達したＣＰＵを検出したというイベントである。具体的な検出方法としては、ＣＰＵ＃０は、熱センサ２１１による測定結果を定期的に読み出して、許容温度以上となったＣＰＵがあれば、スケジューリングプログラムに通知する。
【００９３】
続けて、ＣＰＵ＃０は、再スケジューリング処理を実行する（ステップＳ１７０７）。再スケジューリング処理の詳細は、図１９にて後述する。次に、ＣＰＵ＃０は、クロック周波数変更処理を実行する（ステップＳ１７０８）。クロック周波数変更処理の詳細は、図２０にて後述する。ステップＳ１７０８の処理終了後、ＣＰＵ＃０は、ステップＳ１７０４の処理に移行する。
【００９４】
メインアプリ実行終了イベントを検出した場合（ステップＳ１７０４：メインアプリ実行終了イベント）、ＣＰＵ＃０は、アプリ情報テーブル３１２を参照して、起動時刻が最も遅いアプリをメインアプリに特定する（ステップＳ１７０９）。続けて、ＣＰＵ＃０は、再スケジューリング処理を実行する（ステップＳ１７１０）。ステップＳ１７１０の処理終了後、ＣＰＵ＃０は、ステップＳ１７０４の処理に移行する。なお、ステップＳ１７１０の終了後、ＣＰＵ＃０は、クロック周波数の変更を行ってもよい。具体的には、メインアプリが割り当てられたＣＰＵのクロック周波数をｆoverclockに変更する。続けて、メインアプリが割り当てられているＣＰＵと起動用ＣＰＵ以外のＣＰＵのクロック周波数を、ｆotherに変更する。
【００９５】
スケジューリング処理終了イベントを検出した場合（ステップＳ１７０４：スケジューリング処理終了イベント）、ＣＰＵ＃０は、スケジューリング処理を終了する。また、イベント発生していない場合（ステップＳ１７０４：Ｎｏ）、一定時間経過後、ＣＰＵ＃０は、ステップＳ１７０４の処理に移行する。スケジューリング処理の機能により、マルチコアプロセッサシステム１００は、起動用ＣＰＵまたはメインアプリが変更するイベントを検出して、それぞれのユーザに対する性能を向上させるための処理を実行できる。
【００９６】
図１８は、アプリ起動時処理手順の一例を示すフローチャートである。アプリ起動時処理は、アプリ起動イベントを検出した時に実行される処理である。なお、図１８の処理にて起動するアプリは、アプリ起動イベント内の引数にて指定されている起動要求の対象となるアプリである。
【００９７】
ＣＰＵ＃０は、起動用ＣＰＵに、起動要求の対象となるアプリを割り当てる（ステップＳ１８０１）。次に、ＣＰＵ＃０は、起動用ＣＰＵのクロック周波数を、ｆoverclockに変更する（ステップＳ１８０２）。続けて、ＣＰＵ＃０は、起動要求の対象となるアプリの起動処理を実行する（ステップＳ１８０３）。次に、ＣＰＵ＃０は、起動処理が完了したことを検出する（ステップＳ１８０４）。起動処理が完了しない間、ＣＰＵ＃０は、起動処理が完了することを待ち続ける。
【００９８】
起動処理の実行後、ＣＰＵ＃０は、起動処理が完了したアプリをメインアプリに特定する（ステップＳ１８０５）。次に、ＣＰＵ＃０は、熱センサ２１１の測定結果を用いて、温度が最も高いＣＰＵを特定する（ステップＳ１８０６）。続けて、ＣＰＵ＃０は、特定したＣＰＵを起動用ＣＰＵとして選択する（ステップＳ１８０７）。なお、ステップＳ１８０７の処理にて選択されるＣＰＵは、ステップＳ１８０２における起動用ＣＰＵとは異なるＣＰＵになり易い。異なるＣＰＵとなる理由として、ステップＳ１８０２における起動用ＣＰＵは、アプリを実行しておらず、クロック周波数もｆlowに変更されていたため、温度が低くなっているためである。
【００９９】
次に、ＣＰＵ＃０は、再スケジューリング処理を実行する（ステップＳ１８０８）。続けて、ＣＰＵ＃０は、クロック周波数変更処理を実行する（ステップＳ１８０９）。ステップＳ１８０９の処理実行後、ＣＰＵ＃０は、アプリ起動時処理を終了する。アプリ起動時処理により、マルチコアプロセッサシステム１００は、アプリ起動要求イベントに伴う起動用ＣＰＵの選択とメインアプリの特定を行うことができる。
【０１００】
図１９は、再スケジューリング処理手順の一例を示すフローチャートである。再スケジューリング処理は、起動用ＣＰＵが選択された場合、またはメインアプリが特定された場合に、アプリの割当を変更する処理である。
【０１０１】
ＣＰＵ＃０は、メインアプリ以外のアプリ群のスケジューリングをＣＰＵ数が３個以上か否かに応じて決定する（ステップＳ１９０１）。ＣＰＵ数が３個以上である場合（ステップＳ１９０１：Ｙｅｓ）、ＣＰＵ＃０は、メインアプリが割り当てられているＣＰＵと起動用ＣＰＵ以外のＣＰＵ群に、負荷分散スケジューリングする（ステップＳ１９０２）。負荷分散スケジューリングとは、各ＣＰＵの負荷量が均等になるようにアプリを割り当てる処理である。ＣＰＵ数が３個未満である場合（ステップＳ１９０１：Ｎｏ）、ＣＰＵ＃０は、起動用ＣＰＵではないＣＰＵにアプリ群を割り当てる（ステップＳ１９０３）。
【０１０２】
ステップＳ１９０２、またはステップＳ１９０３の処理終了後、ＣＰＵ＃０は、システム情報テーブル３１１の割当済アプリフィールドを、アプリの割当結果に基づいて更新する（ステップＳ１９０４）。ステップＳ１９０４の処理終了後、ＣＰＵ＃０は、再スケジューリング処理を終了する。再スケジューリング処理により、マルチコアプロセッサシステム１００は、起動用ＣＰＵを起動処理に特化させることができ、また、メインアプリが割り当てられているＣＰＵを、メインアプリの実行に特化することができる。
【０１０３】
図２０は、クロック周波数変更処理手順の一例を示すフローチャートである。クロック周波数変更処理は、起動用ＣＰＵが選択された場合に、各ＣＰＵのクロック周波数を変更する処理である。
【０１０４】
ＣＰＵ＃０は、起動用ＣＰＵのクロック周波数を、ｆlowに変更する（ステップＳ２００１）。次に、ＣＰＵ＃０は、メインアプリが割り当てられているＣＰＵと起動用ＣＰＵ以外のＣＰＵのクロック周波数を、ｆotherに変更する（ステップＳ２００２）。続いて、ＣＰＵ＃０は、システム情報テーブル３１１のクロック周波数フィールドを更新する（ステップＳ２００３）。クロック周波数変更処理により、マルチコアプロセッサシステム１００は、温度が高くなっていたＣＰＵのクロック周波数を低下させることになるため、ＣＰＵの温度を下げることができる。
【０１０５】
図２１は、本実施の形態にかかるスケジューリングプログラムの適用例を示す説明図である。本実施の形態として、携帯電話などの携帯端末を想定している。図２１において、携帯電話システム２１００の各部の動作は図２と同様である。具体的に、形態電話システム２１００は、ＣＰＵｓ２１０１、ＲＯＭ２１０２、ＲＡＭ２１０３、フラッシュＲＯＭ２１０４、フラッシュＲＯＭコントローラ２１０５、フラッシュＲＯＭ２１０６を有する。さらに、形態電話システム２１００は、ディスプレイ２１０７、ＩＦ２１０８、キーボード２１０９、クロックジェネレータ２１１０、熱センサ２１１１を有する。各部は、バス２１１２にて相互に接続されている。
【０１０６】
携帯電話システム２１００上で、たとえば、音楽を聴きながらインターネットブラウジングを行っている状況を想定する。このとき、ＣＰＵ＃１とＣＰＵ＃２において音楽再生処理２１２１とブラウザ処理２１２２がそれぞれ実行されている。
【０１０７】
本実施の携帯で説明したマルチコアプロセッサシステム１００として、携帯電話システム２１００は、スケジューリングプログラムを実行する。たとえば、ＣＰＵ＃０が起動用ＣＰＵに設定されていたとする。このとき、携帯電話システム２１００が携帯システム２１００を使用しているユーザの指示によりゲームアプリを起動した場合、ゲーム処理２１２３がＣＰＵ＃０に割り当てられる。このとき、ＣＰＵ＃０は、オーバークロックされ、かつ、起動要求の対象となるゲーム処理２１２３の処理に特化できるため、携帯電話システム２１００はユーザに対する性能を向上できる。
【０１０８】
以上説明したように、マルチコアプロセッサシステム１００は、ＣＰＵ群の中からアプリ起動用となる起動用ＣＰＵを選択し、起動用ＣＰＵに割り当てられているアプリを他のＣＰＵに移行する。これにより、アプリの起動要求時、起動用ＣＰＵがアプリの起動処理に特化できるため、マルチコアプロセッサシステム１００は、アプリの起動処理が完了するまでの時間を短縮化できる。アプリの起動処理が完了するまでの時間が短縮化することにより、たとえば、起動要求を行ったユーザの待ち時間が短縮されるため、ユーザに対する性能を向上できる。
【０１０９】
また、マルチコアプロセッサシステム１００は、各ＣＰＵの温度に基づいて起動用ＣＰＵを選択してもよい。ＣＰＵの負荷量が多く温度が上昇したＣＰＵを起動用ＣＰＵとして選択することにより、割り当てられているアプリが他のＣＰＵに移行し、起動用ＣＰＵの負荷量が低減するため、マルチコアプロセッサシステム１００は、ＣＰＵの温度を低下させることができる。
【０１１０】
また、マルチコアプロセッサシステム１００は、各ＣＰＵの使用率に基づいて起動用ＣＰＵを選択してもよい。ＣＰＵの使用率が高いと、ＣＰＵの温度も上昇している可能性が高い。たとえば、ＣＰＵの使用率が高いＣＰＵを起動用ＣＰＵとして選択することにより、割り当てられているアプリが他のＣＰＵに移行し、起動用ＣＰＵの負荷量が低減する。したがって、マルチコアプロセッサシステム１００は、温度が上昇しているＣＰＵの温度を低下させることができる。
【０１１１】
また、マルチコアプロセッサシステム１００は、各ＣＰＵに割り当てられているアプリの数に基づいて、起動用ＣＰＵを選択してもよい。ＣＰＵに割り当てられているアプリの数が多いと、ＣＰＵの負荷量が増大して、ＣＰＵの温度も上昇している可能性が高い。たとえば、割り当てられているアプリの数が多いＣＰＵを起動用ＣＰＵとして選択することにより、割り当てられているアプリが他のＣＰＵに移行し、起動用ＣＰＵの負荷量が低減する。したがって、マルチコアプロセッサシステム１００は、温度が上昇しているＣＰＵの温度を低下させることができる。
【０１１２】
また、マルチコアプロセッサシステム１００は、起動用ＣＰＵとして選択されたＣＰＵに割り当てられていたアプリを他のＣＰＵに割り当てた場合、起動用ＣＰＵのクロック周波数を、現在の値より低下させてもよい。アプリを他のＣＰＵに割り当てたことにより、起動用ＣＰＵの負荷量が減少し、低いクロック周波数でも起動用ＣＰＵが動作できる。また、起動用ＣＰＵのクロック周波数が低下したことにより、起動用ＣＰＵの温度を低下させることができる。ＣＰＵの温度が低下することにより、マルチコアプロセッサシステム１００は、熱暴走を防ぐことができる。また、マルチコアプロセッサシステム１００は、熱によるパッケージの破損を防止できる。
【０１１３】
また、マルチコアプロセッサシステム１００は、起動要求となるアプリを割り当てた場合、起動用ＣＰＵを、起動要求の対象となるアプリを起動可能なクロック周波数の値に変更してもよい。これにより、マルチコアプロセッサシステム１００は、クロック周波数の値が低く変更されており、アプリを起動できない状態から、起動処理を実行できる状態に変更できる。
【０１１４】
また、マルチコアプロセッサシステム１００は、起動要求の対象となるアプリの起動処理が完了した場合、新たな起動用ＣＰＵを選択してもよい。アプリの起動処理が完了すると、起動用ＣＰＵにアプリが割り当てられた状態となるため、マルチコアプロセッサシステム１００は、新たな起動用ＣＰＵを選択しておくことにより、新たな起動要求に対して、ユーザに対する性能が向上できるように準備できる。
【０１１５】
また、マルチコアプロセッサシステム１００は、アプリの起動時刻に基づいて、メインアプリを特定する。続けて、マルチコアプロセッサシステム１００は、メインアプリを割り当てているＣＰＵに割り当てられているメインアプリ以外のアプリを、メインアプリを割り当てているＣＰＵと起動用ＣＰＵ以外のＣＰＵに割り当ててもよい。本実施の形態では、起動用ＣＰＵにアプリを割り当てないようにしたため、他のＣＰＵの負荷量が増大し、ユーザが操作するメインアプリが割り当てられているＣＰＵも負荷量が増大するため、メインアプリの割当時間が短くなり、ユーザに対する性能が低下する。したがって、ユーザが操作するメインアプリが割り当てられているＣＰＵには、メインアプリ以外のアプリを割り当てないことにより、メインアプリの処理に特化できるため、マルチコアプロセッサシステム１００は、ユーザに対する性能の低下を抑制できる。
【０１１６】
また、マルチコアプロセッサシステム１００は、メインアプリの実行が終了したことを検出した場合、新たなメインアプリを特定し、終了したメインアプリが割り当てられていたＣＰＵに、新たなメインアプリを割り当ててもよい。これにより、新たなメインアプリが割り当てられているＣＰＵには、メインアプリ以外のアプリを割り当てないことになり、新たなメインアプリの処理に特化できるため、マルチコアプロセッサシステム１００は、ユーザに対する性能の低下を抑制できる。また、前述の方法は、新たなメインアプリ１つを移行するだけで済む。また、終了したメインアプリを高速に動作させるため、メインアプリが割り当てられていたＣＰＵがオーバークロックしていた場合、マルチコアプロセッサシステム１００は、クロック周波数を変更せずに新たなメインアプリも高速に動作させることができる。
【０１１７】
また、マルチコアプロセッサシステム１００は、メインアプリの実行が終了したことを検出した場合、新たなメインアプリを特定し、新たなメインアプリを割り当てているＣＰＵに割り当てられている他のアプリを、起動用ＣＰＵ以外に割り当ててもよい。これにより、新たなメインアプリが割り当てられているＣＰＵには、メインアプリ以外のアプリを割り当てないことになり、新たなメインアプリの処理に特化できるため、マルチコアプロセッサシステム１００は、ユーザに対する性能の低下を抑制できる。前述の方法は、新たなメインアプリの再割当をせずに済む。
【０１１８】
なお、本実施の形態で説明したスケジューリング方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本スケジューリングプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本スケジューリングプログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１１９】
＃０〜＃３  ＣＰＵ
０〜５  アプリ
１００  マルチコアプロセッサシステム
１０１  共有メモリ
３０１  記憶部
３０２  取得部
３０３  算出部
３０４  検出部
３０５  選択部
３０６  特定部
３０７  第１割当部
３０８  第２割当部
３０９  変更部
３１１  システム情報テーブル
３１２  アプリ情報テーブル
【図１】
2013140518.tif 000003
【図２】
2013140518.tif 000004
【図３】
2013140518.tif 000005
【図４】
2013140518.tif 000006
【図５】
2013140518.tif 000007
【図６】
2013140518.tif 000008
【図７】
2013140518.tif 000009
【図８】
2013140518.tif 000010
【図９】
2013140518.tif 000011
【図１０】
2013140518.tif 000012
【図１１】
2013140518.tif 000013
【図１２】
2013140518.tif 000014
【図１３】
2013140518.tif 000015
【図１４】
2013140518.tif 000016
【図１５】
2013140518.tif 000017
【図１６】
2013140518.tif 000018
【図１７】
2013140518.tif 000019
【図１８】
2013140518.tif 000020
【図１９】
2013140518.tif 000021
【図２０】
2013140518.tif 000022
【図２１】
2013140518.tif 000023
【手続補正書】
【提出日】平成26年9月12日(2014.9.12)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のコアのうち特定のコアに、
前記複数のコアの中からいずれかのコアを選択し、
前記複数のコアの各コアに割り当てられているソフトウェアの識別情報をコアごとに記憶する記憶部を参照して、前記選択したコアに割り当てられているソフトウェアを、前記複数のコアのうち前記選択したコアとは異なる他のコアに割り当て、
ソフトウェアの起動要求を受け付けた場合、前記選択したコアに割り当てられているソフトウェアを前記他のコアに割り当てた結果、前記選択したコアに前記起動要求の対象となるソフトウェアを割り当てる、
処理を実行させることを特徴とするスケジューリングプログラム。
【請求項２】
前記特定のコアに、
前記各コアの温度の測定結果を取得する処理を実行させ、
前記選択する処理は、
前記取得した各コアの温度の測定結果に基づいて、前記複数のコアの中からいずれかのコアを選択することを特徴とする請求項１に記載のスケジューリングプログラム。
【請求項３】
前記特定のコアに、
前記各コアの使用率を取得する処理を実行させ、
前記選択する処理は、
前記取得した各コアの使用率に基づいて、前記複数のコアの中からいずれかのコアを選択することを特徴とする請求項１に記載のスケジューリングプログラム。
【請求項４】
前記特定のコアに、
前記記憶部を参照して、前記各コアに割り当てられているソフトウェアの数を前記コアごとに算出する処理を実行させ、
前記選択する処理は、
前記算出したコアごとのソフトウェアの数に基づいて、前記複数のコアの中からいずれかのコアを選択することを特徴とする請求項１に記載のスケジューリングプログラム。
【請求項５】
前記特定のコアに、
前記選択したコアに割り当てられているソフトウェアを前記他のコアに割り当てた場合、前記選択したコアのクロック周波数の値を当該値より低い値に変更する処理を実行させることを特徴とする請求項１〜４のいずれか一つに記載のスケジューリングプログラム。
【請求項６】
前記特定のコアに、
前記起動要求の対象となるソフトウェアの起動処理が完了したことを検出し、
前記起動処理が完了したことを検出した場合、前記複数のコアの中からいずれかのコアを選択し、
前記記憶部を参照して、前記選択したコアに割り当てられているソフトウェアを、前記複数のコアのうち前記選択したコアとは異なるコアに割り当て、
ソフトウェアの起動要求を受け付けた場合、前記選択したコアに割り当てられているソフトウェアを前記複数のコアのうち前記選択したコアとは異なるコアに割り当てた結果、前記選択したコアに前記起動要求の対象となるソフトウェアを割り当てる処理を実行させることを特徴とする請求項１〜５のいずれか一つに記載のスケジューリングプログラム。
【請求項７】
前記記憶部は、前記各コアに割り当てられているソフトウェアの起動時刻を表す時刻情報を記憶しており、
前記特定のコアに、
前記記憶部に記憶されている前記各コアに割り当てられているソフトウェアの起動時刻を表す時刻情報を参照して、前記各コアに割り当てられているソフトウェアのうち操作対象のソフトウェアを特定し、
前記記憶部に記憶されている前記コアごとのソフトウェアの識別情報を参照して、前記特定した操作対象のソフトウェアが割り当てられているコアに割り当てられている前記操作対象のソフトウェア以外の他のソフトウェアを、前記他のコアのうち前記操作対象のソフトウェアが割り当てられているコアとは異なるコアに割り当てる処理を実行させることを特徴とする請求項１〜６のいずれか一つに記載のスケジューリングプログラム。
【請求項８】
前記特定のコアに、
前記操作対象のソフトウェアの実行が終了したことを検出し、
前記操作対象のソフトウェアの実行が終了したことを検出した場合、前記記憶部に記憶されている前記各コアに割り当てられているソフトウェアの起動時刻を表す時刻情報を参照して、前記各コアに割り当てられているソフトウェアのうち新たな操作対象のソフトウェアを特定し、
前記新たな操作対象のソフトウェアを特定した場合、前記操作対象のソフトウェアが割り当てられていたコアに、前記新たな操作対象のソフトウェアを割り当てる処理を実行させることを特徴とする請求項７に記載のスケジューリングプログラム。
【請求項９】
前記特定のコアに、
前記操作対象のソフトウェアの実行が終了したことを検出し、
前記操作対象のソフトウェアの実行が終了したことを検出した場合、前記記憶部に記憶されている時刻情報を参照して、前記各コアに割り当てられているソフトウェアのうち新たな操作対象のソフトウェアを特定し、
前記新たな操作対象のソフトウェアを特定した場合、前記新たな操作対象のソフトウェアが割り当てられているコアに割り当てられている前記新たな操作対象のソフトウェア以外のソフトウェアを、前記他のコアのうち前記新たな操作対象のソフトウェアが割り当てられているコアとは異なるコアに割り当てる処理を実行させることを特徴とする請求項８に記載のスケジューリングプログラム。
【請求項１０】
複数のコアの中からいずれかのコアを選択する選択部と、
前記複数のコアの各コアに割り当てられているソフトウェアの識別情報をコアごとに記憶する記憶部を参照して、前記選択部が選択したコアに割り当てられているソフトウェアを、前記複数のコアのうち前記選択したコアとは異なる他のコアに割り当てる第１の割当部と、
ソフトウェアの起動要求を受け付けた場合、前記選択したコアに割り当てられているソフトウェアを前記第１の割当部が前記他のコアに割り当てた結果、前記選択したコアに前記起動要求の対象となるソフトウェアを割り当てる第２の割当部と、
を有することを特徴とするマルチコアプロセッサシステム。
【請求項１１】
複数のコアのうち特定のコアが、
前記複数のコアの中からいずれかのコアを選択し、
前記複数のコアの各コアに割り当てられているソフトウェアの識別情報をコアごとに記憶する記憶部を参照して、前記選択したコアに割り当てられているソフトウェアを、前記複数のコアのうち前記選択したコアとは異なる他のコアに割り当て、
ソフトウェアの起動要求を受け付けた場合、前記選択したコアに割り当てられているソフトウェアを前記他のコアに割り当てた結果、前記選択したコアに前記起動要求の対象となるソフトウェアを割り当てる、
処理を実行することを特徴とするスケジューリング方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スケジューリングプログラム、マルチコアプロセッサシステム、およびスケジューリング方法に関する。
【背景技術】
【０００２】
従来から、複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の各々のＣＰＵに対して割り当てるアプリケーションソフトウェアを決定するスケジューリング技術が存在する。以下、アプリケーションソフトウェアを、「アプリ」と称する。
【０００３】
関連する技術として、たとえば、ＣＰＵに割り当てられているアプリがスケジューリング技術にて決定された際に、ＣＰＵに割り当てられたアプリの処理要求に応じて、クロック周波数を変更するという技術が開示されている。また、リアルタイム制約のあるアプリとリアルタイム制約のないアプリを周期的に実行するシステムにおいて、リアルタイム制約のアプリを実行する際に、リアルタイム制約を満たせるようにクロック周波数を変更する技術が開示されている。また、アプリを実行した際に、ＣＰＵが達する温度を予測して、予測した温度が規定温度を超える場合には、アプリを他のＣＰＵに割り当てる技術が開示されている（たとえば、下記特許文献１〜３を参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２００２−５３３８０１号公報
【特許文献２】特開２００２−９９４３３号公報
【特許文献３】特開２００６−１３３９９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術によれば、ソフトウェアの起動要求を受け付けた場合に、既に割り当てられている他のソフトウェアの処理により、起動要求を受け付けたソフトウェアの起動処理が遅延してしまう場合がある。たとえば、ソフトウェアの起動要求の受付時、他のソフトウェアの処理の実行中の場合、ＣＰＵは他のソフトウェアの処理の完了後、または他のソフトウェアの処理の停止後にソフトウェアの起動処理を開始することになり、ソフトウェアの起動処理が遅延する。また、ソフトウェアの起動処理と他のソフトウェアの処理を時分割にて切り替えて処理している場合、ＣＰＵは割当時間の満了後にソフトウェアの起動処理を停止して他のソフトウェアの処理を実行することになり、ソフトウェアの起動処理が遅延する場合がある。
【０００６】
本発明は、上述した従来技術による問題点を解消するため、ソフトウェアの起動処理が完了するまでの時間を短縮化できるスケジューリングプログラム、マルチコアプロセッサシステム、およびスケジューリング方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、複数のコアの中からいずれかのコアを選択し、複数のコアの各コアに割り当てられているソフトウェアの識別情報をコアごとに記憶する記憶部を参照して、選択したコアに割り当てられているソフトウェアを、複数のコアのうち選択したコアとは異なる他のコアに割り当て、ソフトウェアの起動要求を受け付けた場合、選択したコアに割り当てられているソフトウェアを他のコアに割り当てた結果、選択したコアに起動要求の対象となるソフトウェアを割り当てるスケジューリングプログラム、マルチコアプロセッサシステム、およびスケジューリング方法が提案される。
【発明の効果】
【０００８】
本発明の一側面によれば、ソフトウェアの起動処理が完了するまでの時間の短縮化を図ることができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施の形態におけるマルチコアプロセッサシステムの動作例を示す説明図である。
【図２】図２は、マルチコアプロセッサシステムのハードウェア構成例を示すブロック図である。
【図３】図３は、マルチコアプロセッサシステムの機能構成例を示す説明図である。
【図４】図４は、システム情報テーブルの記憶内容の一例を示す説明図である。
【図５】図５は、アプリ情報テーブルの記憶内容の一例を示す説明図である。
【図６】図６は、起動用ＣＰＵの選択方法の一例を示す説明図である。
【図７】図７は、スケジューリング処理の動作例を示す説明図（その１）である。
【図８】図８は、スケジューリング処理の動作例を示す説明図（その２）である。
【図９】図９は、スケジューリング処理の動作例を示す説明図（その３）である。
【図１０】図１０は、スケジューリング処理の動作例を示す説明図（その４）である。
【図１１】図１１は、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す説明図（その１）である。
【図１２】図１２は、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す説明図（その２）である。
【図１３】図１３は、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す説明図（その３）である。
【図１４】図１４は、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す説明図（その４）である。
【図１５】図１５は、起動用ＣＰＵの再設定に伴うクロック周波数の変更例を示す説明図（その１）である。
【図１６】図１６は、起動用ＣＰＵの再設定に伴うクロック周波数の変更例を示す説明図（その２）である。
【図１７】図１７は、スケジューリング処理手順の一例を示すフローチャートである。
【図１８】図１８は、アプリ起動時処理手順の一例を示すフローチャートである。
【図１９】図１９は、再スケジューリング処理手順の一例を示すフローチャートである。
【図２０】図２０は、クロック周波数変更処理手順の一例を示すフローチャートである。
【図２１】図２１は、本実施の形態にかかるスケジューリングプログラムの適用例を示す説明図である。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、開示のスケジューリングプログラム、マルチコアプロセッサシステム、およびスケジューリング方法の実施の形態を詳細に説明する。なお、本実施の形態にかかるスケジューリングプログラムを実行する装置の例として、複数のプロセッサを有するマルチコアプロセッサシステムにて説明を行う。マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。また、プロセッサを、以下ＣＰＵとして説明する。
【００１１】
図１は、本実施の形態におけるマルチコアプロセッサシステムの動作例を示す説明図である。マルチコアプロセッサシステム１００は、ＣＰＵ＃０〜ＣＰＵ＃３と、共有メモリ１０１を有する。また、ＣＰＵ＃０〜ＣＰＵ＃３は、それぞれバス１０２により接続されている。
【００１２】
また、図１の（Ａ）では、ＣＰＵ＃０はアプリ０が割り当てられており、ＣＰＵ＃１はアプリ４が割り当てられており、ＣＰＵ＃２はアプリ２が割り当てられており、ＣＰＵ＃３はアプリ３とアプリ５が割り当てられている。
【００１３】
このような状態において、スケジューリングプログラムを実行するＣＰＵ＃０は、ＣＰＵ＃０〜ＣＰＵ＃３の中から、たとえばＣＰＵ＃１を起動用ＣＰＵとして選択する。選択されるＣＰＵは、いずれのＣＰＵであってもよい。次に、ＣＰＵ＃０は、各ＣＰＵに割り当てられているアプリの識別情報をＣＰＵごとに記憶する共有メモリ１０１を参照して、ＣＰＵ＃１に割り当てられているアプリ４を、ＣＰＵ＃０〜ＣＰＵ＃３のうち、ＣＰＵ＃１以外のＣＰＵに割り当てる。図１の（Ａ）の例では、ＣＰＵ＃０は、アプリ４をＣＰＵ＃２に割り当てている。
【００１４】
次に、図１の（Ｂ）では、図１の（Ａ）にて示した状態の後、アプリの起動要求を受け付けた場合を示している。ＣＰＵ＃０は、起動要求の対象となるアプリ１を、起動用ＣＰＵとして選択されたＣＰＵ＃１に割り当てる。ＣＰＵ＃１は、アプリ１以外に割り当てられているアプリが存在しないため、アプリ１の起動処理に特化できるため、アプリ１の起動処理を高速に行うことができる。
【００１５】
このように、ＣＰＵ＃０は、ＣＰＵ群の中からアプリ起動用となる起動用ＣＰＵを選択して、選択した起動用ＣＰＵに割り当てられているアプリを他のコアに移行する。これにより、マルチコアプロセッサシステム１００は、アプリの起動要求時に起動用ＣＰＵがアプリの起動処理に特化できるため、アプリの起動処理が完了するまでの時間の短縮化を図ることができる。以下、図２〜図２１にて、本実施の形態にかかるマルチコアプロセッサシステム１００についての説明を行う。
【００１６】
（マルチコアプロセッサシステム１００のハードウェア）
図２は、マルチコアプロセッサシステムのハードウェア構成例を示すブロック図である。図２において、携帯電話などの携帯端末を想定するマルチコアプロセッサシステム１００は、ＣＰＵｓ２０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、フラッシュＲＯＭ２０４と、フラッシュＲＯＭコントローラ２０５と、フラッシュＲＯＭ２０６を有する。マルチコアプロセッサシステム１００は、さらに、ディスプレイ２０７と、ＩＦ２０８と、キーボード２０９と、クロックジェネレータ２１０と、熱センサ２１１を有する。なお、図１にて示した共有メモリ１０１は、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６といった記憶装置である。また、マルチコアプロセッサシステム１００は、スマートフォン、ＰＨＳ、といった形態電話に適用してもよいし、パーソナルコンピュータに適用してもよい。
【００１７】
ここで、ＣＰＵｓ２０１は、マルチコアプロセッサシステム１００の全体の制御を司る制御装置群である。ＣＰＵｓ２０１は、ＣＰＵ＃０〜ＣＰＵ＃３を含む。さらに、ＣＰＵｓ２０１は、Ｎ個のＣＰＵを含んでいてもよい。Ｎは、２以上の整数である。また、ＣＰＵｓ２０１の各ＣＰＵは、専用のキャッシュメモリを有してもよい。
【００１８】
ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している不揮発性メモリである。ＲＡＭ２０３は、ＣＰＵｓ２０１のワークエリアとして使用される揮発性メモリである。フラッシュＲＯＭ２０４は、書き換え可能な不揮発性メモリであり、たとえば、読出し速度が高速なＮＯＲ型フラッシュメモリである。フラッシュＲＯＭ２０４は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリなどを記憶している。たとえば、ＯＳを更新する場合、マルチコアプロセッサシステム１００は、ＩＦ２０８によって新しいＯＳを受信し、フラッシュＲＯＭ２０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００１９】
フラッシュＲＯＭコントローラ２０５は、ＣＰＵｓ２０１の制御にしたがってフラッシュＲＯＭ２０６に対するデータのリード／ライトを制御する制御装置である。フラッシュＲＯＭ２０６は、書き換え可能な不揮発性メモリであり、たとえば、データの保存、運搬を主に目的とした、ＮＡＮＤ型フラッシュメモリである。フラッシュＲＯＭ２０６は、フラッシュＲＯＭコントローラ２０５の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがＩＦ２０８を通して取得した画像データ、映像データなどや、また本実施の形態にかかるスケジューリングプログラムを記憶してもよい。フラッシュＲＯＭ２０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２０】
ディスプレイ２０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ２０７は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００２１】
ＩＦ２０８は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１２に接続され、ネットワーク２１２を介して他の装置に接続される。そして、ＩＦ２０８は、ネットワーク２１２と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。ＩＦ２０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２２】
キーボード２０９は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２３】
クロックジェネレータ２１０は、ＣＰＵｓ２０１の各ＣＰＵにクロックを供給する回路である。また、クロックジェネレータ２１０が供給するクロック周波数の値は、ＣＰＵｓ２０１から制御可能とする。熱センサ２１１は、ＣＰＵｓ２０１の各ＣＰＵの温度を測定する。ＣＰＵの温度の測定方法は、たとえば、各ＣＰＵの内部にあるサーマルダイオードから値を取得してもよいし、各ＣＰＵのパッケージの外側にある温度計から値を取得してもよい。測定結果は、共有メモリ１０１に記憶される。
【００２４】
（マルチコアプロセッサシステム１００の機能）
次に、マルチコアプロセッサシステム１００の機能について説明する。図３は、マルチコアプロセッサシステムの機能構成例を示す説明図である。マルチコアプロセッサシステム１００は、記憶部３０１と、取得部３０２と、算出部３０３と、検出部３０４と、選択部３０５と、特定部３０６と、第１割当部３０７と、第２割当部３０８と、変更部３０９を含む。制御部となる取得部３０２〜変更部３０９は、記憶装置に記憶されたプログラムをＣＰＵｓ２０１のうち特定のＣＰＵが実行することにより、取得部３０２〜変更部３０９の各機能を実現する。図３では、ＣＰＵ＃０が実行する場合について説明する。また、記憶装置は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などである。または、ＩＦ２０８を経由して他のＣＰＵが実行することにより、取得部３０２〜変更部３０９の各機能を実現してもよい。
【００２５】
また、マルチコアプロセッサシステム１００は、記憶部３０１に含まれるシステム情報テーブル３１１とアプリ情報テーブル３１２にアクセス可能である。システム情報テーブル３１１とアプリ情報テーブル３１２は、記憶部３０１内に含まれる。システム情報テーブル３１１は、複数のＣＰＵの各ＣＰＵに割り当てられているアプリの識別情報をＣＰＵごとに記憶する。システム情報テーブル３１１の詳細は、図４にて後述する。アプリ情報テーブル３１２は、各ＣＰＵに割り当てられているアプリの起動時刻を表す時刻情報を記憶する。アプリ情報テーブル３１２の詳細は、図５にて後述する。システム情報テーブル３１１とアプリ情報テーブル３１２は、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６といった記憶装置に格納されている。
【００２６】
また、図３に示すマルチコアプロセッサシステム１００は、ＣＰＵ＃０にアプリ１が割り当てられており、ＣＰＵ＃１にアプリ４が割り当てられており、ＣＰＵ＃２にアプリ２が割り当てられており、ＣＰＵ＃３に、アプリ３とアプリ５が割り当てられているとする。また、図３では、アプリ１がユーザの操作によって起動されるアプリであるとする。また、本実施の形態にかかるスケジューリングプログラムのスケジュール対象となるソフトウェアはアプリであるが、他のＣＰＵに移行することが可能であれば、ＯＳに含まれる基本ソフトウェアであってもよい。
【００２７】
取得部３０２は、各ＣＰＵの温度の測定結果を取得する。ＣＰＵの温度とは、ＣＰＵの内部にあるサーマルダイオードによって測定された温度でもよいし、ＣＰＵのパッケージの外側の温度であってもよい。たとえば、取得部３０２は、熱センサ２１１による各ＣＰＵの温度の測定結果が格納された共有メモリ１０１から読み出して、各ＣＰＵの温度の測定結果を取得する。
【００２８】
また、取得部３０２は、各ＣＰＵの使用率を取得してもよい。ＣＰＵの使用率とは、ＣＰＵに割り当てられているソフトウェアがＣＰＵを占有している時間の割合である。具体的なＣＰＵの使用率としては、ＣＰＵの単位時間あたりの実行時間の比率を使用率として算出しておく。取得部３０２の機能により、マルチコアプロセッサシステム１００は、起動用ＣＰＵとして選択する際の基準を取得することができる。なお、取得結果は、ＣＰＵ＃０のレジスタまたはキャッシュメモリ、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００２９】
算出部３０３は、システム情報テーブル３１１を参照して、各ＣＰＵに割り当てられているアプリの数をＣＰＵごとに算出する。たとえば、算出部３０３は、ＣＰＵ＃０に割り当てられているアプリが１個、ＣＰＵ＃１に割り当てられているアプリが１個、ＣＰＵ＃２に割り当てられているアプリが１個、ＣＰＵ＃３割り当てられているアプリが２個、というように算出する。また、算出部３０３は、アプリに重みをつけて算出してもよい。たとえば、処理量が多い特定のアプリが、通常のアプリ２個分であるという情報を記憶部３０１に記憶しておき、算出部３０３は、前述の情報を参照して、アプリの数を算出する。算出部３０３の機能により、マルチコアプロセッサシステム１００は、起動用ＣＰＵとして選択する際の基準を算出することができる。なお、算出結果は、ＣＰＵ＃０のレジスタまたはキャッシュメモリ、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００３０】
検出部３０４は、起動要求の対象となるアプリの起動処理が完了したことを検出する。たとえば、検出部３０４は、起動要求の対象となるアプリ１の起動処理が完了したことを検出する。
【００３１】
また、検出部３０４は、操作対象のアプリの実行が終了したことを検出してもよい。なお、操作対象のアプリとは、ユーザによる操作の対象となるアプリである。以下、操作対象のアプリをメインアプリと称する。たとえば、ＣＰＵ＃０は、メインアプリとなったアプリ０の実行が終了したことを検出する。検出部３０４の機能により、マルチコアプロセッサシステム１００は、起動用ＣＰＵを選択する契機、またはメインアプリを特定する契機を検出することができる。なお、検出結果は、ＣＰＵ＃０のレジスタまたはキャッシュメモリ、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００３２】
選択部３０５は、複数のＣＰＵの中からいずれかのＣＰＵを選択する。たとえば、選択部３０５は、ＣＰＵ＃０〜ＣＰＵ＃３のうち、ＣＰＵ＃１を起動用ＣＰＵとして選択する。たとえば、選択部３０５は、初めにＣＰＵ＃０を選択し、次の選択の機会では、ＣＰＵ＃１を選択するというように、固定の順序でＣＰＵを選択してもよいし、ＣＰＵ＃０〜ＣＰＵ＃３のうちランダムで選択してもよい。
【００３３】
また、選択部３０５は、取得部３０２によって取得した各ＣＰＵの温度の測定結果に基づいて、複数のＣＰＵの中からいずれかのＣＰＵを選択してもよい。たとえば、選択部３０５は、取得した各ＣＰＵの温度のうち、最高温度となったＣＰＵを、起動用ＣＰＵとして選択してもよい。また、選択部３０５は、各ＣＰＵの温度の測定結果の時間変化を算出し、温度の上昇度が最も高いＣＰＵを、起動用ＣＰＵとして選択してもよい。または、マルチコアプロセッサシステム１００の開発者が指定した許容温度以上となったＣＰＵを、起動用ＣＰＵとして選択してもよい。許容温度以上となったＣＰＵが複数存在する場合、選択部３０５は、たとえば、温度の上昇度が高いＣＰＵを選択してもよいし、許容温度以上となり続けている時間が長いＣＰＵを選択してもよい。
【００３４】
また、選択部３０５は、取得部３０２によって取得した各コアの使用率に基づいて、複数のＣＰＵの中からいずれかのＣＰＵを選択してもよい。たとえば、選択部３０５は、使用率が最大となったＣＰＵを、起動用ＣＰＵとして選択してもよい。また、選択部３０５は、使用率の時間変化を算出し、使用率の上昇度が最も高いＣＰＵを、起動用ＣＰＵとして選択してもよい。
【００３５】
また、選択部３０５は、算出部３０３によって算出されたＣＰＵごとのアプリの数に基づいて、複数のＣＰＵの中からいずれかのＣＰＵを選択する。たとえば、選択部３０５は、算出されたアプリの数が最も大きい値となったＣＰＵを、起動用ＣＰＵとして選択してもよい。また、選択部３０５は、アプリの数が最も多かったＣＰＵでのアプリ数と、次に多いアプリの数と、が所定の閾値以下である場合に、取得部３０２によって取得する、温度や、使用率を用いて、起動用ＣＰＵを選択してもよい。
【００３６】
また、選択部３０５は、検出部３０４によって起動処理が完了したことが検出された場合、複数のＣＰＵの中からいずれかのＣＰＵを選択してもよい。たとえば、選択部３０５は、検出部３０４がアプリ１の起動処理の完了を検出した場合、ＣＰＵ＃０〜ＣＰＵ＃３のうちいずれかのＣＰＵを起動用ＣＰＵとして選択する。選択部３０５の機能により、マルチコアプロセッサシステム１００は、起動処理に特化するＣＰＵを決定しておくことができる。なお、選択されたＣＰＵの識別情報が、ＣＰＵ＃０のレジスタまたはキャッシュメモリ、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００３７】
特定部３０６は、アプリ情報テーブル３１２を参照して、各ＣＰＵに割り当てられているアプリのうちメインアプリを特定する。アプリの起動時刻とは、起動要求を受け付けた時刻でもよいし、起動処理を開始した時刻でもよいし、起動処理が完了した時刻でもよい。たとえば、特定部３０６は、アプリの起動時刻が最も遅いアプリを、メインアプリとして特定する。または、アプリ情報テーブル３１２が前日以前のアプリの起動時刻を記憶しておき、特定部３０６は、現在時刻の過去方向において最も近い起動時刻となるアプリを、メインアプリとして特定してもよい。これにより、特定部３０６は、いつも同じ時刻に起動されるアプリをメインアプリとして特定できる。
【００３８】
また、アプリ情報テーブル３１２にアプリが起動された回数を記憶しておき、特定部３０６は、起動された回数が最も多いアプリを、メインアプリに特定してもよい。または、特定部３０６は、フォアグラウンドに設定されているアプリをメインアプリとして特定してもよい。
【００３９】
また、特定部３０６は、検出部３０４によってメインアプリの実行を終了したことが検出された場合、アプリ情報テーブル３１２を参照して、各ＣＰＵに割り当てられているアプリのうち新たなメインアプリを特定してもよい。たとえば、検出部３０４によってメインアプリに特定されていたアプリ０の実行を終了したことが検出された場合、特定部３０６は、アプリ情報テーブル３１２を参照して、アプリ１〜アプリ５の中から、新たなメインアプリを特定する。特定部３０６の機能により、マルチコアプロセッサシステム１００は、他のアプリを同時に割り当てたくないアプリを特定できる。なお、特定されたアプリの識別情報が、ＣＰＵ＃０のレジスタまたはキャッシュメモリ、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００４０】
第１割当部３０７は、システム情報テーブル３１１を参照して、選択部３０５が選択したＣＰＵに割り当てられているアプリを、複数のＣＰＵのうち選択したＣＰＵとは異なる他のＣＰＵに割り当てる。たとえば、選択部３０５がＣＰＵ＃１を選択したとする。このとき、第１割当部３０７は、システム情報テーブル３１１を参照して、ＣＰＵ＃１に割り当てられているアプリ４を特定する。続けて、第１割当部３０７は、アプリ４を、ＣＰＵ＃０〜ＣＰＵ＃３のうち、ＣＰＵ＃１とは異なる他のＣＰＵに割り当てる。図３の例では、第１割当部３０７は、アプリ４をＣＰＵ＃２に割り当てる。
【００４１】
また、第１割当部３０７は、システム情報テーブル３１１を参照して、特定部３０６が特定したメインアプリが割り当てられているＣＰＵを特定する。続けて、第１割当部３０７は、特定したＣＰＵに割り当てられているメインアプリ以外の他のアプリを、他のＣＰＵのうちメインアプリが割り当てられているＣＰＵとは異なるＣＰＵに割り当ててもよい。ここで、他のＣＰＵとは、複数のＣＰＵのうち起動用ＣＰＵ以外の他のＣＰＵのことである。
【００４２】
たとえば、特定部３０６によって特定されたメインアプリがアプリ１であり、アプリ１が割り当てられているＣＰＵをＣＰＵ＃０とする。また、図３に図示していないが、ＣＰＵ＃０に、アプリ６が割り当てられているとする。このとき、第１割当部３０７は、アプリ６を、アプリ１が割り当てられているＣＰＵ＃０と、起動用ＣＰＵであるＣＰＵ＃１以外のＣＰＵとなるＣＰＵ＃２またはＣＰＵ＃３のいずれかに割り当てる。
【００４３】
また、第１割当部３０７は、特定部３０６が新たなメインアプリを特定した場合、メインアプリが割り当てられていたＣＰＵに、新たなメインアプリを割り当ててもよい。たとえば、ＣＰＵ＃０に割り当てられていたメインアプリであるアプリ０の実行が終了し、アプリ２が新たなメインアプリとして特定された場合、第１割当部３０７は、アプリ２を、ＣＰＵ＃０に割り当てる。
【００４４】
また、第１割当部３０７は、特定部３０６が新たなメインアプリを特定した場合、新たなメインアプリが割り当てられているＣＰＵを特定する。続けて、第１割当部３０７は、特定したＣＰＵに割り当てられている新たなメインアプリ以外のアプリを、他のＣＰＵのうち特定したＣＰＵとは異なるＣＰＵに割り当ててもよい。たとえば、ＣＰＵ＃０に割り当てられていたメインアプリであるアプリ０の実行が終了し、特定部３０６がアプリ２を新たなメインアプリとして特定したとする。このとき、第１割当部３０７は、アプリ２が割り当てられているＣＰＵ＃２に割り当てられているアプリ２以外のアプリとなるアプリ４を、ＣＰＵ＃２と、起動用ＣＰＵであるＣＰＵ＃１以外のＣＰＵとなるＣＰＵ＃０またはＣＰＵ＃３のいずれかに割り当てる。
【００４５】
第１割当部３０７の機能により、マルチコアプロセッサシステム１００は、起動用ＣＰＵに割り当てられているアプリがなくなるため、起動用ＣＰＵを起動処理に特化させることができる。
【００４６】
第２割当部３０８は、アプリの起動要求を受け付けた場合、選択部３０５が選択したＣＰＵに割り当てられているアプリを、第１割当部３０７が他のＣＰＵに割り当てた結果、選択したＣＰＵに起動要求の対象となるアプリを割り当てる。なお、第１割当部が、選択したＣＰＵに割り当てられているアプリを他のＣＰＵに割り当てたことにより、選択したアプリには、割り当てられているアプリが存在しなくなる。たとえば、第２割当部３０８は、起動要求の対象となるアプリがアプリ１である場合、アプリ１を起動用ＣＰＵであるＣＰＵ＃１に割り当てる。第２割当部３０８の機能により、起動処理に特化できるＣＰＵにアプリを割り当てるため、起動処理が高速化し、ユーザに対する性能を向上できる。
【００４７】
変更部３０９は、選択部３０５が選択したＣＰＵに割り当てられているアプリを、第１割当部３０７が他のＣＰＵに割り当てた場合、選択したＣＰＵのクロック周波数の値を、前述の値より低い値に変更する。たとえば、第１割当部３０７が、起動用ＣＰＵとして選択されたＣＰＵ＃１に割り当てられているアプリ４をＣＰＵ＃２に割り当てたとする。このとき、変更部３０９は、ＣＰＵ＃１のクロック周波数の値を、現在の値より低い値に変更する。なお、変更後のクロック周波数の値は、ＣＰＵ＃１が設定可能な最低のクロック周波数でよい。
【００４８】
また、変更部３０９は、選択したＣＰＵに起動要求の対象となるアプリを割り当てた場合、選択したＣＰＵのクロック周波数の値を、起動要求の対象となるアプリを起動可能なクロック周波数の値に変更する。なお、アプリを起動可能なクロック周波数は、全てのアプリにて同一のクロック周波数であってもよい。または、アプリごとに起動可能なクロック周波数の値をアプリ情報テーブル３１２に記憶しておき、変更部３０９がアプリ情報テーブル３１２を参照して、クロック周波数を変更してもよい。
【００４９】
図４は、システム情報テーブルの記憶内容の一例を示す説明図である。システム情報テーブル３１１は、各ＣＰＵに対する情報を記憶している。図４に示すシステム情報テーブル３１１は、レコード４０１−１〜レコード４０１−４を記憶する。
【００５０】
システム情報テーブル３１１は、ＣＰＵＩＤ、クロック周波数、起動用ＣＰＵフラグ、割当アプリ、温度という５つのフィールドを含む。ＣＰＵＩＤフィールドには、ＣＰＵを識別する識別情報が格納される。クロック周波数フィールドには、対象のＣＰＵに設定されているクロック周波数が格納される。起動用ＣＰＵフラグフィールドには、起動用ＣＰＵか否かを示す識別子が格納される。たとえば、起動用ＣＰＵフラグフィールドに識別子として"１"が格納されていた場合、対象のＣＰＵが起動用ＣＰＵであることを示す。割当アプリフィールドには、対象のＣＰＵに割り当てられているアプリの一覧が格納される。温度フィールドには、対象のＣＰＵの温度が格納される。
【００５１】
たとえば、レコード４０１−１は、ＣＰＵＩＤが＃０となるＣＰＵ＃０について、クロック周波数がｆoverclockであり、起動用ＣＰＵでなく、割り当てられているアプリがアプリ０であり、温度がＴlowである。なお、ｆoverclockは、オーバークロックされたクロック周波数である。
【００５２】
また、レコード４０１−２にて示すｆlowは、ＣＰＵの動作を最低限保証できるクロック周波数である。レコード４０１−３、レコード４０１−４にて示すｆotherは、ｆoverclockとｆlow以外のクロック周波数である。また、ｆotherとｆoverclockとｆlowの関係については、図１４にて後述する。またＴlowと、Ｔhighについては、ＴhighがＴlowより温度が高いことを示す。したがって、図４では、ＣＰＵ＃０〜ＣＰＵ＃３のうち、ＣＰＵ＃１の温度が最も高い。
【００５３】
図５は、アプリ情報テーブルの記憶内容の一例を示す説明図である。アプリ情報テーブル３１２は、各アプリに対する情報を記憶している。図５に示すアプリ情報テーブル３１２は、レコード５０１−１〜レコード５０１−４を記憶する。
【００５４】
アプリ情報テーブル３１２は、アプリＩＤ、起動時刻、メインアプリフラグという３つのフィールドを含む。アプリＩＤフィールドには、アプリを識別する識別情報が格納される。起動時刻フィールドには、対象のアプリが起動した時刻が格納される。メインアプリフラグフィールドには、対象のアプリがメインアプリか否かを示す識別子が格納される。たとえば、メインアプリフラグフィールドに識別子として"１"が格納されていた場合、対象のアプリがメインアプリであることを示す。たとえば、レコード５０１−１は、アプリ０について、起動時刻が"ｍｍ／ｄｄ／ｈｈ：ｍｍ：ｓｓ"であり、メインアプリであることを示す。
【００５５】
図６は、起動用ＣＰＵの選択方法の一例を示す説明図である。ＣＰＵ＃０は、熱センサ２１１によって測定された各ＣＰＵの温度の測定結果を取得する。たとえば、図６の例では、ＣＰＵ＃０は、ＣＰＵ＃０〜ＣＰＵ＃３の各温度を取得する。取得した温度について、ＣＰＵ＃１の温度が高く、ＣＰＵ＃０とＣＰＵ＃２とＣＰＵ＃３の温度が低かったとする。
【００５６】
このとき、ＣＰＵ＃０は、温度が最も高いＣＰＵ＃１を起動用ＣＰＵとして選択する。続けて、ＣＰＵ＃０は、システム情報テーブル３１１について、ＣＰＵ＃１の情報を格納するレコード４０１−２の起動用ＣＰＵフラグフィールドに"１"を設定する。さらに、ＣＰＵ＃０は、レコード４０１−１、レコード４０１−３、レコード４０１−４の起動用ＣＰＵフラグフィールドに"０"を設定する。
【００５７】
なお、起動用ＣＰＵの選択が行われるタイミングは、下記４つのタイミングである。１つ目のタイミングは、システム起動時である。２つ目のタイミングは、アプリが起動完了した時である。３つ目のタイミングは、ＣＰＵ＃０〜ＣＰＵ＃３のいずれかのＣＰＵにて、ＣＰＵの温度が予め指定していた許容温度に到達した時である。４つ目のタイミングは、メインアプリの実行が終了した時である。次に、図７〜図１０を用いて、スケジューリング処理の動作例について説明する。
【００５８】
図７は、スケジューリング処理の動作例を示す説明図（その１）である。図７にて示すマルチコアプロセッサシステム１００は、アプリ０がＣＰＵ＃０に割り当てられており、アプリ２とアプリ４がＣＰＵ＃２に割り当てられており、アプリ３とアプリ５がＣＰＵ＃３に割り当てられている。
【００５９】
このような状態にて、ＣＰＵ＃０は、ユーザからの操作により、アプリ１を起動する。ＣＰＵ＃０は、アプリ１を起動用ＣＰＵであるＣＰＵ＃１に割り当てる。ＣＰＵ＃１は、アプリ１の起動処理を行う。アプリ１の起動完了後、ＣＰＵ＃０は、システム情報テーブル３１１を更新する。具体的には、ＣＰＵ＃０は、レコード４０１−２の割当アプリフィールドに、"アプリ１"を格納する。
【００６０】
図８は、スケジューリング処理の動作例を示す説明図（その２）である。図８にて示すマルチコアプロセッサシステム１００は、アプリ１が起動完了した状態である。このような状態にて、ＣＰＵ＃０は、新たな起動用ＣＰＵを選択する。図８に示す状態において、ＣＰＵ＃０は、温度が最も高いＣＰＵ＃２を起動用ＣＰＵとして選択する。続けて、ＣＰＵ＃０は、システム情報テーブル３１１について、ＣＰＵ＃２の情報を格納するレコード４０１−３の起動用ＣＰＵフラグフィールドに"１"を設定する。さらに、ＣＰＵ＃０は、レコード４０１−１、レコード４０１−２、レコード４０１−４の起動用ＣＰＵフラグフィールドに"０"を設定する。
【００６１】
次に、ＣＰＵ＃０は、メインアプリとなったアプリ１以外となる、アプリ０、アプリ２〜アプリ５を再スケジューリング対象アプリに設定し、再スケジューリング対象アプリに対して再スケジューリング処理を実行する。
【００６２】
なお、図８にて説明した状態は、図６にて示した、２つ目のタイミングであるアプリが起動完了した時である。もし、図８の状態が、１つ目のタイミングとなるシステム起動時であれば、ＣＰＵ＃０は、たとえば温度が最も高いＣＰＵを起動用ＣＰＵとして選択して、図８にて示したシステム情報テーブル３１１の更新処理と再スケジューリング処理を実行する。また、図８の状態が、３つ目のタイミングとなるＣＰＵの温度が許容温度に達した時であれば、ＣＰＵ＃０は、許容温度に達したＣＰＵを起動用ＣＰＵとして選択して、システム情報テーブル３１１の更新処理と再スケジューリング処理を実行する。４つ目のタイミングについては、図１０にて後述する。
【００６３】
図９は、スケジューリング処理の動作例を示す説明図（その３）である。図９にて示すマルチコアプロセッサシステム１００は、図８にて示した再スケジューリング対象アプリに対して再スケジューリング処理を実行した後の状態である。具体的に、ＣＰＵ＃０は、ＣＰＵ＃２に割り当てられていたアプリ２とアプリ４を、ＣＰＵ＃０に割り当てている。
【００６４】
また、ＣＰＵ＃０は、システム情報テーブル３１１の割当アプリフィールドを更新する。具体的には、ＣＰＵ＃０は、レコード４０１−１の割当アプリフィールドに、"アプリ０"、"アプリ４"、"アプリ２"を格納する。また、ＣＰＵ＃０は、レコード４０１−３の割当アプリフィールドを、空白に設定する。なお、レコード４０１−２と、レコード４０１−４の割当アプリフィールドの記憶内容は、図８にて示した内容と同一である。
【００６５】
図１０は、スケジューリング処理の動作例を示す説明図（その４）である。図１０にて示すマルチコアプロセッサシステム１００は、図９にて示した状態から、メインアプリであるアプリ１の実行が終了した状態である。このとき、ＣＰＵ＃０は、各ＣＰＵに割り当てられているアプリから、新たなメインアプリを特定する。たとえば、ＣＰＵ＃０は、アプリ０、アプリ２〜アプリ５のうち、最も起動時刻が遅いアプリ２をメインアプリに特定する。
【００６６】
続けて、ＣＰＵ＃０は、メインアプリに特定されたアプリ２が割り当てられているＣＰＵに、アプリ２以外のアプリが割り当てられていないように設定する。図１０では、ＣＰＵ＃０は、アプリ２を、メインアプリであったアプリ１が割り当てられていたＣＰＵ＃１に移行する。また、ＣＰＵ＃０は、システム情報テーブル３１１の割当アプリフィールドを更新する。具体的には、ＣＰＵ＃０は、レコード４０１−１の割当アプリフィールドに、"アプリ０"、"アプリ４"を格納する。また、ＣＰＵ＃０は、レコード４０１−２の割当アプリフィールドに、"アプリ２"を格納する。
【００６７】
なお、図１０では、ＣＰＵ＃０が、アプリ２をメインアプリであったアプリ１が割り当てられていたＣＰＵ＃１に移行することにより、アプリ２が割り当てられているＣＰＵに、アプリ２以外のアプリが割り当てられていないように設定している。別の割当方法として、ＣＰＵ＃０は、ＣＰＵ＃０に割り当てられているアプリ２以外のアプリ０とアプリ４を、ＣＰＵ＃０とＣＰＵ＃２以外のＣＰＵに割り当ててもよい。
【００６８】
続けて、図１１〜図１４において、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す。また、図１５、図１６において、起動用ＣＰＵの再設定に伴うクロック周波数の変更例を示す。
【００６９】
図１１は、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す説明図（その１）である。初めに、図１１〜図１５に共通する説明として、マスタＣＰＵとなるＣＰＵ＃０は、マスタＯＳ１１０１を実行する。また、ＣＰＵ＃１〜ＣＰＵ＃３は、それぞれ、ＯＳ１１０２、ＯＳ１１０３、ＯＳ１１０４を実行する。また、マスタＯＳ１１０１がアクセスする記憶領域として、ＣＰＵ＃０は、ウェイトキュー１１１１とランキュー１１１２にアクセス可能である。また、ＯＳ１１０２〜ＯＳ１１０４のそれぞれが、アクセスする記憶領域として、ＣＰＵ＃１〜ＣＰＵ＃３は、それぞれ、ランキュー１１１３、ランキュー１１１４、ランキュー１１１５にアクセス可能である。なお、ウェイトキュー１１１１〜ランキュー１１１５は、たとえば、それぞれにアクセスするＣＰＵのキャッシュメモリに存在してもよいし、共有メモリ１０１に存在してもよい。
【００７０】
マスタＯＳ１１０１は、マルチコアプロセッサシステム１００全体の制御を司る。また、マスタＯＳ１１０１は、ＣＰＵ＃０の制御を司る。具体的に、マスタＯＳ１１０１は、ユーザからの起動指示の対象となるアプリを、ＣＰＵ＃０〜ＣＰＵ＃３のいずれかに割り当てる。ＯＳ１１０２〜ＯＳ１１０４は、各ＣＰＵの制御を司る。
【００７１】
ウェイトキュー１１１１は、起動指示を受け付け、起動処理待ちのアプリの識別情報を記憶する記憶領域である。マスタＯＳの機能によりＣＰＵ＃０は、ウェイトキュー１１１１にアプリが挿入された順番に、挿入されたアプリを各ＣＰＵに割り当てる。ランキュー１１１２〜ランキュー１１１５は、各ＣＰＵにて割り当てられたアプリの識別情報を記憶する。各ＣＰＵは、ＣＰＵが実行するアプリをランキューから一つずつ取り出して、取り出したアプリを実行することにより、マルチタスク処理を実現する。また、図１１で示すＣＰＵ＃０〜ＣＰＵ＃３は、クロックジェネレータ２１０の制御により、クロック周波数の値がｆにて動作している。
【００７２】
図１２は、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す説明図（その２）である。図１２に示すマルチコアプロセッサシステム１００は、図１１で示した状態から、起動用ＣＰＵを選択した状態である。ＣＰＵ＃０は、熱センサ２１１によって測定された各ＣＰＵの温度によって、ＣＰＵ＃０〜ＣＰＵ＃３のうち、ＣＰＵ＃１を起動用ＣＰＵとして選択する。
【００７３】
次に、ＣＰＵ＃０は、クロックジェネレータ２１０を制御して、ＣＰＵ＃１のクロック周波数を、ｆからｆlowに変更する。ｆlowは、ＣＰＵ＃１が動作可能なクロック周波数のうち、最低のクロック周波数である。
【００７４】
図１３は、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す説明図（その３）である。図１３に示すマルチコアプロセッサシステム１００は、図１２にて示した状態から、ユーザの操作によりアプリ１の起動要求を受け付けた状態に遷移した場合を示す。ＣＰＵ＃０は、アプリ１の識別情報をウェイトキュー１１１１に格納する。
【００７５】
次に、ＣＰＵ＃０は、アプリ１を起動用ＣＰＵとして選択されたＣＰＵ＃１に割り当てる。続いて、ＣＰＵ＃０は、クロックジェネレータ２１０を制御して、ＣＰＵ＃１のクロック周波数の値を、ｆlowからｆoverclockに変更する。ｆoverclockは、通常設定されているクロック周波数よりも高いクロック周波数の値である。
【００７６】
図１４は、起動用ＣＰＵの設定に伴うクロック周波数の変更例を示す説明図（その４）である。図１４に示すマルチコアプロセッサシステム１００は、図１３にて示した状態から、アプリ１の起動処理が完了した状態に遷移した場合を示す。ＣＰＵ＃０は、ＣＰＵ＃０〜ＣＰＵ＃３のうち、温度が最も高いＣＰＵであるＣＰＵ＃２を新たな起動用ＣＰＵとして選択する。
【００７７】
また、ＣＰＵ＃０は、クロックジェネレータ２１０を制御して、ＣＰＵ＃２のクロック周波数を、ｆからｆlowに変更する。また、ＣＰＵ＃０は、クロックジェネレータ２１０を制御して、ＣＰＵ＃０とＣＰＵ＃３のクロック周波数の値を、ｆからｆotherに変更する。
【００７８】
なお、ＣＰＵ＃１のクロック周波数の値をｆoverclockに変更することにより、マルチコアプロセッサシステム１００の消費電力量が増大してしまう恐れがある。したがって、図１４に示すマルチコアプロセッサシステム１００は、ＣＰＵ＃０、ＣＰＵ＃２とＣＰＵ＃３のクロック周波数を変更することにより、マルチコアプロセッサシステム１００の消費電力量の増大を抑制している。ＣＰＵの消費電力量Ｐ（ｆ）は、ＣＰＵの電源電圧をＶddとし、Ｃを比例定数とすると、下記式を用いて表現できる。
【００７９】
Ｐ（ｆ）＝Ｃ（Ｖdd）2ｆ
【００８０】
ＣＰＵ＃０は、下記（１）式が成り立つように、ｆotherを決定する。
【００８１】
Ｐ（ｆoverclock）＋Ｐ（ｆlow）＋ΣnＰ（ｆother）＝ＮＰ（ｆ）  …（１）
【００８２】
（１）式にて、ｎは、ＣＰＵの個数Ｎから、クロック周波数の値が、ｆoverclockまたはｆlowに変更されたＣＰＵの個数を引いた数となる。
【００８３】
（１）式が成り立つｆotherを設定することにより、マルチコアプロセッサシステム１００は、消費電力量の増大を抑制しつつ、ユーザに対する性能を向上できる。
【００８４】
図１５は、起動用ＣＰＵの再設定に伴うクロック周波数の変更例を示す説明図（その１）である。図１５に示すマルチコアプロセッサシステム１００は、ＣＰＵ＃０にアプリ０が割り当てられており、ＣＰＵ＃１にアプリ１が割り当てられており、ＣＰＵ＃２にアプリ２が割り当てられており、ＣＰＵ＃３にアプリ３が割り当てられている。
【００８５】
このような状態において、ＣＰＵ＃０は、たとえば、メインアプリをアプリ０に特定する。次に、ＣＰＵ＃０は、たとえば、ＣＰＵ＃０〜ＣＰＵ＃３のうちＣＰＵ＃１を起動用ＣＰＵとして選択する。続けて、ＣＰＵ＃０は、クロックジェネレータ２１０を制御して、ＣＰＵ＃０のクロック周波数を、ｆlowからｆoverclockに変更する。また、ＣＰＵ＃０は、クロックジェネレータ２１０を制御して、ＣＰＵ＃１のクロック周波数を、ｆotherからｆlowに変更する。
【００８６】
次に、ＣＰＵ＃０は、起動用ＣＰＵとして選択されたＣＰＵ＃１に割り当てられているアプリ１を、ＣＰＵ＃２またはＣＰＵ＃３のいずれかに割り当てる。図１５の例では、ＣＰＵ＃０は、アプリ１をＣＰＵ＃２に割り当てる。割り当てられたアプリ１の識別情報が、ランキュー１１１４に格納される。
【００８７】
図１６は、起動用ＣＰＵの再設定に伴うクロック周波数の変更例を示す説明図（その２）である。図１６に示すマルチコアプロセッサシステム１００は、図１５に示した状態から、新たなアプリの起動要求を受け付けた状態に遷移した場合を示す。図１６にて、ＣＰＵ＃０は、新たにアプリ５の起動要求を受け付けている。受け付けたアプリ５の識別情報が、ウェイトキュー１１１１に格納されている。
【００８８】
ＣＰＵ＃０は、アプリ５を起動用ＣＰＵであるＣＰＵ＃１に割り当てる。続けて、ＣＰＵ＃０は、クロックジェネレータ２１０を制御して、ＣＰＵ＃１のクロック周波数を、ｆlowからｆoverclockに変更する。また、ＣＰＵ＃０は、アプリ５の起動完了後、アプリ５をメインアプリに設定する。この時点で、アプリ０がメインアプリでなくなったため、ＣＰＵ＃０は、ＣＰＵ＃０のクロック周波数を、ｆoverclockからｆotherに変更する。
【００８９】
続けて、図７〜図１６にて説明した動作を行うスケジューリング処理のフローチャートを、図１７〜図２０を用いて説明する。スケジューリング処理を実行するＣＰＵは、ＣＰＵ＃０〜ＣＰＵ＃３のうちいずれのＣＰＵであってもよい。本実施の形態では、ＣＰＵ＃０がスケジューリング処理を実行する場合を例にして説明する。
【００９０】
図１７は、スケジューリング処理手順の一例を示すフローチャートである。スケジューリング処理は、アプリを割り当てるＣＰＵを決定する処理である。初めに、ＣＰＵ＃０は、熱センサ２１１の測定結果を用いて、温度が最も高いＣＰＵを特定する（ステップＳ１７０１）。次に、ＣＰＵ＃０は、ＣＰＵ＃０〜ＣＰＵ＃３のうち、特定したＣＰＵを起動用ＣＰＵとして選択する（ステップＳ１７０２）。続いて、ＣＰＵ＃０は、クロックジェネレータ２１０により、各ＣＰＵのクロック周波数をｆlowに変更する（ステップＳ１７０３）。
【００９１】
次に、ＣＰＵ＃０は、何らかのイベントを検出したか否かを判断する（ステップＳ１７０４）。アプリ起動要求イベントを検出した場合（ステップＳ１７０４：アプリ起動要求イベント）、ＣＰＵ＃０は、アプリ起動時処理を実行する（ステップＳ１７０５）。アプリ起動時処理の詳細は、図１８にて後述する。ステップＳ１７０５の実行終了後、ＣＰＵ＃０は、ステップＳ１７０４の処理に移行する。
【００９２】
ＣＰＵ許容温度到達イベントを検出した場合（ステップＳ１７０４：ＣＰＵ許容温度到達イベント）、ＣＰＵ＃０は、許容温度に到達したＣＰＵを起動用ＣＰＵとして選択する（ステップＳ１７０６）。なお、ＣＰＵ許容温度到達イベントとは、ＣＰＵ＃０〜ＣＰＵ＃３のうち、許容温度に到達したＣＰＵを検出したというイベントである。具体的な検出方法としては、ＣＰＵ＃０は、熱センサ２１１による測定結果を定期的に読み出して、許容温度以上となったＣＰＵがあれば、スケジューリングプログラムに通知する。
【００９３】
続けて、ＣＰＵ＃０は、再スケジューリング処理を実行する（ステップＳ１７０７）。再スケジューリング処理の詳細は、図１９にて後述する。次に、ＣＰＵ＃０は、クロック周波数変更処理を実行する（ステップＳ１７０８）。クロック周波数変更処理の詳細は、図２０にて後述する。ステップＳ１７０８の処理終了後、ＣＰＵ＃０は、ステップＳ１７０４の処理に移行する。
【００９４】
メインアプリ実行終了イベントを検出した場合（ステップＳ１７０４：メインアプリ実行終了イベント）、ＣＰＵ＃０は、アプリ情報テーブル３１２を参照して、起動時刻が最も遅いアプリをメインアプリに特定する（ステップＳ１７０９）。続けて、ＣＰＵ＃０は、再スケジューリング処理を実行する（ステップＳ１７１０）。ステップＳ１７１０の処理終了後、ＣＰＵ＃０は、ステップＳ１７０４の処理に移行する。なお、ステップＳ１７１０の終了後、ＣＰＵ＃０は、クロック周波数の変更を行ってもよい。具体的には、メインアプリが割り当てられたＣＰＵのクロック周波数をｆoverclockに変更する。続けて、メインアプリが割り当てられているＣＰＵと起動用ＣＰＵ以外のＣＰＵのクロック周波数を、ｆotherに変更する。
【００９５】
スケジューリング処理終了イベントを検出した場合（ステップＳ１７０４：スケジューリング処理終了イベント）、ＣＰＵ＃０は、スケジューリング処理を終了する。また、イベント発生していない場合（ステップＳ１７０４：Ｎｏ）、一定時間経過後、ＣＰＵ＃０は、ステップＳ１７０４の処理に移行する。スケジューリング処理の機能により、マルチコアプロセッサシステム１００は、起動用ＣＰＵまたはメインアプリが変更するイベントを検出して、それぞれのユーザに対する性能を向上させるための処理を実行できる。
【００９６】
図１８は、アプリ起動時処理手順の一例を示すフローチャートである。アプリ起動時処理は、アプリ起動イベントを検出した時に実行される処理である。なお、図１８の処理にて起動するアプリは、アプリ起動イベント内の引数にて指定されている起動要求の対象となるアプリである。
【００９７】
ＣＰＵ＃０は、起動用ＣＰＵに、起動要求の対象となるアプリを割り当てる（ステップＳ１８０１）。次に、ＣＰＵ＃０は、起動用ＣＰＵのクロック周波数を、ｆoverclockに変更する（ステップＳ１８０２）。続けて、ＣＰＵ＃０は、起動要求の対象となるアプリの起動処理を実行する（ステップＳ１８０３）。次に、ＣＰＵ＃０は、起動処理が完了したことを検出する（ステップＳ１８０４）。起動処理が完了しない間、ＣＰＵ＃０は、起動処理が完了することを待ち続ける。
【００９８】
起動処理の実行後、ＣＰＵ＃０は、起動処理が完了したアプリをメインアプリに特定する（ステップＳ１８０５）。次に、ＣＰＵ＃０は、熱センサ２１１の測定結果を用いて、温度が最も高いＣＰＵを特定する（ステップＳ１８０６）。続けて、ＣＰＵ＃０は、特定したＣＰＵを起動用ＣＰＵとして選択する（ステップＳ１８０７）。なお、ステップＳ１８０７の処理にて選択されるＣＰＵは、ステップＳ１８０２における起動用ＣＰＵとは異なるＣＰＵになり易い。異なるＣＰＵとなる理由として、ステップＳ１８０２における起動用ＣＰＵは、アプリを実行しておらず、クロック周波数もｆlowに変更されていたため、温度が低くなっているためである。
【００９９】
次に、ＣＰＵ＃０は、再スケジューリング処理を実行する（ステップＳ１８０８）。続けて、ＣＰＵ＃０は、クロック周波数変更処理を実行する（ステップＳ１８０９）。ステップＳ１８０９の処理実行後、ＣＰＵ＃０は、アプリ起動時処理を終了する。アプリ起動時処理により、マルチコアプロセッサシステム１００は、アプリ起動要求イベントに伴う起動用ＣＰＵの選択とメインアプリの特定を行うことができる。
【０１００】
図１９は、再スケジューリング処理手順の一例を示すフローチャートである。再スケジューリング処理は、起動用ＣＰＵが選択された場合、またはメインアプリが特定された場合に、アプリの割当を変更する処理である。
【０１０１】
ＣＰＵ＃０は、メインアプリ以外のアプリ群のスケジューリングをＣＰＵ数が３個以上か否かに応じて決定する（ステップＳ１９０１）。ＣＰＵ数が３個以上である場合（ステップＳ１９０１：Ｙｅｓ）、ＣＰＵ＃０は、メインアプリが割り当てられているＣＰＵと起動用ＣＰＵ以外のＣＰＵ群に、負荷分散スケジューリングする（ステップＳ１９０２）。負荷分散スケジューリングとは、各ＣＰＵの負荷量が均等になるようにアプリを割り当てる処理である。ＣＰＵ数が３個未満である場合（ステップＳ１９０１：Ｎｏ）、ＣＰＵ＃０は、起動用ＣＰＵではないＣＰＵにアプリ群を割り当てる（ステップＳ１９０３）。
【０１０２】
ステップＳ１９０２、またはステップＳ１９０３の処理終了後、ＣＰＵ＃０は、システム情報テーブル３１１の割当済アプリフィールドを、アプリの割当結果に基づいて更新する（ステップＳ１９０４）。ステップＳ１９０４の処理終了後、ＣＰＵ＃０は、再スケジューリング処理を終了する。再スケジューリング処理により、マルチコアプロセッサシステム１００は、起動用ＣＰＵを起動処理に特化させることができ、また、メインアプリが割り当てられているＣＰＵを、メインアプリの実行に特化することができる。
【０１０３】
図２０は、クロック周波数変更処理手順の一例を示すフローチャートである。クロック周波数変更処理は、起動用ＣＰＵが選択された場合に、各ＣＰＵのクロック周波数を変更する処理である。
【０１０４】
ＣＰＵ＃０は、起動用ＣＰＵのクロック周波数を、ｆlowに変更する（ステップＳ２００１）。次に、ＣＰＵ＃０は、メインアプリが割り当てられているＣＰＵと起動用ＣＰＵ以外のＣＰＵのクロック周波数を、ｆotherに変更する（ステップＳ２００２）。続いて、ＣＰＵ＃０は、システム情報テーブル３１１のクロック周波数フィールドを更新する（ステップＳ２００３）。クロック周波数変更処理により、マルチコアプロセッサシステム１００は、温度が高くなっていたＣＰＵのクロック周波数を低下させることになるため、ＣＰＵの温度を下げることができる。
【０１０５】
図２１は、本実施の形態にかかるスケジューリングプログラムの適用例を示す説明図である。本実施の形態として、携帯電話などの携帯端末を想定している。図２１において、携帯電話システム２１００の各部の動作は図２と同様である。具体的に、形態電話システム２１００は、ＣＰＵｓ２１０１、ＲＯＭ２１０２、ＲＡＭ２１０３、フラッシュＲＯＭ２１０４、フラッシュＲＯＭコントローラ２１０５、フラッシュＲＯＭ２１０６を有する。さらに、形態電話システム２１００は、ディスプレイ２１０７、ＩＦ２１０８、キーボード２１０９、クロックジェネレータ２１１０、熱センサ２１１１を有する。各部は、バス２１１２にて相互に接続されている。
【０１０６】
携帯電話システム２１００上で、たとえば、音楽を聴きながらインターネットブラウジングを行っている状況を想定する。このとき、ＣＰＵ＃１とＣＰＵ＃２において音楽再生処理２１２１とブラウザ処理２１２２がそれぞれ実行されている。
【０１０７】
本実施の携帯で説明したマルチコアプロセッサシステム１００として、携帯電話システム２１００は、スケジューリングプログラムを実行する。たとえば、ＣＰＵ＃０が起動用ＣＰＵに設定されていたとする。このとき、携帯電話システム２１００が携帯システム２１００を使用しているユーザの指示によりゲームアプリを起動した場合、ゲーム処理２１２３がＣＰＵ＃０に割り当てられる。このとき、ＣＰＵ＃０は、オーバークロックされ、かつ、起動要求の対象となるゲーム処理２１２３の処理に特化できるため、携帯電話システム２１００はユーザに対する性能を向上できる。
【０１０８】
以上説明したように、マルチコアプロセッサシステム１００は、ＣＰＵ群の中からアプリ起動用となる起動用ＣＰＵを選択し、起動用ＣＰＵに割り当てられているアプリを他のＣＰＵに移行する。これにより、アプリの起動要求時、起動用ＣＰＵがアプリの起動処理に特化できるため、マルチコアプロセッサシステム１００は、アプリの起動処理が完了するまでの時間を短縮化できる。アプリの起動処理が完了するまでの時間が短縮化することにより、たとえば、起動要求を行ったユーザの待ち時間が短縮されるため、ユーザに対する性能を向上できる。
【０１０９】
また、マルチコアプロセッサシステム１００は、各ＣＰＵの温度に基づいて起動用ＣＰＵを選択してもよい。ＣＰＵの負荷量が多く温度が上昇したＣＰＵを起動用ＣＰＵとして選択することにより、割り当てられているアプリが他のＣＰＵに移行し、起動用ＣＰＵの負荷量が低減するため、マルチコアプロセッサシステム１００は、ＣＰＵの温度を低下させることができる。
【０１１０】
また、マルチコアプロセッサシステム１００は、各ＣＰＵの使用率に基づいて起動用ＣＰＵを選択してもよい。ＣＰＵの使用率が高いと、ＣＰＵの温度も上昇している可能性が高い。たとえば、ＣＰＵの使用率が高いＣＰＵを起動用ＣＰＵとして選択することにより、割り当てられているアプリが他のＣＰＵに移行し、起動用ＣＰＵの負荷量が低減する。したがって、マルチコアプロセッサシステム１００は、温度が上昇しているＣＰＵの温度を低下させることができる。
【０１１１】
また、マルチコアプロセッサシステム１００は、各ＣＰＵに割り当てられているアプリの数に基づいて、起動用ＣＰＵを選択してもよい。ＣＰＵに割り当てられているアプリの数が多いと、ＣＰＵの負荷量が増大して、ＣＰＵの温度も上昇している可能性が高い。たとえば、割り当てられているアプリの数が多いＣＰＵを起動用ＣＰＵとして選択することにより、割り当てられているアプリが他のＣＰＵに移行し、起動用ＣＰＵの負荷量が低減する。したがって、マルチコアプロセッサシステム１００は、温度が上昇しているＣＰＵの温度を低下させることができる。
【０１１２】
また、マルチコアプロセッサシステム１００は、起動用ＣＰＵとして選択されたＣＰＵに割り当てられていたアプリを他のＣＰＵに割り当てた場合、起動用ＣＰＵのクロック周波数を、現在の値より低下させてもよい。アプリを他のＣＰＵに割り当てたことにより、起動用ＣＰＵの負荷量が減少し、低いクロック周波数でも起動用ＣＰＵが動作できる。また、起動用ＣＰＵのクロック周波数が低下したことにより、起動用ＣＰＵの温度を低下させることができる。ＣＰＵの温度が低下することにより、マルチコアプロセッサシステム１００は、熱暴走を防ぐことができる。また、マルチコアプロセッサシステム１００は、熱によるパッケージの破損を防止できる。
【０１１３】
また、マルチコアプロセッサシステム１００は、起動要求となるアプリを割り当てた場合、起動用ＣＰＵを、起動要求の対象となるアプリを起動可能なクロック周波数の値に変更してもよい。これにより、マルチコアプロセッサシステム１００は、クロック周波数の値が低く変更されており、アプリを起動できない状態から、起動処理を実行できる状態に変更できる。
【０１１４】
また、マルチコアプロセッサシステム１００は、起動要求の対象となるアプリの起動処理が完了した場合、新たな起動用ＣＰＵを選択してもよい。アプリの起動処理が完了すると、起動用ＣＰＵにアプリが割り当てられた状態となるため、マルチコアプロセッサシステム１００は、新たな起動用ＣＰＵを選択しておくことにより、新たな起動要求に対して、ユーザに対する性能が向上できるように準備できる。
【０１１５】
また、マルチコアプロセッサシステム１００は、アプリの起動時刻に基づいて、メインアプリを特定する。続けて、マルチコアプロセッサシステム１００は、メインアプリを割り当てているＣＰＵに割り当てられているメインアプリ以外のアプリを、メインアプリを割り当てているＣＰＵと起動用ＣＰＵ以外のＣＰＵに割り当ててもよい。本実施の形態では、起動用ＣＰＵにアプリを割り当てないようにしたため、他のＣＰＵの負荷量が増大し、ユーザが操作するメインアプリが割り当てられているＣＰＵも負荷量が増大するため、メインアプリの割当時間が短くなり、ユーザに対する性能が低下する。したがって、ユーザが操作するメインアプリが割り当てられているＣＰＵには、メインアプリ以外のアプリを割り当てないことにより、メインアプリの処理に特化できるため、マルチコアプロセッサシステム１００は、ユーザに対する性能の低下を抑制できる。
【０１１６】
また、マルチコアプロセッサシステム１００は、メインアプリの実行が終了したことを検出した場合、新たなメインアプリを特定し、終了したメインアプリが割り当てられていたＣＰＵに、新たなメインアプリを割り当ててもよい。これにより、新たなメインアプリが割り当てられているＣＰＵには、メインアプリ以外のアプリを割り当てないことになり、新たなメインアプリの処理に特化できるため、マルチコアプロセッサシステム１００は、ユーザに対する性能の低下を抑制できる。また、前述の方法は、新たなメインアプリ１つを移行するだけで済む。また、終了したメインアプリを高速に動作させるため、メインアプリが割り当てられていたＣＰＵがオーバークロックしていた場合、マルチコアプロセッサシステム１００は、クロック周波数を変更せずに新たなメインアプリも高速に動作させることができる。
【０１１７】
また、マルチコアプロセッサシステム１００は、メインアプリの実行が終了したことを検出した場合、新たなメインアプリを特定し、新たなメインアプリを割り当てているＣＰＵに割り当てられている他のアプリを、起動用ＣＰＵ以外に割り当ててもよい。これにより、新たなメインアプリが割り当てられているＣＰＵには、メインアプリ以外のアプリを割り当てないことになり、新たなメインアプリの処理に特化できるため、マルチコアプロセッサシステム１００は、ユーザに対する性能の低下を抑制できる。前述の方法は、新たなメインアプリの再割当をせずに済む。
【０１１８】
なお、本実施の形態で説明したスケジューリング方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本スケジューリングプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本スケジューリングプログラムは、インターネット等のネットワークを介して配布してもよい。
【０１１９】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１２０】
（付記１）複数のコアのうち特定のコアに、
前記複数のコアの中からいずれかのコアを選択し、
前記複数のコアの各コアに割り当てられているソフトウェアの識別情報をコアごとに記憶する記憶部を参照して、前記選択したコアに割り当てられているソフトウェアを、前記複数のコアのうち前記選択したコアとは異なる他のコアに割り当て、
ソフトウェアの起動要求を受け付けた場合、前記選択したコアに割り当てられているソフトウェアを前記他のコアに割り当てた結果、前記選択したコアに前記起動要求の対象となるソフトウェアを割り当てる、
処理を実行させることを特徴とするスケジューリングプログラム。
【０１２１】
（付記２）前記特定のコアに、
前記各コアの温度の測定結果を取得する処理を実行させ、
前記選択する処理は、
前記取得した各コアの温度の測定結果に基づいて、前記複数のコアの中からいずれかのコアを選択することを特徴とする付記１に記載のスケジューリングプログラム。
【０１２２】
（付記３）前記特定のコアに、
前記各コアの使用率を取得する処理を実行させ、
前記選択する処理は、
前記取得した各コアの使用率に基づいて、前記複数のコアの中からいずれかのコアを選択することを特徴とする付記１に記載のスケジューリングプログラム。
【０１２３】
（付記４）前記特定のコアに、
前記記憶部を参照して、前記各コアに割り当てられているソフトウェアの数を前記コアごとに算出する処理を実行させ、
前記選択する処理は、
前記算出したコアごとのソフトウェアの数に基づいて、前記複数のコアの中からいずれかのコアを選択することを特徴とする付記１に記載のスケジューリングプログラム。
【０１２４】
（付記５）前記特定のコアに、
前記選択したコアに割り当てられているソフトウェアを前記他のコアに割り当てた場合、前記選択したコアのクロック周波数の値を当該値より低い値に変更する処理を実行させることを特徴とする付記１〜４のいずれか一つに記載のスケジューリングプログラム。
【０１２５】
（付記６）前記特定のコアに、
前記選択したコアに前記起動要求の対象となるソフトウェアを割り当てた場合、前記選択したコアのクロック周波数の値を、前記起動要求の対象となるソフトウェアを起動可能なクロック周波数の値に変更する処理を実行させることを特徴とする付記１〜５のいずれか一つに記載のスケジューリングプログラム。
【０１２６】
（付記７）前記特定のコアに、
前記起動要求の対象となるソフトウェアの起動処理が完了したことを検出し、
前記起動処理が完了したことを検出した場合、前記複数のコアの中からいずれかのコアを選択し、
前記記憶部を参照して、前記選択したコアに割り当てられているソフトウェアを、前記複数のコアのうち前記選択したコアとは異なるコアに割り当て、
ソフトウェアの起動要求を受け付けた場合、前記選択したコアに割り当てられているソフトウェアを前記複数のコアのうち前記選択したコアとは異なるコアに割り当てた結果、前記選択したコアに前記起動要求の対象となるソフトウェアを割り当てる処理を実行させることを特徴とする付記１〜６のいずれか一つに記載のスケジューリングプログラム。
【０１２７】
（付記８）前記記憶部は、前記各コアに割り当てられているソフトウェアの起動時刻を表す時刻情報を記憶しており、
前記特定のコアに、
前記記憶部に記憶されている前記各コアに割り当てられているソフトウェアの起動時刻を表す時刻情報を参照して、前記各コアに割り当てられているソフトウェアのうち操作対象のソフトウェアを特定し、
前記記憶部に記憶されている前記コアごとのソフトウェアの識別情報を参照して、前記特定した操作対象のソフトウェアが割り当てられているコアに割り当てられている前記操作対象のソフトウェア以外の他のソフトウェアを、前記他のコアのうち前記操作対象のソフトウェアが割り当てられているコアとは異なるコアに割り当てる処理を実行させることを特徴とする付記１〜７のいずれか一つに記載のスケジューリングプログラム。
【０１２８】
（付記９）前記特定のコアに、
前記操作対象のソフトウェアの実行が終了したことを検出し、
前記操作対象のソフトウェアの実行が終了したことを検出した場合、前記記憶部に記憶されている前記各コアに割り当てられているソフトウェアの起動時刻を表す時刻情報を参照して、前記各コアに割り当てられているソフトウェアのうち新たな操作対象のソフトウェアを特定し、
前記新たな操作対象のソフトウェアを特定した場合、前記操作対象のソフトウェアが割り当てられていたコアに、前記新たな操作対象のソフトウェアを割り当てる処理を実行させることを特徴とする付記８に記載のスケジューリングプログラム。
【０１２９】
（付記１０）前記特定のコアに、
前記操作対象のソフトウェアの実行が終了したことを検出し、
前記操作対象のソフトウェアの実行が終了したことを検出した場合、前記記憶部に記憶されている時刻情報を参照して、前記各コアに割り当てられているソフトウェアのうち新たな操作対象のソフトウェアを特定し、
前記新たな操作対象のソフトウェアを特定した場合、前記新たな操作対象のソフトウェアが割り当てられているコアに割り当てられている前記新たな操作対象のソフトウェア以外のソフトウェアを、前記他のコアのうち前記新たな操作対象のソフトウェアが割り当てられているコアとは異なるコアに割り当てる処理を実行させることを特徴とする付記８に記載のスケジューリングプログラム。
【０１３０】
（付記１１）複数のコアの中からいずれかのコアを選択する選択部と、
前記複数のコアの各コアに割り当てられているソフトウェアの識別情報をコアごとに記憶する記憶部を参照して、前記選択部が選択したコアに割り当てられているソフトウェアを、前記複数のコアのうち前記選択したコアとは異なる他のコアに割り当てる第１の割当部と、
ソフトウェアの起動要求を受け付けた場合、前記選択したコアに割り当てられているソフトウェアを前記第１の割当部が前記他のコアに割り当てた結果、前記選択したコアに前記起動要求の対象となるソフトウェアを割り当てる第２の割当部と、
を有することを特徴とするマルチコアプロセッサシステム。
【０１３１】
（付記１２）複数のコアのうち特定のコアが、
前記複数のコアの中からいずれかのコアを選択し、
前記複数のコアの各コアに割り当てられているソフトウェアの識別情報をコアごとに記憶する記憶部を参照して、前記選択したコアに割り当てられているソフトウェアを、前記複数のコアのうち前記選択したコアとは異なる他のコアに割り当て、
ソフトウェアの起動要求を受け付けた場合、前記選択したコアに割り当てられているソフトウェアを前記他のコアに割り当てた結果、前記選択したコアに前記起動要求の対象となるソフトウェアを割り当てる、
処理を実行することを特徴とするスケジューリング方法。
【符号の説明】
【０１３２】
＃０〜＃３  ＣＰＵ
０〜５  アプリ
１００  マルチコアプロセッサシステム
１０１  共有メモリ
３０１  記憶部
３０２  取得部
３０３  算出部
３０４  検出部
３０５  選択部
３０６  特定部
３０７  第１割当部
３０８  第２割当部
３０９  変更部
３１１  システム情報テーブル
３１２  アプリ情報テーブル
【国際調査報告】
2013140518.tif 000024
2013140518.tif 000025
2013140518.tif 000026
2013140518.tif 000027