(57)【要約】  第２のスレッドの実行時間と第１のスレッドの単位時間当たりの待機電力とを乗算することにより、第２のスレッドのつぎに第１のスレッドが実行された場合の第１のスレッドの待機電力を算出する。そして、第１のスレッドの実行時間と前記第２のスレッドの単位時間当たりの待機電力とを乗算することにより、第１のスレッドのつぎに第２のスレッドが実行された場合の第２のスレッドの待機電力を算出する。第１のスレッドの待機電力と第２のスレッドの待機電力とを比較し、比較結果に基づいて第１のスレッドと第２のスレッドとの実行順を決定する。
2012066620.tif 000002
【特許請求の範囲】
【請求項１】
未実行の第１のスレッドと未実行の第２のスレッドとを検出する検出手段と、
前記検出手段により検出された第２のスレッドの実行時間と前記検出手段により検出された第１のスレッドの単位時間当たりの待機電力とを乗算することにより、前記第２のスレッドのつぎに前記第１のスレッドが実行された場合の前記第１のスレッドの待機電力を算出する第１の算出手段と、
前記第１のスレッドの実行時間と前記第２のスレッドの単位時間当たりの待機電力とを乗算することにより、前記第１のスレッドのつぎに前記第２のスレッドが実行された場合の前記第２のスレッドの待機電力を算出する第２の算出手段と、
前記第１の算出手段により算出された第１のスレッドの待機電力と前記第２の算出手段により算出された第２のスレッドの待機電力とを比較する比較手段と、
前記比較手段により比較された比較結果に基づいて前記第１のスレッドと前記第２のスレッドとの実行順を決定する決定手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記決定手段は、
前記比較手段により前記第１のスレッドの待機電力が前記第２のスレッドの待機電力以上であると比較された場合、前記実行順を前記第１のスレッドのつぎに前記第２のスレッドとすることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記決定手段は、
前記比較手段により前記第１のスレッドの待機電力が前記第２のスレッドの待機電力未満であると比較された場合、前記実行順を前記第２のスレッドのつぎに前記第１のスレッドとすることを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記検出手段により検出された第１のスレッドに実行期限が定義されている場合、前記第１のスレッドの生成時刻から前記実行期限までの時間と、前記第１のスレッドの実行時間との差分時間を算出する差分算出手段と、
前記差分算出手段により算出された差分時間が前記第２のスレッドの実行時間より大きいか否かを判断する判断手段と、
前記第１の算出手段は、
前記判断手段により前記差分時間が前記第２のスレッドの実行時間より大きいと判断された場合、前記第２のスレッドの実行時間と前記第１のスレッドの単位時間当たりの待機電力とを乗算することにより、前記第１のスレッドの待機電力を算出し、
前記第２の算出手段は、
前記判断手段により前記差分時間が前記第２のスレッドの実行時間より大きいと判断された場合、前記第１のスレッドの実行時間と前記第２のスレッドの単位時間当たりの待機電力とを乗算することにより、前記第２のスレッドの待機電力を算出することを特徴とする請求項１または２に記載の情報処理装置。
【請求項５】
前記決定手段は、
前記判断手段により前記差分時間が前記第２のスレッドの実行時間以下であると判断された場合、前記実行順を前記第１のスレッドのつぎに前記第２のスレッドとすることを特徴等する請求項３に記載の情報処理装置。
【請求項６】
未実行の第１のスレッドと未実行の第２のスレッドとを検出する検出工程と、
前記検出工程により検出された第２のスレッドの実行時間と前記検出工程により検出された第１のスレッドの単位時間当たりの待機電力とを乗算することにより、前記第２のスレッドのつぎに前記第１のスレッドが実行された場合の前記第１のスレッドの待機電力を算出する第１の算出工程と、
前記第１のスレッドの実行時間と前記第２のスレッドの単位時間当たりの待機電力とを乗算することにより、前記第１のスレッドのつぎに前記第２のスレッドが実行された場合の前記第２のスレッドの待機電力を算出する第２の算出工程と、
前記第１の算出工程により算出された第１のスレッドの待機電力と前記第２の算出工程により算出された第２のスレッドの待機電力とを比較する比較工程と、
前記比較工程により比較された比較結果に基づいて前記第１のスレッドと前記第２のスレッドとの実行順を決定する決定工程と、
をコンピュータに実行させることを特徴とする情報処理プログラム。
【請求項７】
未実行の第１のスレッドと未実行の第２のスレッドとを検出する検出工程と、
前記検出工程により検出された第２のスレッドの実行時間と前記検出工程により検出された第１のスレッドの単位時間当たりの待機電力とを乗算することにより、前記第２のスレッドのつぎに前記第１のスレッドが実行された場合の前記第１のスレッドの待機電力を算出する第１の算出工程と、
前記第１のスレッドの実行時間と前記第２のスレッドの単位時間当たりの待機電力とを乗算することにより、前記第１のスレッドのつぎに前記第２のスレッドが実行された場合の前記第２のスレッドの待機電力を算出する第２の算出工程と、
前記第１の算出工程により算出された第１のスレッドの待機電力と前記第２の算出工程により算出された第２のスレッドの待機電力とを比較する比較工程と、
前記比較工程により比較された比較結果に基づいて前記第１のスレッドと前記第２のスレッドとの実行順を決定する決定工程と、
をコンピュータが実行することを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スレッドの実行を制御する情報処理装置、情報処理プログラム、および情報処理方法に関する。
【背景技術】
【０００２】
従来、シングルコアプロセッサシステムやマルチコアプロセッサシステムの各ＣＰＵにおいて、複数のスレッドが割り当てられた場合、たとえば、スレッドごとに定義された優先度により実行順を決定する技術（第１の従来技術）が知られている（たとえば、下記特許文献１を参照。）。【０００３】
また、複数のスレッドが割り当てられた場合、ラウンドロビン方式を用いて複数のスレッドの各スレッドを一定時間ずつ順に実行する技術（第２の従来技術）が知られている（たとえば、下記特許文献２と下記非特許文献１とを参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開昭６３−０６８９３４号公報
【特許文献２】特開２０００−２７６３６０号公報
【非特許文献】
【０００５】
【非特許文献１】Ｃ．Ｌ．Ｌｉｕ，Ｊａｍｅｓ  Ｗ．ＬＡＹＬＡＮＤ，「Ｓｃｈｅｄｕｌｉｎｇ  Ａｌｇｏｒｉｔｈｍｓ  ｆｏｒ  Ｍｕｌｔｉｐｒｏｇｒａｍｍｉｎｇ  ｉｎ  ａ  Ｈａｒｄ−Ｒｅａｌ−Ｔｉｍｅ  Ｅｎｖｉｒｏｎｍｅｎｔ」Ｊｏｕｒｎａｌ  ｏｆ  ｔｈｅ  Ａｓｓｏｃｉａｔｉｏｎ  ｆｏｒ  Ｃｏｍｐｕｔｉｎｇ  Ｍａｃｈｉｎｅｒｙ，Ｖｏｌ．２０，Ｎｏ．１，Ｊａｎｕａｒｙ  １９７３
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、第１の従来技術では、複数のスレッドのうちの優先度が低いスレッドの待機電力が大きい場合、消費電力が増加する問題点があった。また、第２の従来技術では、一定時間ごとにスレッドが切り替わるため、各スレッドの実行情報を一時的に格納するＣＰＵ内のキャッシュが競合してしまう。【０００７】
たとえば、ＣＰＵで一のスレッドの実行中には該一のスレッドの実行情報がキャッシュ上に格納されるが、一のスレッドから他のスレッドの実行に切り替わると、該キャッシュ内の一のスレッドの実行情報が他のスレッドの実行情報に書き換えられる。つぎに、他のスレッドから一のスレッドの実行に切り替わると、該キャッシュ内の他のスレッドの実行情報を一のスレッドの実行情報に書き換えなければならず、実行の性能が劣化し、スループットが下がる問題点があった。【０００８】
本発明は、上述した従来技術による問題点を解消するため、スループットを下げることなく、低消費電力化を図ることができる情報処理装置、情報処理プログラム、および情報処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一観点によれば、未実行の第１のスレッドと未実行の第２のスレッドとを検出し、検出された第２のスレッドの実行時間と検出された第１のスレッドの単位時間当たりの待機電力とを乗算することにより、前記第２のスレッドのつぎに前記第１のスレッドが実行された場合の前記第１のスレッドの待機電力を算出し、前記第１のスレッドの実行時間と前記第２のスレッドの単位時間当たりの待機電力とを乗算することにより、前記第１のスレッドのつぎに前記第２のスレッドが実行された場合の前記第２のスレッドの待機電力を算出し、算出された第１のスレッドの待機電力と算出された第２のスレッドの待機電力とを比較し、比較結果に基づいて前記第１のスレッドと前記第２のスレッドとの実行順を決定する情報処理装置、情報処理プログラム、および情報処理方法が提供される。
【発明の効果】
【００１０】
本情報処理装置、情報処理プログラム、および情報処理方法によれば、スループットを下げることなく、低消費電力化を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施例を示す説明図である。
【図２】第１のスレッドに実行期限が定義されている場合の説明図である。
【図３】情報処理装置のハードウェアを示すブロック図である。
【図４】スレッドテーブル４００の一例を示す説明図である。
【図５】割当管理テーブル５００の一例を示す説明図である。
【図６】情報処理装置３００の機能ブロック図である。
【図７】スレッド＃０の生成が検出される例を示す説明図である。
【図８】割当管理テーブル５００の更新例を示す説明図である。
【図９】情報処理装置３００による情報処理手順を示すフローチャート（その１）である。
【図１０】情報処理装置３００による情報処理手順を示すフローチャート（その２）である。
【図１１】情報処理装置３００による情報処理手順を示すフローチャート（その３）である。
【図１２】図９で示した実行順の決定処理（ステップＳ９０７）の詳細な処理手順を示すフローチャート（その１）である。
【図１３】図９で示した実行順の決定処理（ステップＳ９０７）の詳細な処理手順を示すフローチャート（その２）である。
【図１４】各ＯＳによるスレッド割り当て時の情報処理手順を示すフローチャートである。
【図１５】各ＯＳによるスレッド終了時の情報処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、本発明にかかる情報処理装置、情報処理プログラム、および情報処理方法の好適な実施の形態を詳細に説明する。
【００１３】
図１は、本発明の一実施例を示す説明図である。ここでは、未実行の第１のスレッドと未実行の第２のスレッドとを例に挙げて説明する。図１では、第１のスレッドと第２のスレッドの実行前に、実行順の組み合わせごとに待機電力がどのくらいかかるかを算出し、算出結果に基づいて実行順を決定する。
【００１４】
まず、（１）実行順が第２のスレッド→第１のスレッドの順の場合、第２のスレッドの実行中には第１のスレッドは待機状態となる。よって、第１のスレッドの待機電力は下記となる。
・第１のスレッドの待機電力＝第２のスレッドの実行時間［ｍｓ］×第１のスレッドの単位時間当たりの待機電力［ｍＷ／ｍｓ］
【００１５】
つぎに、（２）実行順が第１のスレッド→第２のスレッドの順の場合、第１のスレッドの実行中には第２のスレッドは待機状態となる。よって、第２のスレッドの待機電力は下記となる。
・第２のスレッドの待機電力＝第１のスレッドの実行時間［ｍｓ］×第２のスレッドの単位時間当たりの待機電力［ｍＷ／ｍｓ］
【００１６】
そして、情報処理装置が、第１のスレッドの待機電力と第２のスレッドの待機電力とを比較する。第１のスレッドの待機電力が第２のスレッドの待機電力以上であれば、情報処理装置が、実行順を第１のスレッド→第２のスレッドに決定する。第１のスレッドの待機電力が第２のスレッドの待機電力未満であれば、情報処理装置が、実行順を第２のスレッド→第１のスレッドに決定する。
【００１７】
図２は、第１のスレッドに実行期限が定義されている場合の説明図である。図２では第１のスレッドに実行期限が定義され、第２のスレッドに実行期限が定義されていない例について説明する。ここで、第１のスレッドに実行期限が定義されているとは、第１のスレッドの生成時刻から第１のスレッドの実行期限までの時間が定義されていることを示す。
【００１８】
第１のスレッドの生成時刻から第１のスレッドの実行期限までの時間（ｄ）が定義されている場合には、実行順を第２のスレッドのつぎに第１のスレッドとした場合に第１のスレッドの実行期限を遵守できるか否かを判断する。すなわち、下記となるか否かが判断される。
・ｄ−第１のスレッドの実行時間＞第２のスレッドの実行時間
【００１９】
図２のようにｄ−第１のスレッドの実行時間＞第２のスレッドの実行時間であれば、図１で上述したように、情報処理装置が実行順の組み合わせごとに待機するスレッドの待機時間を算出し、実行順を決定する。一方、ｄ−第１のスレッドの実行時間≦第２のスレッドの実行時間の場合、実行順が第２のスレッド→第１のスレッドであると、第１のスレッドの実行期限を遵守できないため、情報処理装置が実行順を第１のスレッド→第２のスレッドに決定する。
【００２０】
本実施の形態では情報処理装置の一例としてマルチコアプロセッサシステムを挙げて説明する。ここで、マルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００２１】
（情報処理装置のハードウェア）
図３は、情報処理装置のハードウェアを示すブロック図である。図３において、情報処理装置３００は、ＣＰＵ＃０と、ＣＰＵ＃１と、共有メモリ３０２と、を有している。ＣＰＵ＃０と、ＣＰＵ＃１と、共有メモリ３０２とは、それぞれバス３０１を介して接続されている。
【００２２】
ＣＰＵ＃０は、キャッシュと、レジスタと、コアと、を有している。ＣＰＵ＃１は、キャッシュと、レジスタと、コアと、を有している。ＣＰＵ＃０はＯＳ３１０を実行し、情報処理装置の全体の制御を司る。ＯＳ３１０はマスタＯＳであり、スレッドをどのＣＰＵに割り当てるかを制御する機能を有し、該ＣＰＵ＃０に割り当てられたスレッドを実行する。ＣＰＵ＃１はＯＳ３１１を実行する。ＯＳ３１１はスレーブＯＳであり、ＣＰＵ＃１に割り当てられたスレッドを実行する。
【００２３】
共有メモリ３０２は、具体的には、たとえば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と、フラッシュＲＯＭなどを有している。たとえば、フラッシュＲＯＭがブートプログラムを記憶し、ＲＯＭがアプリケーションソフトウェアを記憶し、ＲＡＭがＣＰＵ＃０〜ＣＰＵ＃１のワークエリアとして使用される。共有メモリ３０２に記憶されているプログラムは、各ＣＰＵにロードされることで、コーディングされている処理を該各ＣＰＵに実行させることとなる。共有メモリ３０２は、たとえば、スレッドテーブル４００と、割当管理テーブル５００と、を記憶している。
【００２４】
図４は、スレッドテーブル４００の一例を示す説明図である。スレッドテーブル４００は、スレッドの識別情報の項目４０１と、優先度の項目４０２と、デッドラインの項目と、実行時間の項目４０４と、待機電力の項目４０５と、を有している。スレッドの識別情報の項目４０１には、各スレッドの識別情報が保持されている。優先度の項目４０２には、スレッドの識別情報の項目４０１に識別情報が保持されている各スレッドの優先度が高いか否かを示す情報が保持されている。優先度が高い場合、高優先が保持され、優先度が高くない場合、低優先が保持されている。
【００２５】
デッドラインの項目４０３には、スレッドが生成された生成時刻から該スレッドの実行期限までの時間（ここでは、「デッドライン」と称する。）が保持されている。実行時間の項目４０４には、スレッドの識別情報の項目４０１に識別情報が保持されている各スレッドの実行時間が保持されている。待機電力の項目４０５には、スレッドの識別情報の項目４０１に識別情報が保持されている各スレッドの単位時間あたりの待機電力の値が保持されている。
【００２６】
スレッド＃０を例に挙げると、スレッド＃０は高優先度のスレッドであり、デッドラインが１０［ｍｓ］である。スレッド＃０の実行時間が５［ｍｓ］であり、単位時間あたりの待機電力が１００［ｍＷ／ｍｓ］である。
【００２７】
図５は、割当管理テーブル５００の一例を示す説明図である。割当管理テーブル５００は、ＣＰＵの識別情報の項目５０１と、ＬＯＣＫの項目５０２と、割当済スレッドの識別情報の項目５０３と、実行状態の項目５０４と、を有している。ＣＰＵの識別情報の項目５０１には、ＣＰＵの識別情報が保持されている。
【００２８】
ＬＯＣＫの項目５０２には、ＣＰＵの識別情報の項目５０１に識別情報が保持されているＣＰＵがＬＯＣＫされているか否かを示す情報が保持されている。ＬＯＣＫされているか否かとは、ＣＰＵに高優先度のスレッドが割り当てられているか否かを示す。ＣＰＵに高優先度のスレッドが割り当てられていなければ、ＬＯＣＫの項目５０２には０が登録され、ＣＰＵに高優先度のスレッドが割り当てられていれば、ＬＯＣＫの項目５０２には１が登録される。
【００２９】
割当済スレッドの識別情報の項目５０３には、ＣＰＵの識別情報の項目５０１に識別情報が保持されているＣＰＵに割り当てられたスレッドの識別情報が登録される。実行状態の項目５０４とは、割当済スレッドの識別情報の項目５０３に識別情報が登録されたスレッドの実行状態が登録される。実行状態としてはｅｘｅ（ｅｘｅｃｕｔｉｏｎ）またはｐｒｏｈ（ｐｒｏｈｉｂｉｔ）のいずれかが登録される。ｅｘｅはスレッドが実行可能な状態であることを示し、ｐｒｏｈはスレッドが実行禁止状態であることを示す。
【００３０】
ここで、各ＯＳは、割当管理テーブル５００によりＣＰＵ＃０にはスレッド＃１とスレッド＃３とが割り当てられ、ＣＰＵ＃１にはスレッド＃２とスレッド＃４とが割り当てられていることを特定できる。また、各ＣＰＵの割当済スレッドの識別情報は割り当てられた順に登録されているため、各ＯＳは割当管理テーブル５００内の割当済スレッドの識別情報を順にアクセスすることで、割当順を特定することができる。
【００３１】
（情報処理装置３００の機能ブロック図）
図６は、情報処理装置３００の機能ブロック図である。情報処理装置３００は、検出部６０１と、差分算出部６０２と、判断部６０３と、第１の算出部６０４と、第２の算出部６０５と、比較部６０６と、決定部６０７と、を有している。具体的には、たとえば、共有メモリ３０２に記憶され、検出部６０１〜決定部６０７の機能を有する情報処理プログラムをＣＰＵ＃０がロードする。そして、ＣＰＵ＃０がロードした該情報処理プログラムにコーディングされている処理を実行することにより、検出部６０１〜決定部６０７の機能が実現される。
【００３２】
検出部６０１は、未実行の第１のスレッドと未実行の第２のスレッドとを検出する。
【００３３】
第１の算出部６０４は、検出部６０１により検出された第２のスレッドの実行時間と検出部６０１により検出された第１のスレッドの単位時間当たりの待機電力とを乗算する。これにより、第１の算出部６０４は、第２のスレッドのつぎに第１のスレッドが実行された場合の第１のスレッドの待機電力を算出する。
【００３４】
第２の算出部６０５は、第１のスレッドの実行時間と第２のスレッドの単位時間当たりの待機電力とを乗算することにより、第１のスレッドのつぎに第２のスレッドが実行された場合の第２のスレッドの待機電力を算出する。
【００３５】
比較部６０６は、第１の算出部６０４により算出された第１のスレッドの待機電力と第２の算出部６０５により算出された第２のスレッドの待機電力とを比較する。
【００３６】
比較部６０７は、比較部６０６により比較された比較結果に基づいて第１のスレッドと第２のスレッドとの実行順を決定する。
【００３７】
また、決定部６０７は、比較部６０６により第１のスレッドの待機電力が第２のスレッドの待機電力以上であると比較された場合、実行順を第１のスレッドのつぎに第２のスレッドとする。
【００３８】
また、決定部６０７は、比較部６０６により第１のスレッドの待機電力が第２のスレッドの待機電力未満であると比較された場合、実行順を第２のスレッドのつぎに第１のスレッドとする。
【００３９】
差分算出部６０２は、検出部６０１により検出された第１のスレッドに実行期限が定義されている場合、第１のスレッドの生成時刻から実行期限までの時間と、第１のスレッドの実行時間との差分時間を算出する。
【００４０】
判断部６０３は、差分算出部６０２により算出された差分時間が第２のスレッドの実行時間より大きいか否かを判断する。
【００４１】
第１の算出部６０４は、判断部６０３により差分時間が第２のスレッドの実行時間より大きいと判断された場合、第２のスレッドの実行時間と第１のスレッドの単位時間当たりの待機電力とを乗算することにより、第１のスレッドの待機電力を算出する。
【００４２】
第２の算出部６０５は、判断部６０３により差分時間が第２のスレッドの実行時間より大きいと判断された場合、第１のスレッドの実行時間と第２のスレッドの単位時間当たりの待機電力とを乗算することにより、第２のスレッドの待機電力を算出する。
【００４３】
決定部６０７は、判断部６０３により差分時間が第２のスレッドの実行時間以下であると判断された場合、実行順を第１のスレッドのつぎに第２のスレッドとする。
【００４４】
以上を踏まえて詳細に説明する。本実施の形態では、高優先度のスレッドが生成された場合に、低優先度のスレッドと高い優先度のスレッドとの実行順を決定する例を示す。また、本実施の形態では、低優先度のスレッドのみが割り当てられているＣＰＵについては、割り当てられた順に実行することとする。
【００４５】
本実施の形態では、高優先度が割り当てられていないＣＰＵごとに実行順が決定され、最も待機電力が削減可能なＣＰＵに生成された高優先度のスレッド（対象スレッド）を割り当てることとする。
【００４６】
ここでは、実行順の決定方法を示す。まず、ＯＳ３１０が、高優先度のスレッドが割り当てられていないＣＰＵのうち、任意のＣＰＵ（対象ＣＰＵ）を選択する。そして、ＯＳ３１０が、対象ＣＰＵに割り当てられている割当済のスレッドを特定する。つぎに、ＯＳ３１０が、下記式をそれぞれ算出する。
【００４７】
・ｐｔｏｔａｌ＝０
・ｒ０＝対象スレッドのデッドライン−対象スレッドの実行時間
・ｐｓｔ＿ｈｉｇｈ（対象スレッドの待機電力）＝ｒ０×対象スレッドの単位時間あたりの待機電力［ｍＷ／ｍｓ］
・ｐｓｔ＿ｌｏｗ（割当済のスレッドの待機電力）＝対象スレッドの実行時間×（ｐ１＋ｐ２＋・・・ｐｎ）
【００４８】
ｎは割当済スレッド数であり、割当順に沿って割当済スレッドに１〜ｎの番号が付されている。ｐ１〜ｐｎは、割当済スレッドの待機電力である。よって、（ｐ１＋ｐ２＋・・・ｐｎ）は、割当済スレッドの単位時間あたりの待機電力の合計値である。
【００４９】
つぎに、ＯＳ３１０が、下記式を遵守するか否かを判断する。
・ｒ０＞（ｔ１∨ｔ２∨・・・∨ｔｎ）∧ｐｓｔ＿ｈｉｇｈ＜ｐｓｔ＿ｌｏｗ  ・・・式（１）
【００５０】
∧は論理積であり、∨は論理和である。ｔ１〜ｔｎは、割当済スレッドの実行時間である。ＯＳ３１０が、上記式（１）がＴｒｕｅである（遵守する）と、対象スレッドよりも先に実行する低優先度スレッドである割当済のスレッドを決定する。
【００５１】
そして、ＯＳ３１０が、ｒ０＞（ｔ１∨ｔ２∨・・・∨ｔｎ）となる割当済スレッドの中で、単位時間あたりの待機電力が最も大きいスレッドを対象スレッドよりも先に実行するスレッドとして選択する。ここで、たとえば、割当済スレッドの中で、１番目に割り当てられたスレッドが対象スレッドよりも先に実行するスレッド（先行スレッド）として選択されたと仮定する。
【００５２】
そして、ＯＳ３１０が、（ａ）下記式を算出する。
・ｐｔｏｔａｌ＝ｐｔｏｔａｌ＋ｔ１×ｐ０  ・・・式（２）
・ｐｓｔ＿ｈｉｇｈ＝ｐｓｔ＿ｈｉｇｈ−ｔ１×ｐ０  ・・・式（３）
・ｐｓｔ＿ｌｏｗ＝ｐｓｔ＿ｌｏｗ−ｔ１×ｐ０  ・・・式（４）
・ｒ０＝ｒ０−ｔ１  ・・・式（５）
【００５３】
そして、ＯＳ３１０が、（ｂ）下記式を遵守するか否かを判断する。
・ｐｓｔ＿ｈｉｇｈ＜ｐｓｔ＿ｌｏｗ  ・・・式（６）
【００５４】
そして、ＯＳ３１０が、（ｂ）上記式（６）を遵守すると判断した場合、ｒ０＞（ｔ２∨・・・∨ｔｎ）となる割当済スレッドの中で、単位時間あたりの待機電力が最も大きいスレッドを、先行スレッドのつぎで、対象スレッドよりも先に実行するスレッドとして選択する。
【００５５】
そして、ＯＳ３１０が、（ａ）〜（ｂ）の処理を繰り返すことで、対象ＣＰＵに割り当てた場合の実行順を決定する。そして、ＯＳ３１０が、対象ＣＰＵに対象スレッドが割り当てられた場合の実行順が決定すると、高優先度のスレッドが割り当てられていないＣＰＵのうち、対象ＣＰＵとして未選択のＣＰＵを対象ＣＰＵに選択する。そして、ＯＳ３１０が、該選択した対象ＣＰＵに対象スレッドが割り当てられた場合の実行順を決定する。
【００５６】
そして、高優先度のスレッドが割り当てられていないＣＰＵのうち、該ＣＰＵごとに算出されたｐｔｏｔａｌが最も大きい値であるＣＰＵを対象スレッドの割当先ＣＰＵに決定する。そして、決定した実行順を該割当先ＣＰＵに通知し、割当先ＣＰＵが通知された実行順に基づいて該割当先ＣＰＵに割り当てられたスレッドを実行する。
【００５７】
つぎに、具体的な数値を用いて詳細に説明する。
【００５８】
図７は、スレッド＃０の生成が検出される例を示す説明図である。まず、ＯＳ３１０が（１）スレッド＃０の生成を検出すると、スレッド＃０の優先度が高いか否かをスレッド＃０の識別情報に基づきスレッドテーブル４００を用いて判断する。ここでは、スレッド＃０の優先度は高いと判断される。つぎに、ＯＳ３１０が、マルチコアプロセッサのうち、（２）高優先度のスレッドが割り当てられていないＣＰＵを割当管理テーブル５００に基づいて特定する。ここでは、ＣＰＵ＃０とＣＰＵ＃１とが特定される。まず、ＯＳ３１０が、ＣＰＵ＃０とＣＰＵ＃１のうち、ＣＰＵ＃０を対象ＣＰＵに選択する。
【００５９】
・ｒ０（ＣＰＵ＃０）＝スレッド＃０のデッドライン−スレッド＃０の実行時間
＝１０［ｍｓ］−５［ｍｓ］
＝５［ｍｓ］
・ｐｓｔ＿ｈｉｇｈ（ＣＰＵ＃０）＝ｒ０×スレッド＃０の単位時間あたりの待機電力［ｍＷ／ｍｓ］
＝５［ｍｓ］×１００［ｍＷ／ｍｓ］
＝５００［ｍＷ］
・ｐｓｔ＿ｌｏｗ（ＣＰＵ＃０）＝スレッド＃０の実行時間×（スレッド＃１の単位時間あたりの待機電力＋スレッド＃３の単位時間あたりの待機電力）
＝５［ｍｓ］×（１００［ｍＷ／ｍｓ］＋８０［ｍＷ／ｍｓ］）
＝９００［ｍｓ］
【００６０】
つぎに、ＯＳ３１０が、上記式（１）に算出した各値を代入して上記式（１）を遵守するか否かを判断する。
・５［ｍｓ］（ｒ０（ＣＰＵ＃０））＞（３［ｍｓ］（スレッド＃１の実行時間）∨２［ｍｓ］（スレッド＃３の実行時間））∧５００［ｍＷ］（ｐｓｔ＿ｈｉｇｈ（ＣＰＵ＃０））＜９００［ｍｓ］（ｐｓｔ＿ｌｏｗ（ＣＰＵ＃０））
【００６１】
そして、ＯＳ３１０が、上記式（１）を遵守すると判断すると、ｒ０（ＣＰＵ＃０）＞（３［ｍｓ］（スレッド＃１の実行時間）∨２［ｍｓ］（スレッド＃３の実行時間））となる割当済スレッドの中で、単位時間あたりの待機電力が最大のスレッドを特定する。そして、ＯＳ３１０が、特定したスレッドをスレッド＃０よりも先に実行するスレッドとして選択する。なお、選択結果を実行順情報として、共有メモリ３０２などの記憶領域に出力する。
・ＣＰＵ＃０の実行順情報：スレッド＃１
【００６２】
そして、ＯＳ３１０が、上記式（２）〜（６）を算出する。
・ｐｔｏｔａｌ（ＣＰＵ＃０）＝ｐｔｏｔａｌ（ＣＰＵ＃０）＋スレッド＃１の実行時間×スレッド＃０の単位時間あたりの待機電力
＝０＋３［ｍｓ］×１００［ｍＷ／ｍｓ］
＝３００［ｍＷ］
・ｐｓｔ＿ｈｉｇｈ（ＣＰＵ＃０）＝ｐｓｔ＿ｈｉｇｈ（ＣＰＵ＃０）−スレッド＃１の実行時間×スレッド＃０の単位時間あたりの待機電力
＝５００［ｍＷ］−３［ｍｓ］×１００［ｍＷ／ｍｓ］
＝２００［ｍＷ］
・ｐｓｔ＿ｌｏｗ（ＣＰＵ＃０）＝ｐｓｔ＿ｌｏｗ（ＣＰＵ＃０）−スレッド＃１の実行時間×スレッド＃０の単位時間あたりの待機電力
＝９００［ｍｓ］−３［ｍｓ］×１００［ｍＷ／ｍｓ］
＝６００［ｍＷ］
・ｒ０（ＣＰＵ＃０）＝ｒ０（ＣＰＵ＃０）−スレッド＃１の実行時間
＝５［ｍｓ］−３［ｍｓ］
＝２［ｍｓ］
【００６３】
そして、ＯＳ３１０が、上記式（６）を遵守するか否かを判断する。
・２００［ｍＷ］＜６００［ｍＷ］
【００６４】
そして、ＯＳ３１０が、上記式（６）を遵守すると判断し、ｒ０（ＣＰＵ＃０）＞（スレッド＃３の実行時間）となる割当済スレッドの中で、単位時間あたりの待機電力が最も大きいスレッドを、先行スレッドのつぎで、対象スレッドよりも先に実行するスレッドとして選択する。そして、選択結果を上述のＣＰＵ＃０の実行順情報に追加する。
・ＣＰＵ＃０の実行順情報：スレッド＃１→スレッド＃３
【００６５】
そして、ＯＳ３１０が、上記式（２）を算出する。
・ｐｔｏｔａｌ（ＣＰＵ＃０）＝ｐｔｏｔａｌ（ＣＰＵ＃０）＋スレッド＃３の実行時間×スレッド＃０の単位時間あたりの待機電力
＝３００［ｍＷ］＋２［ｍｓ］×１００［ｍＷ／ｍｓ］
＝５００［ｍＷ］
【００６６】
ここで、ＣＰＵ＃０に割り当てられているスレッドがスレッド＃１とスレッド＃３のみであるため、ＣＰＵ＃０の実行順情報にスレッド＃０を追加する。
・ＣＰＵ＃０の実行順情報：スレッド＃１→スレッド＃３→スレッド＃０
【００６７】
つぎに、ＯＳ３１０が、ＣＰＵ＃０とＣＰＵ＃１のうち、ＣＰＵ＃１を対象ＣＰＵに選択する。
【００６８】
・ｒ０（ＣＰＵ＃１）＝スレッド＃０のデッドライン−スレッド＃０の実行時間
＝１０［ｍｓ］−５［ｍｓ］
＝５［ｍｓ］
・ｐｓｔ＿ｈｉｇｈ（ＣＰＵ＃１）＝ｒ０×スレッド＃０の単位時間あたりの待機電力［ｍＷ／ｍｓ］
＝５［ｍｓ］×１００［ｍＷ／ｍｓ］
＝５００［ｍＷ］
・ｐｓｔ＿ｌｏｗ（ＣＰＵ＃１）＝スレッド＃０の実行時間×（スレッド＃２の単位時間あたりの待機電力＋スレッド＃４の単位時間あたりの待機電力）
＝５［ｍｓ］×（５０［ｍＷ／ｍｓ］＋７０［ｍＷ／ｍｓ］）
＝６００［ｍｓ］
【００６９】
つぎに、ＯＳ３１０が、上記式（１）に算出した各値を代入して上記式（１）を遵守するか否かを判断する。
・５［ｍｓ］（ｒ０（ＣＰＵ＃１））＞（４［ｍｓ］（スレッド＃２の実行時間）∨５［ｍｓ］（スレッド＃４の実行時間））∧５００［ｍＷ］（ｐｓｔ＿ｈｉｇｈ（ＣＰＵ＃１））＜６００［ｍｓ］（ｐｓｔ＿ｌｏｗ（ＣＰＵ＃１））
【００７０】
そして、ＯＳ３１０が、上記式（１）を遵守すると判断すると、ｒ０（ＣＰＵ＃１）＞（４［ｍｓ］（スレッド＃２の実行時間））となる割当済スレッドの中で、単位時間あたりの待機電力が最大のスレッドを特定する。そして、ＯＳ３１０が、特定したスレッドをスレッド＃０よりも先に実行するスレッドとして選択する。なお、選択結果を実行順情報として、共有メモリ３０２などの記憶領域に出力する。
・ＣＰＵ＃１の実行順情報：スレッド＃２
【００７１】
そして、ＯＳ３１０が、上記式（２）を算出する。
・ｐｔｏｔａｌ（ＣＰＵ＃１）＝ｐｔｏｔａｌ（ＣＰＵ＃１）＋スレッド＃２の実行時間×スレッド＃０の単位時間あたりの待機電力
＝０＋４［ｍｓ］×１００［ｍＷ／ｍｓ］
＝４００［ｍＷ］
【００７２】
ここで、ｒ０（ＣＰＵ＃１）未満であるスレッドがスレッド＃２のみであるため、ＣＰＵ＃１の実行順情報にスレッド＃０を登録し、さらに、スレッド＃４を登録する。
・ＣＰＵ＃１の実行順情報：スレッド＃２→スレッド＃０→スレッド＃４
【００７３】
つぎに、ＯＳ３１０がＣＰＵ＃０とＣＰＵ＃１のうち、ｐｔｏｔａｌが大きいＣＰＵをスレッド＃０の割当先ＣＰＵに決定する。ここでは、ｐｔｏｔａｌ（ＣＰＵ＃０）が５００［ｍＷ］であり、ｐｔｏｔａｌ（ＣＰＵ＃１）が４００［ｍＷ］であるため、ＣＰＵ＃０がスレッド＃０の割当先ＣＰＵに決定される。
【００７４】
図８は、割当管理テーブル５００の更新例を示す説明図である。ＯＳ３１０が、割当管理テーブル５００内のＣＰＵの識別情報がＣＰＵ＃０に、割当済スレッドの識別情報の項目５０３にスレッド＃０の識別情報を登録する。そして、ＯＳ３１０が、スレッド＃１の実行状態の項目５０４にｅｘｅを設定し、スレッド＃３の実行状態の項目５０４にｐｒｏｈを設定し、スレッド＃０の実行状態の項目５０４にｐｒｏｈを設定する。そして、ＯＳ３１０が、スレッド＃１の実行を開始する。
【００７５】
（情報処理手順）
図９〜１１は、情報処理装置３００による情報処理手順を示すフローチャートである。実行主体はマスタＯＳであるＯＳ３１０である。まず、ＯＳ３１０が、スレッドの生成を検出したか否かを判断する（ステップＳ９０１）。ＯＳ３１０が、スレッドの生成を検出していないと判断した場合（ステップＳ９０１：Ｎｏ）、ステップＳ９０１へ戻る。ＯＳ３１０が、スレッドの生成を検出したと判断した場合（ステップＳ９０１：Ｙｅｓ）、生成されたスレッド（対象スレッド）が高優先度スレッドであるか否かを判断する（ステップＳ９０２）。
【００７６】
ＯＳ３１０が、対象スレッドが高優先度スレッドであると判断した場合（ステップＳ９０２：Ｙｅｓ）、高優先度スレッドの割り当てに関するロックがかかっていないＣＰＵを特定する（ステップＳ９０３）。そして、ＯＳ３１０が、高優先度スレッドの割り当てに関するロックがかかっていないＣＰＵを特定できたか否かを判断する（ステップＳ９０４）。
【００７７】
ＯＳ３１０が、高優先度スレッドの割り当てに関するロックがかかっていないＣＰＵを特定できたと判断した場合（ステップＳ９０４：Ｙｅｓ）、ロックがかかっていないＣＰＵのうち、未選択なＣＰＵがあるか否かを判断する（ステップＳ９０５）。
【００７８】
ＯＳ３１０が、未選択なＣＰＵがあると判断した場合（ステップＳ９０５：Ｙｅｓ）、未選択なＣＰＵから任意のＣＰＵを対象ＣＰＵに選択する（ステップＳ９０６）。そして、ＯＳ３１０が、実行順の決定処理を実行し（ステップＳ９０７）、対象ＣＰＵの識別情報と実行順情報とｐｔｏｔａｌとを関連付けて出力し（ステップＳ９０８）、ステップＳ９０５へ戻る。
【００７９】
ＯＳ３１０が、対象スレッドが高優先度スレッドでないと判断した場合（ステップＳ９０２：Ｎｏ）、最小負荷のＣＰＵを特定する（ステップＳ９０９）。そして、ＯＳ３１０が、対象スレッドの割当先ＣＰＵを特定した最小負荷のＣＰＵに設定し（ステップＳ９１０）、ステップＳ９０１へ戻る。
【００８０】
ＯＳ３１０が、高優先度スレッドの割り当てに関するロックがかかっていないＣＰＵを特定できなかったと判断した場合（ステップＳ９０４：Ｎｏ）、未選択なＣＰＵがあるか否かを判断する（ステップＳ９１１）。そして、ＯＳ３１０が、未選択なＣＰＵがあると判断した場合（ステップＳ９１１：Ｙｅｓ）、未選択なＣＰＵから任意のＣＰＵを選択する（ステップＳ９１２）。
【００８１】
ＯＳ３１０が、選択したＣＰＵの実行順情報に登録されたスレッドを抽出し（ステップＳ９１３）、抽出したスレッドの実行時間の合計値を算出する（ステップＳ９１４）。ＯＳ３１０が、抽出したスレッドの実行時間の合計値＜対象スレッドのデッドライン（ｄ０）−対象スレッドの実行時間（ｔ０）であるか否かを判断する（ステップＳ９１５）。
【００８２】
ＯＳ３１０が、抽出したスレッドの実行時間の合計値＜ｄ０−ｔ０であると判断した場合（ステップＳ９１５：Ｙｅｓ）、対象ＣＰＵを、ｄ０を遵守可能なＣＰＵに決定し（ステップＳ９１６）、ステップＳ９１１へ戻る。一方、抽出したスレッドの実行時間の合計値＜ｄ０−ｔ０でないと判断した場合（ステップＳ９１５：Ｎｏ）、ステップＳ９１１へ戻る。
【００８３】
ＯＳ３１０が、未選択なＣＰＵがないと判断した場合（ステップＳ９１１：Ｎｏ）、ｄ０を遵守可能なＣＰＵがあるか否かを判断する（ステップＳ９１７）。ＯＳ３１０が、ｄ０を遵守可能なＣＰＵがあると判断した場合（ステップＳ９１７：Ｙｅｓ）、ｄ０を遵守可能なＣＰＵのうち、未選択なＣＰＵがあるか否かを判断する（ステップＳ９１８）。
【００８４】
ＯＳ３１０が、ｄ０を遵守可能なＣＰＵのうち、未選択なＣＰＵがあると判断した場合（ステップＳ９１８：Ｙｅｓ）、未選択なＣＰＵから任意のＣＰＵを対象ＣＰＵに選択する（ステップＳ９１９）。そして、ＯＳ３１０が、実行順の決定処理を実行し（ステップＳ９２０）、対象ＣＰＵの識別情報と実行順情報とｐｔｏｔａｌとを関連付けて出力し（ステップＳ９２１）、ステップＳ９０５へ戻る。
【００８５】
ステップＳ９１８において、ＯＳ３１０が、ｄ０を遵守可能なＣＰＵのうち、未選択なＣＰＵがないと判断した場合（ステップＳ９１８：Ｎｏ）、ｄ０を遵守可能なＣＰＵのうち、最もｐｔｏｔａｌの値が大きいＣＰＵを特定する（ステップＳ９２２）。そして、ＯＳ３１０が、特定したＣＰＵの実行順情報を特定したＣＰＵに通知し（ステップＳ９２３）、対象スレッドの割当先ＣＰＵを特定したＣＰＵに設定し（ステップＳ９２４）、ステップＳ９０１へ戻る。
【００８６】
ＯＳ３１０が、ｄ０を遵守可能なＣＰＵがないと判断した場合（ステップＳ９１７：Ｎｏ）、各ＣＰＵに割当済の高優先度のスレッドのうち、実行時間が最小のスレッドを特定する（ステップＳ９２５）。つぎに、ＯＳ３１０が、特定したスレッドの割当先ＣＰＵを対象スレッドの割当先ＣＰＵに設定し（ステップＳ９２６）、実行順情報の破棄指示に対象スレッドの割当先ＣＰＵに通知し（ステップＳ９２７）、ステップＳ９０１へ戻る。
【００８７】
ステップＳ９０５において、ＯＳ３１０が、未選択なＣＰＵがないと判断した場合（ステップＳ９０５：Ｎｏ）、ロックがかかっていないＣＰＵのうち、最もｐｔｏｔａｌの値が大きいＣＰＵを特定する（ステップＳ９２８）。そして、ＯＳ３１０が、特定したＣＰＵの実行順情報を特定したＣＰＵに通知し（ステップＳ９２９）、対象スレッドの割当先ＣＰＵを特定したＣＰＵに設定し（ステップＳ９３０）、ステップＳ９０１へ戻る。
【００８８】
図１２および図１３は、図９で示した実行順の決定処理（ステップＳ９０７）の詳細な処理手順を示すフローチャートである。実行順の決定処理がステップＳ９０７またはステップＳ９２０の場合、実行主体はＯＳ３１０であるが、実行順の決定処理がステップＳ１５１１（図１５）の処理の場合、実行主体は各ＯＳである。まず、ＯＳが、ｒ０＝対象スレッドのデッドライン（ｄ０）−対象スレッドの実行時間（ｔ０）を算出し（ステップＳ１２０１）、ｐｓｔ＿ｈｉｇｈ＝ｒ０×対象スレッドの単位時間あたりの待機電力（ｐ０）を算出する（ステップＳ１２０２）。
【００８９】
つぎに、ＯＳが、ｐｔｏｔａｌ＝０とし（ステップＳ１２０３）、ｍ＝１とし（ステップＳ１２０４）、対象ＣＰＵに割当済のＣＰＵを特定する（ステップＳ１２０５）。ＯＳが、特定した割当済のスレッドのうち、ｒ０よりも実行時間が小さいスレッドを特定する（ステップＳ１２０６）。そして、ＯＳが、ｒ０よりも実行時間が小さいスレッドを特定できたか否かを判断する（ステップＳ１２０７）。
【００９０】
ＯＳが、ｒ０よりも実行時間が小さいスレッドを特定できたと判断した場合（ステップＳ１２０７：Ｙｅｓ）、割当済のスレッドの待機電力の合計値（ｐｓｕｍ）を算出する（ステップＳ１２０８）。ＯＳが、ｐｓｔ＿ｌｏｗ＝ｐｓｕｍ×ｔ０を算出し（ステップＳ１２０９）、ｐｓｔ＿ｈｉｇｈ＞ｐｓｔ＿ｌｏｗであるか否かを判断する（ステップＳ１２１０）。
【００９１】
ＯＳが、ｐｓｔ＿ｈｉｇｈ＞ｐｓｔ＿ｌｏｗであると判断した場合（ステップＳ１２１０：Ｙｅｓ）、ｒ０よりも実行時間が小さいスレッドのうち、未選択なスレッドがあるか否かを判断する（ステップＳ１２１１）。ＯＳが、未選択なスレッドがあると判断した場合（ステップＳ１２１１：Ｙｅｓ）、未選択なスレッドのうち、最も単位時間あたりの待機電力が大きいスレッドを選択する（ステップＳ１２１２）。
【００９２】
そして、ＯＳが、選択したスレッドの識別情報とｍの値とを関連付けて実行順情報に出力する（ステップＳ１２１３）。ＯＳが、ｐｔｏｔａｌ＝ｐｔｏｔａｌ＋ｔ０×選択したスレッドの単位時間当たりの待機電力を算出し（ステップＳ１２１４）、ｐｓｔ＿ｌｏｗ＝ｐｓｔ＿ｌｏｗ−ｔ０×選択したスレッドの単位時間当たりの待機電力を算出する（ステップＳ１２１５）。
【００９３】
ＯＳが、ｐｓｔ＿ｈｉｇｈ＝ｐｓｔ＿ｈｉｇｈ−選択したスレッドの実行時間×ｐ０を算出し（ステップＳ１２１６）、ｍ＝ｍ＋１とし（ステップＳ１２１７）、ステップＳ１２１１へ戻る。
【００９４】
ステップＳ１２０７において、ＯＳが、ｒ０よりも実行時間が小さいスレッドを特定できなかったと判断した場合（ステップＳ１２０７：Ｎｏ）、対象スレッドの識別情報とｍの値とを関連付けて実行順情報に出力し（ステップＳ１２１８）、ステップＳ９０８へ移行する。
【００９５】
また、ステップＳ１２１０において、ＯＳが、ｐｓｔ＿ｈｉｇｈ＞ｐｓｔ＿ｌｏｗでないと判断した場合（ステップＳ１２１０：Ｎｏ）、ステップＳ１２１８へ移行する。
【００９６】
また、ステップＳ１２１１において、ＯＳが、未選択なスレッドがないと判断した場合（ステップＳ１２１１：Ｎｏ）、ステップＳ１２１８へ移行する。
【００９７】
図１４は、各ＯＳによるスレッド割り当て時の情報処理手順を示すフローチャートである。まず、ＯＳが、実行順情報の通知を受け付け、実行順情報の破棄指示を受け付け、またはスレッドの割り当てを検出したか否かを判断する（ステップＳ１４０１）。ＯＳが、実行順情報の通知を受け付け、実行順情報の破棄指示を受け付け、およびスレッドの割り当てを検出していないと判断した場合（ステップＳ１４０１：Ｎｏ）、ステップＳ１４０１へ戻る。
【００９８】
ＯＳが、実行順情報の通知を受け付けたと判断した場合（ステップＳ１４０１：実行順情報の通知）、保存済の実行順情報を破棄し、受け付けた実行順情報を保存する（ステップＳ１４０２）。
【００９９】
ＯＳが、スレッドの割り当てを検出したと判断した場合（ステップＳ１４０１：スレッドの割り当て）、割り当てを検出したスレッドが高優先度スレッドであるか否かを判断する（ステップＳ１４０３）。ＯＳが、割り当てを検出したスレッドが高優先度スレッドであると判断した場合（ステップＳ１４０３：Ｙｅｓ）、高優先度スレッドの割り当てに関するロックをかける（ステップＳ１４０４）。
【０１００】
そして、ＯＳが、実行順情報内の先頭スレッドの実行状態をｅｘｅに設定する（ステップＳ１４０５）、実行順情報内の先頭スレッドを除く割当済スレッドの実行状態をｐｒｏｈに設定する（ステップＳ１４０６）。つぎに、ＯＳが、実行順情報内の先頭スレッドの実行を開始し（ステップＳ１４０７）、ステップＳ１４０１へ戻る。
【０１０１】
ステップＳ１４０３において、ＯＳが、割り当てを検出したスレッドが高優先度スレッドでないと判断した場合（ステップＳ１４０３：Ｎｏ）、高優先度スレッドの割り当てに関するロックがかかっているか否かを判断する（ステップＳ１４０８）。ＯＳが、高優先度スレッドの割り当てに関するロックがかかっていると判断した場合（ステップＳ１４０８：Ｙｅｓ）、割り当てを検出したスレッドが実行順情報内の先頭スレッドであるか否かを判断する（ステップＳ１４０９）。
【０１０２】
そして、ＯＳが、割り当てを検出したスレッドが実行順情報内の先頭スレッドでないと判断した場合（ステップＳ１４０９：Ｎｏ）、検出したスレッドの実行状態をｐｒｏｈに設定し（ステップＳ１４１０）、ステップＳ１４０１へ戻る。ＯＳが、割り当て指示を検出したスレッドが実行順情報内の先頭スレッドであると判断した場合（ステップＳ１４０９：Ｙｅｓ）、検出したスレッドの実行状態をｅｘｅに設定し（ステップＳ１４１１）、ステップＳ１４０１へ戻る。
【０１０３】
ステップＳ１４０８において、ＯＳが、高優先度スレッドの割り当てに関するロックがかかっていないと判断した場合（ステップＳ１４０８：Ｎｏ）、ランキューの最後尾に検出したスレッドを登録し（ステップＳ１４１２）、ステップＳ１４０１へ戻る。
【０１０４】
ステップＳ１４０１において、ＯＳが、実行順情報の破棄指示の通知を受け付けたと判断した場合（ステップＳ１４０１：実行順情報の破棄指示の通知）、保存済の実行順情報を破棄する（ステップＳ１４１３）。そして、ＯＳが、割当済の高優先度のスレッドのうち、最も先に割り当てられたスレッドの実行を開始し（ステップＳ１４１４）、ステップＳ１４０１へ戻る。
【０１０５】
図１５は、各ＯＳによるスレッド終了時の情報処理手順を示すフローチャートである。まず、ＯＳが、スレッドの終了またはスレッドの切り替えを検出したか否かを判断する（ステップＳ１５０１）。そして、ＯＳが、スレッドの終了またはスレッドの切り替えを検出していないと判断した場合（ステップＳ１５０１：Ｎｏ）、ステップＳ１５０１に戻る。
【０１０６】
ＯＳが、スレッドの終了を検出したと判断した場合（ステップＳ１５０１：スレッドの終了）、終了したスレッドが高優先度スレッドであるか否かを判断する（ステップＳ１５０２）。ＯＳが、終了したスレッドが高優先度スレッドでないと判断した場合（ステップＳ１５０２：Ｎｏ）、高優先度スレッドの割り当てに関するロックがかかっているか否かを判断する（ステップＳ１５０３）。
【０１０７】
ＯＳが、高優先度スレッドの割り当てに関するロックがかかっていると判断した場合（ステップＳ１５０３：Ｙｅｓ）、ステップＳ１５０９に移行する。ＯＳが、高優先度スレッドの割り当てに関するロックがかかっていないと判断した場合（ステップＳ１５０３：Ｎｏ）、ステップＳ１５０５へ移行する。
【０１０８】
ＯＳが、終了したスレッドが高優先度スレッドであると判断した場合（ステップＳ１５０２：Ｙｅｓ）、割当済のスレッドの中に、終了したスレッドを除いて高優先度のスレッドがあるか否かを判断する（ステップＳ１５０４）。ＯＳが、割当済のスレッドの中に、終了したスレッドを除いて高優先度のスレッドがないと判断した場合（ステップＳ１５０４：Ｎｏ）、高優先度のスレッドの割り当てに関するロックを解除する（ステップＳ１５０５）。
【０１０９】
そして、ＯＳが、割当済のすべてのスレッドの実行状態をｅｘｅに設定し（ステップＳ１５０６）、割当済のスレッドの中で、最も割り当てが先のスレッドの実行を開始し（ステップＳ１５０７）、ステップＳ１５０１へ戻る。
【０１１０】
ステップＳ１５０４において、ＯＳが、割当済のスレッドの中に、終了したスレッドを除いて高優先度のスレッドがあると判断した場合（ステップＳ１５０４：Ｙｅｓ）、実行順情報内に未実行のスレッドがあるか否かを判断する（ステップＳ１５０８）。ＯＳが、実行順情報内に未実行のスレッドがあると判断した場合（ステップＳ１５０８：Ｙｅｓ）、実行順情報で未実行のスレッドのうち、先頭のスレッドの実行状態をｅｘｅに設定する（ステップＳ１５０９）。
【０１１１】
ＯＳが、先頭のスレッドの実行を開始し（ステップＳ１５１０）、ステップＳ１５０１へ戻る。ＯＳが、実行順情報内に未実行のスレッドがないと判断した場合（ステップＳ１５０８：Ｎｏ）、実行順の決定処理を実行し（ステップＳ１５１１）、ステップＳ１５０１へ戻る。
【０１１２】
以上説明したように、情報処理装置、情報処理プログラム、および情報処理方法によれば、第１のスレッドと第２のスレッドとが未実行の時に、各スレッドの待機電力の比較により実行順を決定する。これにより、スレッドを切り替えずに低消費電力化を図ることができる。
【０１１３】
また、第１のスレッドの待機電力が第２のスレッドの待機電力以上である場合、第１のスレッドのつぎに第２のスレッドを実行する。これにより、待機電力の大きいスレッドを先に実行でき、低消費電力化を図ることができる。
【０１１４】
また、第１のスレッドの待機電力が第２のスレッドの待機電力未満である場合、第２のスレッドのつぎに第１のスレッドを実行する。これにより、待機電力の大きいスレッドを先に実行でき、低消費電力化を図ることができる。
【０１１５】
また、第１のスレッドに実行期限が定義されている場合、第１のスレッドの前に第２のスレッドを実行しても第１のスレッドが実行期限を遵守できるか否かを判断する。そして、第１のスレッドの前に第２のスレッドを実行しても第１のスレッドが実行期限を遵守できると判断された場合において、第１のスレッドの待機電力と第２のスレッドの待機電力に基づき実行順を決定する。これにより、実行期限のあるスレッドの実行時にも、低消費電力化を図ることができる。
【０１１６】
また、第１のスレッドの前に第２のスレッドを実行したら第１のスレッドが実行期限を遵守できないと判断された場合において、実行順を第１のスレッドのつぎに第２のスレッドとすることで、第１のスレッドのスループットが下がるのを防止することができる。
【符号の説明】
【０１１７】
３００  情報処理装置
６０１  検出部
６０２  差分算出部
６０３  判断部
６０４  第１の算出部
６０５  第２の算出部
６０６  比較部
６０７  決定部
【図１】
2012066620.tif 000003
【図２】
2012066620.tif 000004
【図３】
2012066620.tif 000005
【図４】
2012066620.tif 000006
【図５】
2012066620.tif 000007
【図６】
2012066620.tif 000008
【図７】
2012066620.tif 000009
【図８】
2012066620.tif 000010
【図９】
2012066620.tif 000011
【図１０】
2012066620.tif 000012
【図１１】
2012066620.tif 000013
【図１２】
2012066620.tif 000014
【図１３】
2012066620.tif 000015
【図１４】
2012066620.tif 000016
【図１５】
2012066620.tif 000017
【手続補正書】
【提出日】平成25年5月22日(2013.5.22)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
未実行の第１のスレッドと未実行の第２のスレッドとを検出する検出手段と、
前記検出手段により検出された第２のスレッドの実行時間および第１のスレッドの単位時間当たりの待機電力に基づいて、前記第２のスレッドのつぎに前記第１のスレッドが実行された場合の前記第１のスレッドの待機電力を算出する第１の算出手段と、
前記第１のスレッドの実行時間および前記第２のスレッドの単位時間当たりの待機電力に基づいて、前記第１のスレッドのつぎに前記第２のスレッドが実行された場合の前記第２のスレッドの待機電力を算出する第２の算出手段と、
前記第１の算出手段により算出された第１のスレッドの待機電力と前記第２の算出手段により算出された第２のスレッドの待機電力に基づいて前記第１のスレッドと前記第２のスレッドとの実行順を決定する決定手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記決定手段は、
前記第１のスレッドの待機電力が前記第２のスレッドの待機電力以上である場合、前記実行順を前記第１のスレッドのつぎに前記第２のスレッドとすることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記決定手段は、
前記第１のスレッドの待機電力が前記第２のスレッドの待機電力未満である場合、前記実行順を前記第２のスレッドのつぎに前記第１のスレッドとすることを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記検出手段により検出された第１のスレッドに実行期限が定義されている場合、前記第１のスレッドの生成時刻から前記実行期限までの時間と、前記第１のスレッドの実行時間との差分時間を算出する差分算出手段と、
前記差分算出手段により算出された差分時間が前記第２のスレッドの実行時間より大きいか否かを判断する判断手段と、
前記第１の算出手段は、
前記判断手段により前記差分時間が前記第２のスレッドの実行時間より大きいと判断された場合、前記第２のスレッドの実行時間と前記第１のスレッドの単位時間当たりの待機電力とを乗算することにより、前記第１のスレッドの待機電力を算出し、
前記第２の算出手段は、
前記判断手段により前記差分時間が前記第２のスレッドの実行時間より大きいと判断された場合、前記第１のスレッドの実行時間と前記第２のスレッドの単位時間当たりの待機電力とを乗算することにより、前記第２のスレッドの待機電力を算出することを特徴とする請求項１または２に記載の情報処理装置。
【請求項５】
前記決定手段は、
前記判断手段により前記差分時間が前記第２のスレッドの実行時間以下であると判断された場合、前記実行順を前記第１のスレッドのつぎに前記第２のスレッドとすることを特徴とする請求項４に記載の情報処理装置。
【請求項６】
未実行の第１のスレッドと未実行の第２のスレッドとを検出する検出工程と、
前記検出工程により検出された第２のスレッドの実行時間および第１のスレッドの単位時間当たりの待機電力に基づいて、前記第２のスレッドのつぎに前記第１のスレッドが実行された場合の前記第１のスレッドの待機電力を算出する第１の算出工程と、
前記第１のスレッドの実行時間および前記第２のスレッドの単位時間当たりの待機電力に基づいて、前記第１のスレッドのつぎに前記第２のスレッドが実行された場合の前記第２のスレッドの待機電力を算出する第２の算出工程と、
前記第１の算出工程により算出された第１のスレッドの待機電力と前記第２の算出工程により算出された第２のスレッドの待機電力とに基づいて前記第１のスレッドと前記第２のスレッドとの実行順を決定する決定工程と、
をコンピュータに実行させることを特徴とする情報処理プログラム。
【請求項７】
未実行の第１のスレッドと未実行の第２のスレッドとを検出する検出工程と、
前記検出工程により検出された第２のスレッドの実行時間および第１のスレッドの単位時間当たりの待機電力に基づいて、前記第２のスレッドのつぎに前記第１のスレッドが実行された場合の前記第１のスレッドの待機電力を算出する第１の算出工程と、
前記第１のスレッドの実行時間および前記第２のスレッドの単位時間当たりの待機電力に基づいて、前記第１のスレッドのつぎに前記第２のスレッドが実行された場合の前記第２のスレッドの待機電力を算出する第２の算出工程と、
前記第１の算出工程により算出された第１のスレッドの待機電力と前記第２の算出工程により算出された第２のスレッドの待機電力とに基づいて前記第１のスレッドと前記第２のスレッドとの実行順を決定する決定工程と、
をコンピュータが実行することを特徴とする情報処理方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スレッドの実行を制御する情報処理装置、情報処理プログラム、および情報処理方法に関する。
【背景技術】
【０００２】
従来、シングルコアプロセッサシステムやマルチコアプロセッサシステムの各ＣＰＵにおいて、複数のスレッドが割り当てられた場合、たとえば、スレッドごとに定義された優先度により実行順を決定する技術（第１の従来技術）が知られている（たとえば、下記特許文献１を参照。）。
【０００３】
また、複数のスレッドが割り当てられた場合、ラウンドロビン方式を用いて複数のスレッドの各スレッドを一定時間ずつ順に実行する技術（第２の従来技術）が知られている（たとえば、下記特許文献２と下記非特許文献１とを参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開昭６３−０６８９３４号公報
【特許文献２】特開２０００−２７６３６０号公報
【非特許文献】
【０００５】
【非特許文献１】Ｃ．Ｌ．Ｌｉｕ，Ｊａｍｅｓ  Ｗ．ＬＡＹＬＡＮＤ，「Ｓｃｈｅｄｕｌｉｎｇ  Ａｌｇｏｒｉｔｈｍｓ  ｆｏｒ  Ｍｕｌｔｉｐｒｏｇｒａｍｍｉｎｇ  ｉｎ  ａ  Ｈａｒｄ−Ｒｅａｌ−Ｔｉｍｅ  Ｅｎｖｉｒｏｎｍｅｎｔ」Ｊｏｕｒｎａｌ  ｏｆ  ｔｈｅ  Ａｓｓｏｃｉａｔｉｏｎ  ｆｏｒ  Ｃｏｍｐｕｔｉｎｇ  Ｍａｃｈｉｎｅｒｙ，Ｖｏｌ．２０，Ｎｏ．１，Ｊａｎｕａｒｙ  １９７３
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、第１の従来技術では、複数のスレッドのうちの優先度が低いスレッドの待機電力が大きい場合、消費電力が増加する問題点があった。また、第２の従来技術では、一定時間ごとにスレッドが切り替わるため、各スレッドの実行情報を一時的に格納するＣＰＵ内のキャッシュが競合してしまう。
【０００７】
たとえば、ＣＰＵで一のスレッドの実行中には該一のスレッドの実行情報がキャッシュ上に格納されるが、一のスレッドから他のスレッドの実行に切り替わると、該キャッシュ内の一のスレッドの実行情報が他のスレッドの実行情報に書き換えられる。つぎに、他のスレッドから一のスレッドの実行に切り替わると、該キャッシュ内の他のスレッドの実行情報を一のスレッドの実行情報に書き換えなければならず、実行の性能が劣化し、スループットが下がる問題点があった。
【０００８】
本発明は、上述した従来技術による問題点を解消するため、スループットを下げることなく、低消費電力化を図ることができる情報処理装置、情報処理プログラム、および情報処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一観点によれば、未実行の第１のスレッドと未実行の第２のスレッドとを検出し、検出された第２のスレッドの実行時間および第１のスレッドの単位時間当たりの待機電力に基づいて、前記第２のスレッドのつぎに前記第１のスレッドが実行された場合の前記第１のスレッドの待機電力を算出し、前記第１のスレッドの実行時間および前記第２のスレッドの単位時間当たりの待機電力に基づいて、前記第１のスレッドのつぎに前記第２のスレッドが実行された場合の前記第２のスレッドの待機電力を算出し、算出された第１のスレッドの待機電力と算出された第２のスレッドの待機電力とに基づいて前記第１のスレッドと前記第２のスレッドとの実行順を決定する情報処理装置、情報処理プログラム、および情報処理方法が提供される。
【発明の効果】
【００１０】
本情報処理装置、情報処理プログラム、および情報処理方法によれば、スループットを下げることなく、低消費電力化を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施例を示す説明図である。
【図２】第１のスレッドに実行期限が定義されている場合の説明図である。
【図３】情報処理装置のハードウェアを示すブロック図である。
【図４】スレッドテーブル４００の一例を示す説明図である。
【図５】割当管理テーブル５００の一例を示す説明図である。
【図６】情報処理装置３００の機能ブロック図である。
【図７】スレッド＃０の生成が検出される例を示す説明図である。
【図８】割当管理テーブル５００の更新例を示す説明図である。
【図９】情報処理装置３００による情報処理手順を示すフローチャート（その１）である。
【図１０】情報処理装置３００による情報処理手順を示すフローチャート（その２）である。
【図１１】情報処理装置３００による情報処理手順を示すフローチャート（その３）である。
【図１２】図９で示した実行順の決定処理（ステップＳ９０７）の詳細な処理手順を示すフローチャート（その１）である。
【図１３】図９で示した実行順の決定処理（ステップＳ９０７）の詳細な処理手順を示すフローチャート（その２）である。
【図１４】各ＯＳによるスレッド割り当て時の情報処理手順を示すフローチャートである。
【図１５】各ＯＳによるスレッド終了時の情報処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、本発明にかかる情報処理装置、情報処理プログラム、および情報処理方法の好適な実施の形態を詳細に説明する。
【００１３】
図１は、本発明の一実施例を示す説明図である。ここでは、未実行の第１のスレッドと未実行の第２のスレッドとを例に挙げて説明する。図１では、第１のスレッドと第２のスレッドの実行前に、実行順の組み合わせごとに待機電力がどのくらいかかるかを算出し、算出結果に基づいて実行順を決定する。
【００１４】
まず、（１）実行順が第２のスレッド→第１のスレッドの順の場合、第２のスレッドの実行中には第１のスレッドは待機状態となる。よって、第１のスレッドの待機電力は下記となる。
・第１のスレッドの待機電力＝第２のスレッドの実行時間［ｍｓ］×第１のスレッドの単位時間当たりの待機電力［ｍＷ／ｍｓ］
【００１５】
つぎに、（２）実行順が第１のスレッド→第２のスレッドの順の場合、第１のスレッドの実行中には第２のスレッドは待機状態となる。よって、第２のスレッドの待機電力は下記となる。
・第２のスレッドの待機電力＝第１のスレッドの実行時間［ｍｓ］×第２のスレッドの単位時間当たりの待機電力［ｍＷ／ｍｓ］
【００１６】
そして、情報処理装置が、第１のスレッドの待機電力と第２のスレッドの待機電力とを比較する。第１のスレッドの待機電力が第２のスレッドの待機電力以上であれば、情報処理装置が、実行順を第１のスレッド→第２のスレッドに決定する。第１のスレッドの待機電力が第２のスレッドの待機電力未満であれば、情報処理装置が、実行順を第２のスレッド→第１のスレッドに決定する。
【００１７】
図２は、第１のスレッドに実行期限が定義されている場合の説明図である。図２では第１のスレッドに実行期限が定義され、第２のスレッドに実行期限が定義されていない例について説明する。ここで、第１のスレッドに実行期限が定義されているとは、第１のスレッドの生成時刻から第１のスレッドの実行期限までの時間が定義されていることを示す。
【００１８】
第１のスレッドの生成時刻から第１のスレッドの実行期限までの時間（ｄ）が定義されている場合には、実行順を第２のスレッドのつぎに第１のスレッドとした場合に第１のスレッドの実行期限を遵守できるか否かを判断する。すなわち、下記となるか否かが判断される。
・ｄ−第１のスレッドの実行時間＞第２のスレッドの実行時間
【００１９】
図２のようにｄ−第１のスレッドの実行時間＞第２のスレッドの実行時間であれば、図１で上述したように、情報処理装置が実行順の組み合わせごとに待機するスレッドの待機時間を算出し、実行順を決定する。一方、ｄ−第１のスレッドの実行時間≦第２のスレッドの実行時間の場合、実行順が第２のスレッド→第１のスレッドであると、第１のスレッドの実行期限を遵守できないため、情報処理装置が実行順を第１のスレッド→第２のスレッドに決定する。
【００２０】
本実施の形態では情報処理装置の一例としてマルチコアプロセッサシステムを挙げて説明する。ここで、マルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００２１】
（情報処理装置のハードウェア）
図３は、情報処理装置のハードウェアを示すブロック図である。図３において、情報処理装置３００は、ＣＰＵ＃０と、ＣＰＵ＃１と、共有メモリ３０２と、を有している。ＣＰＵ＃０と、ＣＰＵ＃１と、共有メモリ３０２とは、それぞれバス３０１を介して接続されている。
【００２２】
ＣＰＵ＃０は、キャッシュと、レジスタと、コアと、を有している。ＣＰＵ＃１は、キャッシュと、レジスタと、コアと、を有している。ＣＰＵ＃０はＯＳ３１０を実行し、情報処理装置の全体の制御を司る。ＯＳ３１０はマスタＯＳであり、スレッドをどのＣＰＵに割り当てるかを制御する機能を有し、該ＣＰＵ＃０に割り当てられたスレッドを実行する。ＣＰＵ＃１はＯＳ３１１を実行する。ＯＳ３１１はスレーブＯＳであり、ＣＰＵ＃１に割り当てられたスレッドを実行する。
【００２３】
共有メモリ３０２は、具体的には、たとえば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と、フラッシュＲＯＭなどを有している。たとえば、フラッシュＲＯＭがブートプログラムを記憶し、ＲＯＭがアプリケーションソフトウェアを記憶し、ＲＡＭがＣＰＵ＃０〜ＣＰＵ＃１のワークエリアとして使用される。共有メモリ３０２に記憶されているプログラムは、各ＣＰＵにロードされることで、コーディングされている処理を該各ＣＰＵに実行させることとなる。共有メモリ３０２は、たとえば、スレッドテーブル４００と、割当管理テーブル５００と、を記憶している。
【００２４】
図４は、スレッドテーブル４００の一例を示す説明図である。スレッドテーブル４００は、スレッドの識別情報の項目４０１と、優先度の項目４０２と、デッドラインの項目と、実行時間の項目４０４と、待機電力の項目４０５と、を有している。スレッドの識別情報の項目４０１には、各スレッドの識別情報が保持されている。優先度の項目４０２には、スレッドの識別情報の項目４０１に識別情報が保持されている各スレッドの優先度が高いか否かを示す情報が保持されている。優先度が高い場合、高優先が保持され、優先度が高くない場合、低優先が保持されている。
【００２５】
デッドラインの項目４０３には、スレッドが生成された生成時刻から該スレッドの実行期限までの時間（ここでは、「デッドライン」と称する。）が保持されている。実行時間の項目４０４には、スレッドの識別情報の項目４０１に識別情報が保持されている各スレッドの実行時間が保持されている。待機電力の項目４０５には、スレッドの識別情報の項目４０１に識別情報が保持されている各スレッドの単位時間あたりの待機電力の値が保持されている。
【００２６】
スレッド＃０を例に挙げると、スレッド＃０は高優先度のスレッドであり、デッドラインが１０［ｍｓ］である。スレッド＃０の実行時間が５［ｍｓ］であり、単位時間あたりの待機電力が１００［ｍＷ／ｍｓ］である。
【００２７】
図５は、割当管理テーブル５００の一例を示す説明図である。割当管理テーブル５００は、ＣＰＵの識別情報の項目５０１と、ＬＯＣＫの項目５０２と、割当済スレッドの識別情報の項目５０３と、実行状態の項目５０４と、を有している。ＣＰＵの識別情報の項目５０１には、ＣＰＵの識別情報が保持されている。
【００２８】
ＬＯＣＫの項目５０２には、ＣＰＵの識別情報の項目５０１に識別情報が保持されているＣＰＵがＬＯＣＫされているか否かを示す情報が保持されている。ＬＯＣＫされているか否かとは、ＣＰＵに高優先度のスレッドが割り当てられているか否かを示す。ＣＰＵに高優先度のスレッドが割り当てられていなければ、ＬＯＣＫの項目５０２には０が登録され、ＣＰＵに高優先度のスレッドが割り当てられていれば、ＬＯＣＫの項目５０２には１が登録される。
【００２９】
割当済スレッドの識別情報の項目５０３には、ＣＰＵの識別情報の項目５０１に識別情報が保持されているＣＰＵに割り当てられたスレッドの識別情報が登録される。実行状態の項目５０４とは、割当済スレッドの識別情報の項目５０３に識別情報が登録されたスレッドの実行状態が登録される。実行状態としてはｅｘｅ（ｅｘｅｃｕｔｉｏｎ）またはｐｒｏｈ（ｐｒｏｈｉｂｉｔ）のいずれかが登録される。ｅｘｅはスレッドが実行可能な状態であることを示し、ｐｒｏｈはスレッドが実行禁止状態であることを示す。
【００３０】
ここで、各ＯＳは、割当管理テーブル５００によりＣＰＵ＃０にはスレッド＃１とスレッド＃３とが割り当てられ、ＣＰＵ＃１にはスレッド＃２とスレッド＃４とが割り当てられていることを特定できる。また、各ＣＰＵの割当済スレッドの識別情報は割り当てられた順に登録されているため、各ＯＳは割当管理テーブル５００内の割当済スレッドの識別情報を順にアクセスすることで、割当順を特定することができる。
【００３１】
（情報処理装置３００の機能ブロック図）
図６は、情報処理装置３００の機能ブロック図である。情報処理装置３００は、検出部６０１と、差分算出部６０２と、判断部６０３と、第１の算出部６０４と、第２の算出部６０５と、比較部６０６と、決定部６０７と、を有している。具体的には、たとえば、共有メモリ３０２に記憶され、検出部６０１〜決定部６０７の機能を有する情報処理プログラムをＣＰＵ＃０がロードする。そして、ＣＰＵ＃０がロードした該情報処理プログラムにコーディングされている処理を実行することにより、検出部６０１〜決定部６０７の機能が実現される。
【００３２】
検出部６０１は、未実行の第１のスレッドと未実行の第２のスレッドとを検出する。
【００３３】
第１の算出部６０４は、検出部６０１により検出された第２のスレッドの実行時間と検出部６０１により検出された第１のスレッドの単位時間当たりの待機電力とを乗算する。これにより、第１の算出部６０４は、第２のスレッドのつぎに第１のスレッドが実行された場合の第１のスレッドの待機電力を算出する。
【００３４】
第２の算出部６０５は、第１のスレッドの実行時間と第２のスレッドの単位時間当たりの待機電力とを乗算することにより、第１のスレッドのつぎに第２のスレッドが実行された場合の第２のスレッドの待機電力を算出する。
【００３５】
比較部６０６は、第１の算出部６０４により算出された第１のスレッドの待機電力と第２の算出部６０５により算出された第２のスレッドの待機電力とを比較する。
【００３６】
比較部６０７は、比較部６０６により比較された比較結果に基づいて第１のスレッドと第２のスレッドとの実行順を決定する。
【００３７】
また、決定部６０７は、比較部６０６により第１のスレッドの待機電力が第２のスレッドの待機電力以上であると比較された場合、実行順を第１のスレッドのつぎに第２のスレッドとする。
【００３８】
また、決定部６０７は、比較部６０６により第１のスレッドの待機電力が第２のスレッドの待機電力未満であると比較された場合、実行順を第２のスレッドのつぎに第１のスレッドとする。
【００３９】
差分算出部６０２は、検出部６０１により検出された第１のスレッドに実行期限が定義されている場合、第１のスレッドの生成時刻から実行期限までの時間と、第１のスレッドの実行時間との差分時間を算出する。
【００４０】
判断部６０３は、差分算出部６０２により算出された差分時間が第２のスレッドの実行時間より大きいか否かを判断する。
【００４１】
第１の算出部６０４は、判断部６０３により差分時間が第２のスレッドの実行時間より大きいと判断された場合、第２のスレッドの実行時間と第１のスレッドの単位時間当たりの待機電力とを乗算することにより、第１のスレッドの待機電力を算出する。
【００４２】
第２の算出部６０５は、判断部６０３により差分時間が第２のスレッドの実行時間より大きいと判断された場合、第１のスレッドの実行時間と第２のスレッドの単位時間当たりの待機電力とを乗算することにより、第２のスレッドの待機電力を算出する。
【００４３】
決定部６０７は、判断部６０３により差分時間が第２のスレッドの実行時間以下であると判断された場合、実行順を第１のスレッドのつぎに第２のスレッドとする。
【００４４】
以上を踏まえて詳細に説明する。本実施の形態では、高優先度のスレッドが生成された場合に、低優先度のスレッドと高い優先度のスレッドとの実行順を決定する例を示す。また、本実施の形態では、低優先度のスレッドのみが割り当てられているＣＰＵについては、割り当てられた順に実行することとする。
【００４５】
本実施の形態では、高優先度が割り当てられていないＣＰＵごとに実行順が決定され、最も待機電力が削減可能なＣＰＵに生成された高優先度のスレッド（対象スレッド）を割り当てることとする。
【００４６】
ここでは、実行順の決定方法を示す。まず、ＯＳ３１０が、高優先度のスレッドが割り当てられていないＣＰＵのうち、任意のＣＰＵ（対象ＣＰＵ）を選択する。そして、ＯＳ３１０が、対象ＣＰＵに割り当てられている割当済のスレッドを特定する。つぎに、ＯＳ３１０が、下記式をそれぞれ算出する。
【００４７】
・ｐｔｏｔａｌ＝０
・ｒ０＝対象スレッドのデッドライン−対象スレッドの実行時間
・ｐｓｔ＿ｈｉｇｈ（対象スレッドの待機電力）＝ｒ０×対象スレッドの単位時間あたりの待機電力［ｍＷ／ｍｓ］
・ｐｓｔ＿ｌｏｗ（割当済のスレッドの待機電力）＝対象スレッドの実行時間×（ｐ１＋ｐ２＋・・・ｐｎ）
【００４８】
ｎは割当済スレッド数であり、割当順に沿って割当済スレッドに１〜ｎの番号が付されている。ｐ１〜ｐｎは、割当済スレッドの待機電力である。よって、（ｐ１＋ｐ２＋・・・ｐｎ）は、割当済スレッドの単位時間あたりの待機電力の合計値である。
【００４９】
つぎに、ＯＳ３１０が、下記式を遵守するか否かを判断する。
・ｒ０＞（ｔ１∨ｔ２∨・・・∨ｔｎ）∧ｐｓｔ＿ｈｉｇｈ＜ｐｓｔ＿ｌｏｗ  ・・・式（１）
【００５０】
∧は論理積であり、∨は論理和である。ｔ１〜ｔｎは、割当済スレッドの実行時間である。ＯＳ３１０が、上記式（１）がＴｒｕｅである（遵守する）と、対象スレッドよりも先に実行する低優先度スレッドである割当済のスレッドを決定する。
【００５１】
そして、ＯＳ３１０が、ｒ０＞（ｔ１∨ｔ２∨・・・∨ｔｎ）となる割当済スレッドの中で、単位時間あたりの待機電力が最も大きいスレッドを対象スレッドよりも先に実行するスレッドとして選択する。ここで、たとえば、割当済スレッドの中で、１番目に割り当てられたスレッドが対象スレッドよりも先に実行するスレッド（先行スレッド）として選択されたと仮定する。
【００５２】
そして、ＯＳ３１０が、（ａ）下記式を算出する。
・ｐｔｏｔａｌ＝ｐｔｏｔａｌ＋ｔ１×ｐ０  ・・・式（２）
・ｐｓｔ＿ｈｉｇｈ＝ｐｓｔ＿ｈｉｇｈ−ｔ１×ｐ０  ・・・式（３）
・ｐｓｔ＿ｌｏｗ＝ｐｓｔ＿ｌｏｗ−ｔ１×ｐ０  ・・・式（４）
・ｒ０＝ｒ０−ｔ１  ・・・式（５）
【００５３】
そして、ＯＳ３１０が、（ｂ）下記式を遵守するか否かを判断する。
・ｐｓｔ＿ｈｉｇｈ＜ｐｓｔ＿ｌｏｗ  ・・・式（６）
【００５４】
そして、ＯＳ３１０が、（ｂ）上記式（６）を遵守すると判断した場合、ｒ０＞（ｔ２∨・・・∨ｔｎ）となる割当済スレッドの中で、単位時間あたりの待機電力が最も大きいスレッドを、先行スレッドのつぎで、対象スレッドよりも先に実行するスレッドとして選択する。
【００５５】
そして、ＯＳ３１０が、（ａ）〜（ｂ）の処理を繰り返すことで、対象ＣＰＵに割り当てた場合の実行順を決定する。そして、ＯＳ３１０が、対象ＣＰＵに対象スレッドが割り当てられた場合の実行順が決定すると、高優先度のスレッドが割り当てられていないＣＰＵのうち、対象ＣＰＵとして未選択のＣＰＵを対象ＣＰＵに選択する。そして、ＯＳ３１０が、該選択した対象ＣＰＵに対象スレッドが割り当てられた場合の実行順を決定する。
【００５６】
そして、高優先度のスレッドが割り当てられていないＣＰＵのうち、該ＣＰＵごとに算出されたｐｔｏｔａｌが最も大きい値であるＣＰＵを対象スレッドの割当先ＣＰＵに決定する。そして、決定した実行順を該割当先ＣＰＵに通知し、割当先ＣＰＵが通知された実行順に基づいて該割当先ＣＰＵに割り当てられたスレッドを実行する。
【００５７】
つぎに、具体的な数値を用いて詳細に説明する。
【００５８】
図７は、スレッド＃０の生成が検出される例を示す説明図である。まず、ＯＳ３１０が（１）スレッド＃０の生成を検出すると、スレッド＃０の優先度が高いか否かをスレッド＃０の識別情報に基づきスレッドテーブル４００を用いて判断する。ここでは、スレッド＃０の優先度は高いと判断される。つぎに、ＯＳ３１０が、マルチコアプロセッサのうち、（２）高優先度のスレッドが割り当てられていないＣＰＵを割当管理テーブル５００に基づいて特定する。ここでは、ＣＰＵ＃０とＣＰＵ＃１とが特定される。まず、ＯＳ３１０が、ＣＰＵ＃０とＣＰＵ＃１のうち、ＣＰＵ＃０を対象ＣＰＵに選択する。
【００５９】
・ｒ０（ＣＰＵ＃０）＝スレッド＃０のデッドライン−スレッド＃０の実行時間
＝１０［ｍｓ］−５［ｍｓ］
＝５［ｍｓ］
・ｐｓｔ＿ｈｉｇｈ（ＣＰＵ＃０）＝ｒ０×スレッド＃０の単位時間あたりの待機電力［ｍＷ／ｍｓ］
＝５［ｍｓ］×１００［ｍＷ／ｍｓ］
＝５００［ｍＷ］
・ｐｓｔ＿ｌｏｗ（ＣＰＵ＃０）＝スレッド＃０の実行時間×（スレッド＃１の単位時間あたりの待機電力＋スレッド＃３の単位時間あたりの待機電力）
＝５［ｍｓ］×（１００［ｍＷ／ｍｓ］＋８０［ｍＷ／ｍｓ］）
＝９００［ｍｓ］
【００６０】
つぎに、ＯＳ３１０が、上記式（１）に算出した各値を代入して上記式（１）を遵守するか否かを判断する。
・５［ｍｓ］（ｒ０（ＣＰＵ＃０））＞（３［ｍｓ］（スレッド＃１の実行時間）∨２［ｍｓ］（スレッド＃３の実行時間））∧５００［ｍＷ］（ｐｓｔ＿ｈｉｇｈ（ＣＰＵ＃０））＜９００［ｍｓ］（ｐｓｔ＿ｌｏｗ（ＣＰＵ＃０））
【００６１】
そして、ＯＳ３１０が、上記式（１）を遵守すると判断すると、ｒ０（ＣＰＵ＃０）＞（３［ｍｓ］（スレッド＃１の実行時間）∨２［ｍｓ］（スレッド＃３の実行時間））となる割当済スレッドの中で、単位時間あたりの待機電力が最大のスレッドを特定する。そして、ＯＳ３１０が、特定したスレッドをスレッド＃０よりも先に実行するスレッドとして選択する。なお、選択結果を実行順情報として、共有メモリ３０２などの記憶領域に出力する。
・ＣＰＵ＃０の実行順情報：スレッド＃１
【００６２】
そして、ＯＳ３１０が、上記式（２）〜（６）を算出する。
・ｐｔｏｔａｌ（ＣＰＵ＃０）＝ｐｔｏｔａｌ（ＣＰＵ＃０）＋スレッド＃１の実行時間×スレッド＃０の単位時間あたりの待機電力
＝０＋３［ｍｓ］×１００［ｍＷ／ｍｓ］
＝３００［ｍＷ］
・ｐｓｔ＿ｈｉｇｈ（ＣＰＵ＃０）＝ｐｓｔ＿ｈｉｇｈ（ＣＰＵ＃０）−スレッド＃１の実行時間×スレッド＃０の単位時間あたりの待機電力
＝５００［ｍＷ］−３［ｍｓ］×１００［ｍＷ／ｍｓ］
＝２００［ｍＷ］
・ｐｓｔ＿ｌｏｗ（ＣＰＵ＃０）＝ｐｓｔ＿ｌｏｗ（ＣＰＵ＃０）−スレッド＃１の実行時間×スレッド＃０の単位時間あたりの待機電力
＝９００［ｍｓ］−３［ｍｓ］×１００［ｍＷ／ｍｓ］
＝６００［ｍＷ］
・ｒ０（ＣＰＵ＃０）＝ｒ０（ＣＰＵ＃０）−スレッド＃１の実行時間
＝５［ｍｓ］−３［ｍｓ］
＝２［ｍｓ］
【００６３】
そして、ＯＳ３１０が、上記式（６）を遵守するか否かを判断する。
・２００［ｍＷ］＜６００［ｍＷ］
【００６４】
そして、ＯＳ３１０が、上記式（６）を遵守すると判断し、ｒ０（ＣＰＵ＃０）＞（スレッド＃３の実行時間）となる割当済スレッドの中で、単位時間あたりの待機電力が最も大きいスレッドを、先行スレッドのつぎで、対象スレッドよりも先に実行するスレッドとして選択する。そして、選択結果を上述のＣＰＵ＃０の実行順情報に追加する。
・ＣＰＵ＃０の実行順情報：スレッド＃１→スレッド＃３
【００６５】
そして、ＯＳ３１０が、上記式（２）を算出する。
・ｐｔｏｔａｌ（ＣＰＵ＃０）＝ｐｔｏｔａｌ（ＣＰＵ＃０）＋スレッド＃３の実行時間×スレッド＃０の単位時間あたりの待機電力
＝３００［ｍＷ］＋２［ｍｓ］×１００［ｍＷ／ｍｓ］
＝５００［ｍＷ］
【００６６】
ここで、ＣＰＵ＃０に割り当てられているスレッドがスレッド＃１とスレッド＃３のみであるため、ＣＰＵ＃０の実行順情報にスレッド＃０を追加する。
・ＣＰＵ＃０の実行順情報：スレッド＃１→スレッド＃３→スレッド＃０
【００６７】
つぎに、ＯＳ３１０が、ＣＰＵ＃０とＣＰＵ＃１のうち、ＣＰＵ＃１を対象ＣＰＵに選択する。
【００６８】
・ｒ０（ＣＰＵ＃１）＝スレッド＃０のデッドライン−スレッド＃０の実行時間
＝１０［ｍｓ］−５［ｍｓ］
＝５［ｍｓ］
・ｐｓｔ＿ｈｉｇｈ（ＣＰＵ＃１）＝ｒ０×スレッド＃０の単位時間あたりの待機電力［ｍＷ／ｍｓ］
＝５［ｍｓ］×１００［ｍＷ／ｍｓ］
＝５００［ｍＷ］
・ｐｓｔ＿ｌｏｗ（ＣＰＵ＃１）＝スレッド＃０の実行時間×（スレッド＃２の単位時間あたりの待機電力＋スレッド＃４の単位時間あたりの待機電力）
＝５［ｍｓ］×（５０［ｍＷ／ｍｓ］＋７０［ｍＷ／ｍｓ］）
＝６００［ｍｓ］
【００６９】
つぎに、ＯＳ３１０が、上記式（１）に算出した各値を代入して上記式（１）を遵守するか否かを判断する。
・５［ｍｓ］（ｒ０（ＣＰＵ＃１））＞（４［ｍｓ］（スレッド＃２の実行時間）∨５［ｍｓ］（スレッド＃４の実行時間））∧５００［ｍＷ］（ｐｓｔ＿ｈｉｇｈ（ＣＰＵ＃１））＜６００［ｍｓ］（ｐｓｔ＿ｌｏｗ（ＣＰＵ＃１））
【００７０】
そして、ＯＳ３１０が、上記式（１）を遵守すると判断すると、ｒ０（ＣＰＵ＃１）＞（４［ｍｓ］（スレッド＃２の実行時間））となる割当済スレッドの中で、単位時間あたりの待機電力が最大のスレッドを特定する。そして、ＯＳ３１０が、特定したスレッドをスレッド＃０よりも先に実行するスレッドとして選択する。なお、選択結果を実行順情報として、共有メモリ３０２などの記憶領域に出力する。
・ＣＰＵ＃１の実行順情報：スレッド＃２
【００７１】
そして、ＯＳ３１０が、上記式（２）を算出する。
・ｐｔｏｔａｌ（ＣＰＵ＃１）＝ｐｔｏｔａｌ（ＣＰＵ＃１）＋スレッド＃２の実行時間×スレッド＃０の単位時間あたりの待機電力
＝０＋４［ｍｓ］×１００［ｍＷ／ｍｓ］
＝４００［ｍＷ］
【００７２】
ここで、ｒ０（ＣＰＵ＃１）未満であるスレッドがスレッド＃２のみであるため、ＣＰＵ＃１の実行順情報にスレッド＃０を登録し、さらに、スレッド＃４を登録する。
・ＣＰＵ＃１の実行順情報：スレッド＃２→スレッド＃０→スレッド＃４
【００７３】
つぎに、ＯＳ３１０がＣＰＵ＃０とＣＰＵ＃１のうち、ｐｔｏｔａｌが大きいＣＰＵをスレッド＃０の割当先ＣＰＵに決定する。ここでは、ｐｔｏｔａｌ（ＣＰＵ＃０）が５００［ｍＷ］であり、ｐｔｏｔａｌ（ＣＰＵ＃１）が４００［ｍＷ］であるため、ＣＰＵ＃０がスレッド＃０の割当先ＣＰＵに決定される。
【００７４】
図８は、割当管理テーブル５００の更新例を示す説明図である。ＯＳ３１０が、割当管理テーブル５００内のＣＰＵの識別情報がＣＰＵ＃０に、割当済スレッドの識別情報の項目５０３にスレッド＃０の識別情報を登録する。そして、ＯＳ３１０が、スレッド＃１の実行状態の項目５０４にｅｘｅを設定し、スレッド＃３の実行状態の項目５０４にｐｒｏｈを設定し、スレッド＃０の実行状態の項目５０４にｐｒｏｈを設定する。そして、ＯＳ３１０が、スレッド＃１の実行を開始する。
【００７５】
（情報処理手順）
図９〜１１は、情報処理装置３００による情報処理手順を示すフローチャートである。実行主体はマスタＯＳであるＯＳ３１０である。まず、ＯＳ３１０が、スレッドの生成を検出したか否かを判断する（ステップＳ９０１）。ＯＳ３１０が、スレッドの生成を検出していないと判断した場合（ステップＳ９０１：Ｎｏ）、ステップＳ９０１へ戻る。ＯＳ３１０が、スレッドの生成を検出したと判断した場合（ステップＳ９０１：Ｙｅｓ）、生成されたスレッド（対象スレッド）が高優先度スレッドであるか否かを判断する（ステップＳ９０２）。
【００７６】
ＯＳ３１０が、対象スレッドが高優先度スレッドであると判断した場合（ステップＳ９０２：Ｙｅｓ）、高優先度スレッドの割り当てに関するロックがかかっていないＣＰＵを特定する（ステップＳ９０３）。そして、ＯＳ３１０が、高優先度スレッドの割り当てに関するロックがかかっていないＣＰＵを特定できたか否かを判断する（ステップＳ９０４）。
【００７７】
ＯＳ３１０が、高優先度スレッドの割り当てに関するロックがかかっていないＣＰＵを特定できたと判断した場合（ステップＳ９０４：Ｙｅｓ）、ロックがかかっていないＣＰＵのうち、未選択なＣＰＵがあるか否かを判断する（ステップＳ９０５）。
【００７８】
ＯＳ３１０が、未選択なＣＰＵがあると判断した場合（ステップＳ９０５：Ｙｅｓ）、未選択なＣＰＵから任意のＣＰＵを対象ＣＰＵに選択する（ステップＳ９０６）。そして、ＯＳ３１０が、実行順の決定処理を実行し（ステップＳ９０７）、対象ＣＰＵの識別情報と実行順情報とｐｔｏｔａｌとを関連付けて出力し（ステップＳ９０８）、ステップＳ９０５へ戻る。
【００７９】
ＯＳ３１０が、対象スレッドが高優先度スレッドでないと判断した場合（ステップＳ９０２：Ｎｏ）、最小負荷のＣＰＵを特定する（ステップＳ９０９）。そして、ＯＳ３１０が、対象スレッドの割当先ＣＰＵを特定した最小負荷のＣＰＵに設定し（ステップＳ９１０）、ステップＳ９０１へ戻る。
【００８０】
ＯＳ３１０が、高優先度スレッドの割り当てに関するロックがかかっていないＣＰＵを特定できなかったと判断した場合（ステップＳ９０４：Ｎｏ）、未選択なＣＰＵがあるか否かを判断する（ステップＳ９１１）。そして、ＯＳ３１０が、未選択なＣＰＵがあると判断した場合（ステップＳ９１１：Ｙｅｓ）、未選択なＣＰＵから任意のＣＰＵを選択する（ステップＳ９１２）。
【００８１】
ＯＳ３１０が、選択したＣＰＵの実行順情報に登録されたスレッドを抽出し（ステップＳ９１３）、抽出したスレッドの実行時間の合計値を算出する（ステップＳ９１４）。ＯＳ３１０が、抽出したスレッドの実行時間の合計値＜対象スレッドのデッドライン（ｄ０）−対象スレッドの実行時間（ｔ０）であるか否かを判断する（ステップＳ９１５）。
【００８２】
ＯＳ３１０が、抽出したスレッドの実行時間の合計値＜ｄ０−ｔ０であると判断した場合（ステップＳ９１５：Ｙｅｓ）、対象ＣＰＵを、ｄ０を遵守可能なＣＰＵに決定し（ステップＳ９１６）、ステップＳ９１１へ戻る。一方、抽出したスレッドの実行時間の合計値＜ｄ０−ｔ０でないと判断した場合（ステップＳ９１５：Ｎｏ）、ステップＳ９１１へ戻る。
【００８３】
ＯＳ３１０が、未選択なＣＰＵがないと判断した場合（ステップＳ９１１：Ｎｏ）、ｄ０を遵守可能なＣＰＵがあるか否かを判断する（ステップＳ９１７）。ＯＳ３１０が、ｄ０を遵守可能なＣＰＵがあると判断した場合（ステップＳ９１７：Ｙｅｓ）、ｄ０を遵守可能なＣＰＵのうち、未選択なＣＰＵがあるか否かを判断する（ステップＳ９１８）。
【００８４】
ＯＳ３１０が、ｄ０を遵守可能なＣＰＵのうち、未選択なＣＰＵがあると判断した場合（ステップＳ９１８：Ｙｅｓ）、未選択なＣＰＵから任意のＣＰＵを対象ＣＰＵに選択する（ステップＳ９１９）。そして、ＯＳ３１０が、実行順の決定処理を実行し（ステップＳ９２０）、対象ＣＰＵの識別情報と実行順情報とｐｔｏｔａｌとを関連付けて出力し（ステップＳ９２１）、ステップＳ９０５へ戻る。
【００８５】
ステップＳ９１８において、ＯＳ３１０が、ｄ０を遵守可能なＣＰＵのうち、未選択なＣＰＵがないと判断した場合（ステップＳ９１８：Ｎｏ）、ｄ０を遵守可能なＣＰＵのうち、最もｐｔｏｔａｌの値が大きいＣＰＵを特定する（ステップＳ９２２）。そして、ＯＳ３１０が、特定したＣＰＵの実行順情報を特定したＣＰＵに通知し（ステップＳ９２３）、対象スレッドの割当先ＣＰＵを特定したＣＰＵに設定し（ステップＳ９２４）、ステップＳ９０１へ戻る。
【００８６】
ＯＳ３１０が、ｄ０を遵守可能なＣＰＵがないと判断した場合（ステップＳ９１７：Ｎｏ）、各ＣＰＵに割当済の高優先度のスレッドのうち、実行時間が最小のスレッドを特定する（ステップＳ９２５）。つぎに、ＯＳ３１０が、特定したスレッドの割当先ＣＰＵを対象スレッドの割当先ＣＰＵに設定し（ステップＳ９２６）、実行順情報の破棄指示に対象スレッドの割当先ＣＰＵに通知し（ステップＳ９２７）、ステップＳ９０１へ戻る。
【００８７】
ステップＳ９０５において、ＯＳ３１０が、未選択なＣＰＵがないと判断した場合（ステップＳ９０５：Ｎｏ）、ロックがかかっていないＣＰＵのうち、最もｐｔｏｔａｌの値が大きいＣＰＵを特定する（ステップＳ９２８）。そして、ＯＳ３１０が、特定したＣＰＵの実行順情報を特定したＣＰＵに通知し（ステップＳ９２９）、対象スレッドの割当先ＣＰＵを特定したＣＰＵに設定し（ステップＳ９３０）、ステップＳ９０１へ戻る。
【００８８】
図１２および図１３は、図９で示した実行順の決定処理（ステップＳ９０７）の詳細な処理手順を示すフローチャートである。実行順の決定処理がステップＳ９０７またはステップＳ９２０の場合、実行主体はＯＳ３１０であるが、実行順の決定処理がステップＳ１５１１（図１５）の処理の場合、実行主体は各ＯＳである。まず、ＯＳが、ｒ０＝対象スレッドのデッドライン（ｄ０）−対象スレッドの実行時間（ｔ０）を算出し（ステップＳ１２０１）、ｐｓｔ＿ｈｉｇｈ＝ｒ０×対象スレッドの単位時間あたりの待機電力（ｐ０）を算出する（ステップＳ１２０２）。
【００８９】
つぎに、ＯＳが、ｐｔｏｔａｌ＝０とし（ステップＳ１２０３）、ｍ＝１とし（ステップＳ１２０４）、対象ＣＰＵに割当済のＣＰＵを特定する（ステップＳ１２０５）。ＯＳが、特定した割当済のスレッドのうち、ｒ０よりも実行時間が小さいスレッドを特定する（ステップＳ１２０６）。そして、ＯＳが、ｒ０よりも実行時間が小さいスレッドを特定できたか否かを判断する（ステップＳ１２０７）。
【００９０】
ＯＳが、ｒ０よりも実行時間が小さいスレッドを特定できたと判断した場合（ステップＳ１２０７：Ｙｅｓ）、割当済のスレッドの待機電力の合計値（ｐｓｕｍ）を算出する（ステップＳ１２０８）。ＯＳが、ｐｓｔ＿ｌｏｗ＝ｐｓｕｍ×ｔ０を算出し（ステップＳ１２０９）、ｐｓｔ＿ｈｉｇｈ＞ｐｓｔ＿ｌｏｗであるか否かを判断する（ステップＳ１２１０）。
【００９１】
ＯＳが、ｐｓｔ＿ｈｉｇｈ＞ｐｓｔ＿ｌｏｗであると判断した場合（ステップＳ１２１０：Ｙｅｓ）、ｒ０よりも実行時間が小さいスレッドのうち、未選択なスレッドがあるか否かを判断する（ステップＳ１２１１）。ＯＳが、未選択なスレッドがあると判断した場合（ステップＳ１２１１：Ｙｅｓ）、未選択なスレッドのうち、最も単位時間あたりの待機電力が大きいスレッドを選択する（ステップＳ１２１２）。
【００９２】
そして、ＯＳが、選択したスレッドの識別情報とｍの値とを関連付けて実行順情報に出力する（ステップＳ１２１３）。ＯＳが、ｐｔｏｔａｌ＝ｐｔｏｔａｌ＋ｔ０×選択したスレッドの単位時間当たりの待機電力を算出し（ステップＳ１２１４）、ｐｓｔ＿ｌｏｗ＝ｐｓｔ＿ｌｏｗ−ｔ０×選択したスレッドの単位時間当たりの待機電力を算出する（ステップＳ１２１５）。
【００９３】
ＯＳが、ｐｓｔ＿ｈｉｇｈ＝ｐｓｔ＿ｈｉｇｈ−選択したスレッドの実行時間×ｐ０を算出し（ステップＳ１２１６）、ｍ＝ｍ＋１とし（ステップＳ１２１７）、ステップＳ１２１１へ戻る。
【００９４】
ステップＳ１２０７において、ＯＳが、ｒ０よりも実行時間が小さいスレッドを特定できなかったと判断した場合（ステップＳ１２０７：Ｎｏ）、対象スレッドの識別情報とｍの値とを関連付けて実行順情報に出力し（ステップＳ１２１８）、ステップＳ９０８へ移行する。
【００９５】
また、ステップＳ１２１０において、ＯＳが、ｐｓｔ＿ｈｉｇｈ＞ｐｓｔ＿ｌｏｗでないと判断した場合（ステップＳ１２１０：Ｎｏ）、ステップＳ１２１８へ移行する。
【００９６】
また、ステップＳ１２１１において、ＯＳが、未選択なスレッドがないと判断した場合（ステップＳ１２１１：Ｎｏ）、ステップＳ１２１８へ移行する。
【００９７】
図１４は、各ＯＳによるスレッド割り当て時の情報処理手順を示すフローチャートである。まず、ＯＳが、実行順情報の通知を受け付け、実行順情報の破棄指示を受け付け、またはスレッドの割り当てを検出したか否かを判断する（ステップＳ１４０１）。ＯＳが、実行順情報の通知を受け付け、実行順情報の破棄指示を受け付け、およびスレッドの割り当てを検出していないと判断した場合（ステップＳ１４０１：Ｎｏ）、ステップＳ１４０１へ戻る。
【００９８】
ＯＳが、実行順情報の通知を受け付けたと判断した場合（ステップＳ１４０１：実行順情報の通知）、保存済の実行順情報を破棄し、受け付けた実行順情報を保存する（ステップＳ１４０２）。
【００９９】
ＯＳが、スレッドの割り当てを検出したと判断した場合（ステップＳ１４０１：スレッドの割り当て）、割り当てを検出したスレッドが高優先度スレッドであるか否かを判断する（ステップＳ１４０３）。ＯＳが、割り当てを検出したスレッドが高優先度スレッドであると判断した場合（ステップＳ１４０３：Ｙｅｓ）、高優先度スレッドの割り当てに関するロックをかける（ステップＳ１４０４）。
【０１００】
そして、ＯＳが、実行順情報内の先頭スレッドの実行状態をｅｘｅに設定する（ステップＳ１４０５）、実行順情報内の先頭スレッドを除く割当済スレッドの実行状態をｐｒｏｈに設定する（ステップＳ１４０６）。つぎに、ＯＳが、実行順情報内の先頭スレッドの実行を開始し（ステップＳ１４０７）、ステップＳ１４０１へ戻る。
【０１０１】
ステップＳ１４０３において、ＯＳが、割り当てを検出したスレッドが高優先度スレッドでないと判断した場合（ステップＳ１４０３：Ｎｏ）、高優先度スレッドの割り当てに関するロックがかかっているか否かを判断する（ステップＳ１４０８）。ＯＳが、高優先度スレッドの割り当てに関するロックがかかっていると判断した場合（ステップＳ１４０８：Ｙｅｓ）、割り当てを検出したスレッドが実行順情報内の先頭スレッドであるか否かを判断する（ステップＳ１４０９）。
【０１０２】
そして、ＯＳが、割り当てを検出したスレッドが実行順情報内の先頭スレッドでないと判断した場合（ステップＳ１４０９：Ｎｏ）、検出したスレッドの実行状態をｐｒｏｈに設定し（ステップＳ１４１０）、ステップＳ１４０１へ戻る。ＯＳが、割り当て指示を検出したスレッドが実行順情報内の先頭スレッドであると判断した場合（ステップＳ１４０９：Ｙｅｓ）、検出したスレッドの実行状態をｅｘｅに設定し（ステップＳ１４１１）、ステップＳ１４０１へ戻る。
【０１０３】
ステップＳ１４０８において、ＯＳが、高優先度スレッドの割り当てに関するロックがかかっていないと判断した場合（ステップＳ１４０８：Ｎｏ）、ランキューの最後尾に検出したスレッドを登録し（ステップＳ１４１２）、ステップＳ１４０１へ戻る。
【０１０４】
ステップＳ１４０１において、ＯＳが、実行順情報の破棄指示の通知を受け付けたと判断した場合（ステップＳ１４０１：実行順情報の破棄指示の通知）、保存済の実行順情報を破棄する（ステップＳ１４１３）。そして、ＯＳが、割当済の高優先度のスレッドのうち、最も先に割り当てられたスレッドの実行を開始し（ステップＳ１４１４）、ステップＳ１４０１へ戻る。
【０１０５】
図１５は、各ＯＳによるスレッド終了時の情報処理手順を示すフローチャートである。まず、ＯＳが、スレッドの終了またはスレッドの切り替えを検出したか否かを判断する（ステップＳ１５０１）。そして、ＯＳが、スレッドの終了またはスレッドの切り替えを検出していないと判断した場合（ステップＳ１５０１：Ｎｏ）、ステップＳ１５０１に戻る。
【０１０６】
ＯＳが、スレッドの終了を検出したと判断した場合（ステップＳ１５０１：スレッドの終了）、終了したスレッドが高優先度スレッドであるか否かを判断する（ステップＳ１５０２）。ＯＳが、終了したスレッドが高優先度スレッドでないと判断した場合（ステップＳ１５０２：Ｎｏ）、高優先度スレッドの割り当てに関するロックがかかっているか否かを判断する（ステップＳ１５０３）。
【０１０７】
ＯＳが、高優先度スレッドの割り当てに関するロックがかかっていると判断した場合（ステップＳ１５０３：Ｙｅｓ）、ステップＳ１５０９に移行する。ＯＳが、高優先度スレッドの割り当てに関するロックがかかっていないと判断した場合（ステップＳ１５０３：Ｎｏ）、ステップＳ１５０５へ移行する。
【０１０８】
ＯＳが、終了したスレッドが高優先度スレッドであると判断した場合（ステップＳ１５０２：Ｙｅｓ）、割当済のスレッドの中に、終了したスレッドを除いて高優先度のスレッドがあるか否かを判断する（ステップＳ１５０４）。ＯＳが、割当済のスレッドの中に、終了したスレッドを除いて高優先度のスレッドがないと判断した場合（ステップＳ１５０４：Ｎｏ）、高優先度のスレッドの割り当てに関するロックを解除する（ステップＳ１５０５）。
【０１０９】
そして、ＯＳが、割当済のすべてのスレッドの実行状態をｅｘｅに設定し（ステップＳ１５０６）、割当済のスレッドの中で、最も割り当てが先のスレッドの実行を開始し（ステップＳ１５０７）、ステップＳ１５０１へ戻る。
【０１１０】
ステップＳ１５０４において、ＯＳが、割当済のスレッドの中に、終了したスレッドを除いて高優先度のスレッドがあると判断した場合（ステップＳ１５０４：Ｙｅｓ）、実行順情報内に未実行のスレッドがあるか否かを判断する（ステップＳ１５０８）。ＯＳが、実行順情報内に未実行のスレッドがあると判断した場合（ステップＳ１５０８：Ｙｅｓ）、実行順情報で未実行のスレッドのうち、先頭のスレッドの実行状態をｅｘｅに設定する（ステップＳ１５０９）。
【０１１１】
ＯＳが、先頭のスレッドの実行を開始し（ステップＳ１５１０）、ステップＳ１５０１へ戻る。ＯＳが、実行順情報内に未実行のスレッドがないと判断した場合（ステップＳ１５０８：Ｎｏ）、実行順の決定処理を実行し（ステップＳ１５１１）、ステップＳ１５０１へ戻る。
【０１１２】
以上説明したように、情報処理装置、情報処理プログラム、および情報処理方法によれば、第１のスレッドと第２のスレッドとが未実行の時に、各スレッドの待機電力の比較により実行順を決定する。これにより、スレッドを切り替えずに低消費電力化を図ることができる。
【０１１３】
また、第１のスレッドの待機電力が第２のスレッドの待機電力以上である場合、第１のスレッドのつぎに第２のスレッドを実行する。これにより、待機電力の大きいスレッドを先に実行でき、低消費電力化を図ることができる。
【０１１４】
また、第１のスレッドの待機電力が第２のスレッドの待機電力未満である場合、第２のスレッドのつぎに第１のスレッドを実行する。これにより、待機電力の大きいスレッドを先に実行でき、低消費電力化を図ることができる。
【０１１５】
また、第１のスレッドに実行期限が定義されている場合、第１のスレッドの前に第２のスレッドを実行しても第１のスレッドが実行期限を遵守できるか否かを判断する。そして、第１のスレッドの前に第２のスレッドを実行しても第１のスレッドが実行期限を遵守できると判断された場合において、第１のスレッドの待機電力と第２のスレッドの待機電力に基づき実行順を決定する。これにより、実行期限のあるスレッドの実行時にも、低消費電力化を図ることができる。
【０１１６】
また、第１のスレッドの前に第２のスレッドを実行したら第１のスレッドが実行期限を遵守できないと判断された場合において、実行順を第１のスレッドのつぎに第２のスレッドとすることで、第１のスレッドのスループットが下がるのを防止することができる。
【０１１７】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１１８】
（付記１）未実行の第１のスレッドと未実行の第２のスレッドとを検出する検出手段と、
前記検出手段により検出された第２のスレッドの実行時間および第１のスレッドの単位時間当たりの待機電力に基づいて、前記第２のスレッドのつぎに前記第１のスレッドが実行された場合の前記第１のスレッドの待機電力を算出する第１の算出手段と、
前記第１のスレッドの実行時間および前記第２のスレッドの単位時間当たりの待機電力に基づいて、前記第１のスレッドのつぎに前記第２のスレッドが実行された場合の前記第２のスレッドの待機電力を算出する第２の算出手段と、
前記第１の算出手段により算出された第１のスレッドの待機電力と前記第２の算出手段により算出された第２のスレッドの待機電力とに基づいて前記第１のスレッドと前記第２のスレッドとの実行順を決定する決定手段と、
を備えることを特徴とする情報処理装置。
【０１１９】
（付記２）前記決定手段は、
前記第１のスレッドの待機電力が前記第２のスレッドの待機電力以上である場合、前記実行順を前記第１のスレッドのつぎに前記第２のスレッドとすることを特徴とする付記１に記載の情報処理装置。
【０１２０】
（付記３）前記決定手段は、
前記第１のスレッドの待機電力が前記第２のスレッドの待機電力未満である場合、前記実行順を前記第２のスレッドのつぎに前記第１のスレッドとすることを特徴とする付記１に記載の情報処理装置。
【０１２１】
（付記４）前記検出手段により検出された第１のスレッドに実行期限が定義されている場合、前記第１のスレッドの生成時刻から前記実行期限までの時間と、前記第１のスレッドの実行時間との差分時間を算出する差分算出手段と、
前記差分算出手段により算出された差分時間が前記第２のスレッドの実行時間より大きいか否かを判断する判断手段と、
前記第１の算出手段は、
前記判断手段により前記差分時間が前記第２のスレッドの実行時間より大きいと判断された場合、前記第２のスレッドの実行時間と前記第１のスレッドの単位時間当たりの待機電力とを乗算することにより、前記第１のスレッドの待機電力を算出し、
前記第２の算出手段は、
前記判断手段により前記差分時間が前記第２のスレッドの実行時間より大きいと判断された場合、前記第１のスレッドの実行時間と前記第２のスレッドの単位時間当たりの待機電力とを乗算することにより、前記第２のスレッドの待機電力を算出することを特徴とする付記１または２に記載の情報処理装置。
【０１２２】
（付記５）前記決定手段は、
前記判断手段により前記差分時間が前記第２のスレッドの実行時間以下であると判断された場合、前記実行順を前記第１のスレッドのつぎに前記第２のスレッドとすることを特徴とする付記４に記載の情報処理装置。
【０１２３】
（付記６）未実行の第１のスレッドと未実行の第２のスレッドとを検出する検出工程と、
前記検出工程により検出された第２のスレッドの実行時間および第１のスレッドの単位時間当たりの待機電力に基づいて、前記第２のスレッドのつぎに前記第１のスレッドが実行された場合の前記第１のスレッドの待機電力を算出する第１の算出工程と、
前記第１のスレッドの実行時間および前記第２のスレッドの単位時間当たりの待機電力に基づいて、前記第１のスレッドのつぎに前記第２のスレッドが実行された場合の前記第２のスレッドの待機電力を算出する第２の算出工程と、
前記第１の算出工程により算出された第１のスレッドの待機電力と前記第２の算出工程により算出された第２のスレッドの待機電力とに基づいて前記第１のスレッドと前記第２のスレッドとの実行順を決定する決定工程と、
をコンピュータに実行させることを特徴とする情報処理プログラム。
【０１２４】
（付記７）未実行の第１のスレッドと未実行の第２のスレッドとを検出する検出工程と、
前記検出工程により検出された第２のスレッドの実行時間および第１のスレッドの単位時間当たりの待機電力に基づいて、前記第２のスレッドのつぎに前記第１のスレッドが実行された場合の前記第１のスレッドの待機電力を算出する第１の算出工程と、
前記第１のスレッドの実行時間および前記第２のスレッドの単位時間当たりの待機電力に基づいて、前記第１のスレッドのつぎに前記第２のスレッドが実行された場合の前記第２のスレッドの待機電力を算出する第２の算出工程と、
前記第１の算出工程により算出された第１のスレッドの待機電力と前記第２の算出工程により算出された第２のスレッドの待機電力とに基づいて前記第１のスレッドと前記第２のスレッドとの実行順を決定する決定工程と、
をコンピュータが実行することを特徴とする情報処理方法。
【符号の説明】
【０１２５】
３００  情報処理装置
６０１  検出部
６０２  差分算出部
６０３  判断部
６０４  第１の算出部
６０５  第２の算出部
６０６  比較部
６０７  決定部
【国際調査報告】
2012066620.tif 000018
2012066620.tif 000019
2012066620.tif 000020
2012066620.tif 000021