(57)【要約】  マルチコアシステム（１１０）において、マルチスレッドプログラムを実行する際、順序保証装置（１２０）が割込信号を用いてスレッドの実行順序と処理時間とを制御できるようにする。順序保証装置（１２０）は、シングルコアシステム（１３０）でマルチスレッドプログラムが正常に動作した際の、スレッドの実行順序と処理時間とを保持している。順序保証装置（１２０）は、保持したシングルコアシステム（１３０）でのスレッドの実行順序と処理時間を、マルチコアシステム（１１０）において再現することにより、マルチコアシステム（１１０）でマルチスレッドプログラムを正常に動作させることができる。
2012120654.tif 000002
【特許請求の範囲】
【請求項１】
プロファイルメモリからシングルコアシステムでの第１タスクの動作に関する第１情報を読み出し、
前記第１情報に基づいてマルチコアシステムでの第２タスクの動作に関する第２情報を算出し、
前記第２情報に基づいて前記第２タスクを実行するコアの動作環境を設定すること
を特徴とするマルチコアシステムにおけるタスクスケジューリング方法。
【請求項２】
前記第１情報は、コア、バス若しくはメモリの動作周波数、タイムスライス、またはコア、バス若しくはメモリのレイテンシ情報を含むこと
を特徴とする請求項１に記載のタスクスケジューリング方法。
【請求項３】
前記第２情報は、更に前記マルチコアシステムの動作性能に基づいて算出されること
を特徴とする請求項１または請求項２に記載のタスクスケジューリング方法。
【請求項４】
前記第２情報は、前記コアの動作周波数または電源電圧を含むこと
を特徴とする請求項１乃至請求項３の何れか一に記載のタスクスケジューリング方法。
【請求項５】
前記第１タスクの実行時に割り込みを許可する割り込み許可モードが設定されること
を特徴とする請求項１乃至請求項４の何れか一に記載のタスクスケジューリング方法。
【請求項６】
前記割り込み許可モードの設定に基づいて、前記第１タスクまたは前記第２タスクを停止すること
を特徴とする請求項５に記載のタスクスケジューリング方法。
【請求項７】
前記第１情報に基づいて前記第１タスクを実行するコアの動作環境を設定すること
を特徴とする請求項１乃至請求項６の何れか一に記載のタスクスケジューリング方法。
【請求項８】
前記第１タスクを実行するコアの動作環境を第１状態から第２状態に変更し、
前記第２情報が算出された後に、前記第１タスクの動作環境を前記第２状態から前記第１状態に変更すること
を特徴とする請求項１乃至請求項６の何れか一に記載のタスクスケジューリング方法。
【請求項９】
前記第２情報に基づいて第３タスクを実行するコアの動作環境を設定すること
を特徴とするマルチコアシステムにおけるタスクスケジューリング方法。
【請求項１０】
第１ＣＰＵ及び第２ＣＰＵとを含む複数のＣＰＵと、
シングルコアシステムでのタスクの動作に関する第１情報を格納するプロファイルメモリと、
を含み、
前記プロファイルメモリに格納される前記第１ＣＰＵに割り当てられる第１タスクの第１情報に基づいて算出された、マルチコアシステムでの前記第２ＣＰＵに割り当てられる第２タスクの動作に関する第２情報に基づく動作環境で前記第２タスクを実行させること
を特徴とするマルチコアシステム。
【請求項１１】
前記第１情報は、コア、バス若しくはメモリの動作周波数、タイムスライス、またはコア、バス若しくはメモリのレイテンシ情報を含むこと
を特徴とする請求項１０に記載のマルチコアシステム。
【請求項１２】
前記動作環境は、前記コアの動作周波数または電源電圧を含むこと
を特徴とする請求項１０または請求項１１に記載のマルチコアシステム。
【請求項１３】
前記第１タスクの実行時に設定される割り込みを許可する割り込み許可モードにおいて割り込みを受けるとともに、前記複数のＣＰＵのそれぞれに対応して設けられる割り込み制御回路を含むこと
を特徴とする請求項１０乃至請求項１２の何れか一に記載のマルチコアシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、タスクスケジューリング方法およびマルチコアシステムに関する。
【背景技術】
【０００２】
近年、多くの情報機器において、高性能および低消費電力に対する要求は大きく、高性能および低消費電力化を実現するための手段として、マルチコアプロセッサを用いたシステム開発が行われるようになってきた。また、シングルコア用に開発されたソフトウェア資産を、マルチコアシステムに流用することが行われている。【０００３】
シングルコア用に開発されたマルチタスクプログラムをそのままマルチコアシステムに流用すると、タスク間の実行順序が変動して、マルチタスクプログラムが意図しない動作をする場合がある。このため、マルチタスクプログラムが正常に動作するように、プログラムコード中に同期コードを埋め込むなどの対策が行われている。【０００４】
なお、関連する先行技術としては、例えば、タスク内のスレッドの動作時間を求めるものがある。また、スレッドを動作させる際のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の動作周波数をあらかじめ設定しておく技術がある。また、複数のスレッドに対するハードウェアスレッドプロファイラを備え、スレッドのプロファイリングデータを収集する技術がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第３８８４２３７号公報
【特許文献２】特許第４０３３０６６号公報
【特許文献３】特表２００８−５２２２９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来技術では、シングルコア用に開発されたマルチタスクプログラムをマルチコアシステムに流用する場合、マルチタスクプログラムの改変作業にかかる作業時間が増大し、ひいては開発期間の長期化を招くという問題がある。【０００７】
例えば、マルチコアタスクプログラムを解析して同期コードを埋め込むには、膨大な作業時間を要する場合がある。また、例えば、同期コードを書き込んだプログラムの品質保証の検証にも、膨大な作業時間を要する場合がある。また、例えば、プログラムコード中に同期コードを埋め込むなどの変更を行うと、ソフトウェア資産の流用性の低下を招くという問題がある。【０００８】
本発明は、上述した従来技術による問題点を解消するため、タスクの実行順序のずれを回避することができるタスクスケジューリング方法およびマルチコアシステムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、プロファイルメモリからシングルコアシステムでの第１タスクの動作に関する第１情報を読み出し、第１情報に基づいてマルチコアシステムでの第２タスクの動作に関する第２情報を算出し、第２情報に基づいて第２タスクを実行するコアの動作環境を設定するタスクスケジューリング方法が提案される。【００１０】
また、上述した課題を解決し、目的を達成するため、本発明の一側面によれば、第１ＣＰＵ及び第２ＣＰＵとを含む複数のＣＰＵと、シングルコアシステムでのタスクの動作に関する第１情報を格納するプロファイルメモリと、を含み、プロファイルメモリに格納される第１ＣＰＵに割り当てられる第１タスクの第１情報に基づいて算出された、マルチコアシステムでの第２ＣＰＵに割り当てられる第２タスクの動作に関する第２情報に基づく動作環境で第２タスクを実行させるマルチコアシステムが提案される。
【発明の効果】
【００１１】
本発明の一側面によれば、タスクの実行順序のずれを回避することができるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施の形態にかかるマルチコアシステムの順序保証処理の一実施例を示す説明図である。
【図２】図２は、実施の形態にかかるマルチコアシステムのシステム構成例を示す説明図である。
【図３】図３は、実施の形態にかかる順序保証装置のハードウェア構成例を示すブロック図である。
【図４】図４は、プロファイル情報の具体例を示す説明図である。
【図５】図５は、実施の形態にかかる順序保証装置の機能的構成を示すブロック図である。
【図６】図６は、実施の形態の実施例１にかかるＣＰＵの実行制御処理手順を示すフローチャート（その１）である。
【図７】図７は、実施の形態の実施例１にかかるＣＰＵの実行制御処理手順を示すフローチャート（その２）である。
【図８】図８は、実施の形態の実施例１にかかる順序保証装置の順序保証処理手順を示すフローチャート（その１）である。
【図９】図９は、実施の形態の実施例１にかかる順序保証装置の順序保証処理手順を示すフローチャート（その２）である。
【図１０】図１０は、実施例１にかかるマルチコアシステムの実行制御例を示す説明図である。
【図１１】図１１は、実施の形態の実施例２にかかるＣＰＵの実行制御処理手順を示すフローチャートである。
【図１２】図１２は、実施の形態の実施例２にかかる順序保証装置の順序保証処理手順を示すフローチャート（その１）である。
【図１３】図１３は、実施の形態の実施例２にかかる順序保証装置の順序保証処理手順を示すフローチャート（その２）である。
【図１４】図１４は、実施の形態の実施例２にかかる順序保証装置の順序保証処理手順を示すフローチャート（その３）である。
【図１５】図１５は、実施例２にかかるマルチコアシステムの実行制御例を示す説明図である。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、この発明にかかるタスクスケジューリング方法およびマルチコアシステムの実施の形態を詳細に説明する。なお、本実施の形態にかかるタスクスケジューリング方法を実行するマルチコアシステムとして、コアが複数搭載されたマルチコアプロセッサを含むマルチコアシステムを例に挙げて説明する。マルチコアプロセッサは、コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。ただし、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１４】
（マルチコアシステム１１０の順序保証処理）
図１は、実施の形態にかかるマルチコアシステムの順序保証処理の一実施例を示す説明図である。図１において、マルチコアシステム１１０は、複数のＣＰＵ（図１の例では、ＣＰＵ１１２−１、ＣＰＵ１１２−２）と、順序保証装置１２０と、を含む。
【００１５】
ここで、マルチコアシステム１１０は、タスク＄０とタスク＄１とを含むマルチタスクプログラムを実行する。タスク＄０とタスク＄１は、依存性のあるタスク群である。タスクとは、処理の実行単位であり、一つ以上のスレッドを含む。
【００１６】
依存性のあるタスク群とは、各タスクが扱うデータ間に依存性があるタスク群である。例えば、他のタスクで作成されたデータを使用するタスクおよび作成したデータを使用されるタスクが、依存性のあるタスク群である。ここでは、タスク＄０とタスク＄１とを含むマルチタスクプログラムは、シングルコア用に開発されたプログラムであり、シングルコアで実行する場合には正常に動作するプログラムである。
【００１７】
順序保証装置１２０は、ＣＰＵが実行するタスクの実行順序および処理時間を制御する。スケジューラ１１１は、ＣＰＵが実行するタスクのスケジューリング処理を行う。
【００１８】
以下、マルチコアシステム１１０の順序保証処理手順の一実施例について説明する。ここでは、ＣＰＵ１１２−１にタスク＄０が割り当てられ、ＣＰＵ１１２−２にタスク＄１が割り当てられている場合を想定する。
【００１９】
（１）スケジューラ１１１は、タスク＄０とタスク＄１とを含むマルチタスクプログラムの順序保証要求を順序保証装置１２０に通知する。順序保証要求には、例えば、順序保証の対象となるタスク＄０を識別するタスクＩＤとタスク＄１を識別するタスクＩＤとが含まれている。
【００２０】
（２）順序保証装置１２０は、スケジューラ１１１から順序保証要求を受け付けた場合、タイマ１２１による計時を開始する。
【００２１】
（３）順序保証装置１２０は、プロファイル情報１４０を参照して、マルチコアシステム１１０のＣＰＵ１１２−１とＣＰＵ１１２−２との動作周波数を、シングルコアシステム１３０のＣＰＵ１３１の動作周波数に設定する。ここで、プロファイル情報１４０とは、シングルコアシステム１３０でのタスクの動作に関する情報を含むものである。
【００２２】
具体的には、例えば、プロファイル情報１４０には、シングルコアシステム１３０においてタスク＄０とタスク＄１とが正常動作した際の、ＣＰＵ１３１の動作周波数を示す情報が含まれている。ここでは、プロファイル情報１４０には、シングルコアシステム１３０においてタスク＄０とタスク＄１とが正常動作した際の、ＣＰＵ１３１の動作周波数「３００ＭＨｚ」が含まれている。
【００２３】
このため、順序保証装置１２０は、マルチコアシステム１１０のＣＰＵ１１２−１とＣＰＵ１１２−２との動作周波数を、シングルコアシステム１３０のＣＰＵ１３１の動作周波数「３００ＭＨｚ」に設定する。これにより、マルチコアシステム１１０において、シングルコアシステム１３０においてタスク＄０とタスク＄１とが正常動作した際の動作環境を再現する。
【００２４】
（４）順序保証装置１２０は、プロファイル情報１４０を参照して、ＣＰＵ１１２−１にタスク＄０の実行開始を要求する割込信号Ｂを通知する。ここで、プロファイル情報１４０には、シングルコアシステム１３０においてタスク＄０とタスク＄１とが正常動作した際の、タスクの実行順序と各タスクの処理時間（タイムスライス）を示す情報が含まれている。
【００２５】
具体的には、例えば、プロファイル情報１４０には、シングルコアシステム１３０のＣＰＵ１３１においてタスク＄０が時点「ｔ０」でディスパッチされたことを示す情報が含まれている。また、プロファイル情報１４０には、タスク＄１が時点「ｔ１」でディスパッチされたことを示す情報が含まれている。また、プロファイル情報１４０には、タスク＄０が時点「ｔ２」でディスパッチされたことを示す情報が含まれている。
【００２６】
ここで、ディスパッチとは、タスクに実行権を渡すことである。タスクは、ディスパッチされることにより実行開始される。すなわち、ディスパッチされた順にタスクを時系列に並べた順序が、タスクの実行順序となる。ここでは、タスク＄０、タスク＄１の実行順序は、「タスク＄０、タスク＄１、タスク＄０」となる。
【００２７】
また、タスク＄０は時点「ｔ０」でディスパッチされて実行開始される。そして、タスク＄１が時点「ｔ１」でディスパッチされるまで、タスク＄０は実行され続ける。よって、タスク＄０の処理時間は、例えば、時点「ｔ１」から時点「ｔ０」を減算することにより求められる。すなわち、タスク＄０の処理時間は「ｔ１−ｔ０」である。また、タスク＄１の処理時間は「ｔ２−ｔ１」である。
【００２８】
具体的には、例えば、順序保証装置１２０は、シングルコアシステム１３０において時点「ｔ０」でディスパッチされたタスク＄０の実行開始を要求する割込信号ＢをＣＰＵ１１２−１に通知する。なお、以下の説明では、マルチコアシステム１１０においてタスク＄０の実行開始を要求する割込信号ＢをＣＰＵ１１２−１に通知した時点を「時点Ｔ０」と表記する。
【００２９】
（５）順序保証装置１２０は、プロファイル情報１４０を参照して、ＣＰＵ１１２−１にタスク＄０の実行停止を要求する割込信号Ｃを通知する。具体的には、例えば、順序保証装置１２０は、タイマ１２１によって計時された時間を参照して、時点Ｔ０からタスク＄０の処理時間「ｔ１−ｔ０」が経過した際（以下、「時点Ｔ１」と表記する）に、タスク＄０の実行停止を要求する割込信号ＣをＣＰＵ１１２−１に通知する。
【００３０】
また、順序保証装置１２０は、プロファイル情報１４０を参照して、ＣＰＵ１１２−２にタスク＄１の実行開始を要求する割込信号Ｂを通知する。具体的には、例えば、順序保証装置１２０は、時点Ｔ０からタスク＄０の処理時間「ｔ１−ｔ０」が経過した際（時点Ｔ１）に、タスク＄１の実行開始を要求する割込信号ＢをＣＰＵ１１２−２に通知する。
【００３１】
これにより、マルチコアシステム１１０において、シングルコアシステム１３０におけるタスク＄０とタスク＄１との実行の切替を再現する。
【００３２】
（６）順序保証装置１２０は、プロファイル情報１４０を参照して、ＣＰＵ１１２−２にタスク＄１の実行停止を要求する割込信号Ｃを通知する。具体的には、例えば、順序保証装置１２０は、時点Ｔ１からタスク＄１の処理時間「ｔ２−ｔ１」が経過した際（以下、「時点Ｔ２」と表記する）に、タスク＄１の実行停止を要求する割込信号ＣをＣＰＵ１１２−２に通知する。
【００３３】
また、順序保証装置１２０は、プロファイル情報１４０を参照して、ＣＰＵ１１２−１にタスク＄０の実行開始を要求する割込信号Ｂを通知する。具体的には、例えば、順序保証装置１２０は、時点Ｔ１からタスク＄１の処理時間「ｔ２−ｔ１」が経過した際（時点Ｔ２）に、タスク＄０の実行開始を要求する割込信号ＢをＣＰＵ１１２−１に通知する。
【００３４】
これにより、マルチコアシステム１１０において、シングルコアシステム１３０におけるタスク＄０とタスク＄１との実行の切替を再現する。
【００３５】
このように、実施の形態にかかるマルチコアシステム１１０によれば、シングルコアシステム１３０において正常動作したタスク＄０とタスク＄１の実行順序および処理時間を再現して、タスク＄０とタスク＄１を正常動作させることができる。
【００３６】
具体的には、例えば、マルチコアシステム１１０によれば、シングルコアシステム１３０においてタスク＄０とタスク＄１とが正常動作したＣＰＵ１３１の動作周波数を、ＣＰＵ１１２−１とＣＰＵ１１２−２との動作周波数に設定することができる。これにより、マルチコアシステム１１０において、タスク＄０とタスク＄１とが正常動作したシングルコアシステム１３０の動作環境を再現することができる。
【００３７】
また、マルチコアシステム１１０によれば、割込信号Ｂおよび割込信号Ｃを用いて、各ＣＰＵ１１２−１，１１２−２により実行される各タスク＄０，＄１の実行開始および実行停止を制御することができる。また、マルチコアシステム１１０によれば、シングルコアシステム１３０におけるタスク＄０とタスク＄１の実行順序および処理時間に従って、割込信号Ｂおよび割込信号ＣをＣＰＵ１１２−１，１１２−２に通知することができる。これにより、マルチコアシステム１１０において、シングルコアシステム１３０におけるタスク＄０とタスク＄１の実行順序および処理時間を再現することができる。
【００３８】
なお、上述した説明では、順序保証の対象として、複数のタスクを例に挙げて説明したが、これに限らない。例えば、各スレッドが扱うデータ間に依存性がある複数のスレッドを、順序保証の対象としてもよい。以下の説明では、順序保証の対象となる複数のスレッドを含むタスク（以下、「対象タスク」という）を例に挙げて説明する。また、順序保証の対象になっていないタスクを「非対象タスク」という。
【００３９】
（マルチコアシステム１１０のシステム構成例）
次に、図２を用いて、実施の形態にかかるマルチコアシステム１１０のシステム構成例について説明する。
【００４０】
図２は、実施の形態にかかるマルチコアシステムのシステム構成例を示す説明図である。図２において、マルチコアシステム１１０は、ＣＰＵ１１２−１〜ＣＰＵ１１２−ｎと、割込コントローラ２０１−１〜割込コントローラ２０１−ｎと、１次キャッシュ２０２−１〜１次キャッシュ２０２−ｎと、スヌープ回路２０３と、メモリコントローラ２０４と、メモリ２０５と、ＰＭＵ（Ｐｏｗｅｒ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）２０６と、クロック供給回路２０７と、順序保証装置１２０と、を有している。
【００４１】
マルチコアシステム１１０において、ＣＰＵ１１２−１〜ＣＰＵ１１２−ｎと、１次キャッシュ２０２−１〜１次キャッシュ２０２−ｎと、スヌープ回路２０３と、メモリコントローラ２０４と、ＰＭＵ２０６と、クロック供給回路２０７と、順序保証装置１２０とは、バス２００を介して接続されている。
【００４２】
なお、ｎは、マルチコアシステム１１０内のＣＰＵの個数を表す１以上の自然数である。また、以下の説明では、ＣＰＵ１１２−１〜ＣＰＵ１１２−ｎのうち任意のＣＰＵを「ＣＰＵ１１２−ｉ」と表記する（ｉ＝１，２，…，ｎ）。
【００４３】
ＣＰＵ１１２−ｉは、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）２１１−ｉを実行する。具体的には、例えば、ＣＰＵ１１２−１は、ＯＳ２１１−１を実行し、マルチコアシステム１１０の全体の制御を司る。ＯＳ２１１−１は、マスタＯＳであり、タスクをどのＣＰＵに割り当てるかを制御するスケジューラ２１３−１を備えている。また、ＣＰＵ１１２−１は、割り当てられたタスクを実行する。ＣＰＵ１１２−２〜ＣＰＵ１１２−ｎは、それぞれＯＳ２１１−２〜ＯＳ２１１−ｎを実行し、各ＯＳに割り当てられたタスクを実行する。ＯＳ２１１−２〜ＯＳ２１１−ｎは、スレーブＯＳである。
【００４４】
割込コントローラ２０１−ｉは、順序保証装置１２０からの割込信号を受け付けると、該割込信号に対応する割込ハンドラ２１２−ｉをＣＰＵ１１２−ｉに呼び出させる。割込ハンドラ２１２−ｉは、ＯＳ２１１−ｉ上で動作するプログラムであり、割込信号を受信した際に実行される。割込ハンドラ２１２−ｉは、ＣＰＵ１１２−ｉが順序保証装置１２０の割込信号を受信した際に呼び出され、該割込信号を受信したことをスケジューラ２１３−ｉに通知する。
【００４５】
スケジューラ２１３−ｉは、ＯＳ２１１−ｉ上で動作するプログラムである。スケジューラ２１３−ｉにより、ＯＳ２１１−ｉは、ＣＰＵ１１２−ｉが実行するタスクのスケジューリング処理を行う。例えば、ＯＳ２１１−ｉは、指定されたタイムスライスが満了するたびに、ＣＰＵ１１２−ｉが実行するタスクを切り替える。
【００４６】
また、スケジューラ２１３−ｉは、順序保証の対象となるタスクの実行開始要求をＯＳ２１１−ｉから受け付けた場合、ＣＰＵ１１２−ｉを順序保証装置１２０からの割込信号を受け付けるモード（以下、「割り込み許可モード」という）に切り替える。
【００４７】
１次キャッシュ２０２−ｉは、それぞれキャッシュメモリとキャッシュコントローラとを有している。１次キャッシュ２０２−ｉは、ＯＳ２１１−ｉが実行するタスクからメモリ２０５への書込処理を一時的に記憶する。１次キャッシュ２０２−ｉは、メモリ２０５から読み出されたデータを一時的に記憶する。
【００４８】
スヌープ回路２０３は、ＣＰＵ１１２−１〜ＣＰＵ１１２−ｎがアクセスする１次キャッシュ２０２−１〜１次キャッシュ２０２−ｎの整合性をとる。具体的には、例えば、スヌープ回路２０３は、１次キャッシュ２０２−１〜１次キャッシュ２０２−ｎの間で共有するデータがいずれかの１次キャッシュ２０２−ｉで更新された場合、該更新を検出して、他の１次キャッシュを更新する。
【００４９】
メモリコントローラ２０４は、メモリ２０５に対するデータのリード／ライトを制御する。メモリ２０５は、ＣＰＵ１１２−１〜ＣＰＵ１１２−ｎに共有されるメモリである。メモリ２０５は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有している。
【００５０】
より具体的には、例えば、フラッシュＲＯＭが各ＯＳのプログラムを記憶し、ＲＯＭがアプリケーションプログラムを記憶し、ＲＡＭがＣＰＵ１１２−ｉのワークエリアとして使用される。また、ＲＯＭには、プロファイル情報が記憶されている。メモリ２０５に記憶されているプログラムは、各ＣＰＵ１１２−ｉにロードされることで、コーディングされている処理を該各ＣＰＵ１１２−ｉに実行させることになる。
【００５１】
ＰＭＵ２０６は、各構成部（例えば、ＣＰＵ１１２−ｉ、バス２００、メモリ２０５）に電源電圧を供給する。また、ＰＭＵ２０６は、各構成部に供給する電源電圧を各ＣＰＵ１１２−ｉが設定可能なレジスタを有している。ＰＭＵ２０６は、レジスタに設定された値に基づいて、各構成部に電源電圧を供給する。
【００５２】
クロック供給回路２０７は、各構成部に対して動作周波数を供給する。また、クロック供給回路２０７は、各構成部に供給する動作周波数を各ＣＰＵ１１２−ｉが設定可能なレジスタを有している。クロック供給回路２０７は、レジスタに設定された値に基づいてクロックを生成し、各構成部にクロックを供給する。
【００５３】
（順序保証装置１２０のハードウェア構成例）
図３は、実施の形態にかかる順序保証装置のハードウェア構成例を示すブロック図である。図３において、順序保証装置１２０は、コントローラ３０１と、メモリ３０２と、外部コントローラ３０３と、ＩＮＴ（ＩＮＴｅｒｒｕｐｔ）端子３０４と、を備えている。また、各構成部はバスによってそれぞれ接続されている。
【００５４】
ここで、コントローラ３０１は、順序保証装置１２０の全体の制御を司る。コントローラ３０１は、タイマ１２１を備えている。タイマ１２１は、クロック（ＣＬＫ）により発生したパルス信号をカウントし、経過時間を測定する。メモリ３０２は、ブートプログラムを記憶している。また、メモリ３０２は、例えば、図２に示したメモリ２０５から読み出したプロファイル情報１４０を記憶する。
【００５５】
外部コントローラ３０３は、割込コントローラ２０１−ｉ、スヌープ回路２０３、ＰＭＵ２０６、クロック供給回路２０７などの各構成部に制御信号や割込信号を通知する。具体的には、外部コントローラ３０３は、ＰＭＵ  ＩＦ（ＩｎｔｅｒＦａｃｅ）を介して、ＰＭＵ２０６に制御信号を通知して、各構成部に供給される電源電圧を制御する。また、外部コントローラ３０３は、ＣＬＫ  ＩＦを介して、クロック供給回路２０７に制御信号を通知して、各構成部に供給される動作周波数を制御する。
【００５６】
また、外部コントローラ３０３は、Ｓｎｏｏｐ  ＩＦを介して、スヌープ回路２０３に制御信号を通知して、１次キャッシュ２０２−１〜１次キャッシュ２０２−ｎを更新させる。また、外部コントローラ３０３は、ＣＰＵ  ＩＦを介して、ＣＰＵ１１２−１〜ＣＰＵ１１２−ｎに割込信号を通知する。ＩＮＴ端子３０４は、ＣＰＵ１１２−１〜ＣＰＵ１１２−ｎからの割込信号を受信する。
【００５７】
（プロファイル情報１４０の具体例）
図４は、プロファイル情報の具体例を示す説明図である。図４において、プロファイル情報１４０は、各タスクのプロファイル情報（例えば、プロファイル情報４００−１，４００−２）を有している。なお、図面では、プロファイル情報１４０の一部を抜粋して表示している。
【００５８】
ここで、プロファイル情報４００−１は、対象タスクであるタスク＄０のプロファイル情報である。具体的には、プロファイル情報４００−１は、動作環境情報４１１とタイムスライス情報４１２とを含む。動作環境情報４１１は、シングルコアシステム１３０で対象タスク＄０を実行した際の、ＣＰＵ１３１の動作周波数と電源電圧を含む。また、動作環境情報４１１は、シングルコアシステム１３０で対象タスク＄０を実行した際の、バスの動作周波数と電源電圧を含む。また、動作環境情報４１１は、シングルコアシステム１３０で対象タスク＄０を実行した際の、メモリの動作周波数と電源電圧を含む。
【００５９】
より具体的には、例えば、「ＣＰＵ＿Ｆｒｅｑｕｅｎｃｙ［０］」は、シングルコアシステム１３０で対象タスク＄０を実行した際の、ＣＰＵ１３１の動作周波数を示している。また、「Ｂｕｓ＿Ｆｒｅｑｕｅｎｃｙ［０］」は、シングルコアシステム１３０で対象タスク＄０を実行した際の、シングルコアシステム１３０のバスの動作周波数を示している。また、「Ｍｅｍ＿Ｆｒｅｑｕｅｎｃｙ［０］」は、シングルコアシステム１３０で対象タスク＄０を実行した際の、シングルコアシステム１３０のメモリの動作周波数を示している。また、「ＣＰＵ＿Ｐｏｗｅｒ［０］」は、シングルコアシステム１３０で対象タスク＄０を実行した際の、ＣＰＵ１３１の電源電圧を示している。また、「Ｂｕｓ＿Ｐｏｗｅｒ［０］」は、シングルコアシステム１３０で対象タスク＄０を実行した際の、シングルコアシステム１３０のバスの電源電圧を示している。「Ｍｅｍ＿Ｐｏｗｅｒ［０］」は、シングルコアシステム１３０で対象タスク＄０を実行した際の、シングルコアシステム１３０のメモリの電源電圧を示している。
【００６０】
また、タイムスライス情報４２１は、シングルコアシステム１３０で実行された対象タスク＄０内のスレッド切替の情報を含む。具体的には、例えば、「００００：Ｔｈｒｅａｄ  ＃０  ｄｉｓｐａｔｃｈ」は、時点「００００」に対象タスク＄０内のスレッド＃０がディスパッチされたことを示している。また、「００５０：ｆｉｎｉｓｈ」は、時点「００５０」に対象タスク＄０が終了したことを示している。
【００６１】
また、プロファイル情報４００−２は、非対象タスクであるタスク＄１のプロファイル情報である。具体的には、プロファイル情報４００−２は、非対象タスク＄１のスレッド＃０の割当先のＣＰＵ１１２−ｉの動作周波数および電源電圧として設定したい所望の動作周波数および電源電圧が含む。
【００６２】
より具体的には、例えば、「ＣＰＵ＿Ｆｒｅｑｕｅｎｃｙ［１］」は、非対象タスク＄１のスレッド＃０の割当先のＣＰＵ１１２−ｉの動作周波数として設定したい動作周波数を示している。また、「ＣＰＵ＿Ｐｏｗｅｒ［１］」は、非対象タスク＄１のスレッド＃０の割当先のＣＰＵ１１２−ｉの電源電圧として設定したい電源電圧を示している。
【００６３】
（順序保証装置１２０の機能的構成例）
次に、順序保証装置１２０の機能的構成例について説明する。
【００６４】
図５は、実施の形態にかかる順序保証装置の機能的構成を示すブロック図である。図５において、順序保証装置１２０は、受付部５０１と、抽出部５０２と、特定部５０３と、通知部５０４と、算出部５０５と、設定部５０６と、検出部５０７と、を含む構成である。この制御部となる機能（受付部５０１〜検出部５０７）は、具体的には、例えば、図３に示したメモリ３０２に記憶されたプログラムをコントローラ３０１に実行させることにより、または、外部コントローラ３０３により、その機能を実現する。
【００６５】
受付部５０１は、対象タスクの順序保証要求をスケジューラ２１３−ｉから受け付ける機能を有する。対象タスクの順序保証要求には、例えば、対象タスクのタスクＩＤと対象タスク内の各スレッドが割り当てられた各ＣＰＵ１１２−ｉの識別子とが含まれている。
【００６６】
具体的には、例えば、受付部５０１は、対象タスク＄０のタスクＩＤ「０」と、対象タスク＄０内のスレッド＃０の割当先のＣＰＵ１１２−１の識別子および対象タスク＄０内のスレッド＃１の割当先のＣＰＵ１１２−２の識別子とを含む順序保証要求を受け付ける。受け付けられた対象タスクの順序保証要求は、例えば、メモリ３０２に記憶される。
【００６７】
抽出部５０２は、図２に示したメモリ２０５から、シングルコアシステムでの対象タスクの動作に関するプロファイル情報を抽出する機能を有する。具体的には、例えば、抽出部５０２が、メモリ２０５に記憶されているプロファイル情報１４０の中から、順序保証要求から特定される対象タスク＄０のタスクＩＤ「０」に対応するプロファイル情報４００−１を抽出する。抽出されたプロファイル情報は、例えば、メモリ３０２に記憶される。
【００６８】
特定部５０３は、抽出部５０２によって抽出されたプロファイル情報を参照して、対象タスク内のスレッドの実行順序を特定する機能を有する。具体的には、例えば、特定部５０３が、プロファイル情報４００−１のタイムスライス情報４１２を参照して、ディスパッチされたスレッドを時系列に並べた順序を、スレッドの実行順序として特定する。特定されたスレッドの実行順序は、例えば、メモリ３０２に記憶される。
【００６９】
通知部５０４は、対象タスク内のスレッドの実行開始を要求する割込信号Ｂを、該スレッドの割当先のＣＰＵ１１２−ｉに通知する機能を有する。具体的には、例えば、通知部５０４が、対象タスク＄０内のスレッド群のうち最初に実行されるスレッド＃０の実行開始を要求する割込信号Ｂを、対象タスク＄０の順序保証要求から特定されるスレッド＃０の割当先のＣＰＵ１１２−１に通知する。
【００７０】
算出部５０５は、抽出されたプロファイル情報を参照して、マルチコアシステム１１０での対象タスクの動作に関する情報を算出する機能を有する。ここで、対象タスクの動作に関する情報とは、例えば、対象タスク内の各スレッドの実行を開始する時点を示す情報である。
【００７１】
具体的には、例えば、算出部５０５が、プロファイル情報を参照して、第１のスレッドの実行が開始された時点から、次に実行される第２のスレッドの実行が開始される時点までの時間を、第１のスレッドの処理時間として算出する。
【００７２】
ここで、プロファイル情報４００−１のタイムスライス情報４１２を例に挙げて、最初に実行されるスレッド＃０の処理時間を算出する場合について説明する。この場合、時点「００００」でスレッド＃０の実行が開始され、時点「００１０」でスレッド＃１の実行が開始されているため、スレッド＃０の処理時間は「００１０」から「００００」を減算した値となる。すなわち、算出部５０５は、スレッド＃０の処理時間を「１０」として算出する。
【００７３】
検出部５０７は、第１のスレッドの実行が開始された時点から、算出部５０５によって算出された第１のスレッドの処理時間が経過したことを検出する機能を有する。具体的には、例えば、検出部５０７は、タイマ１２１によって計時された時間に基づいて、第１のスレッドの実行が開始された時点から、第１のスレッドの処理時間が経過したことを検出する。
【００７４】
より具体的には、例えば、検出部５０７は、スレッド＃０の実行開始を要求する割込信号Ｂを通知した際に、タイマ１２１によって計時された時間を保持しておく。例えば、タイマ１２１によって計時された時間を「００３０」とする。そして、検出部５０７は、保持した時間「００３０」にスレッド＃０の処理時間「１０」を加算した時間「００４０」を、タイマ１２１が計時したことを検出することにより、スレッド＃０の処理時間が経過したことを検出する。
【００７５】
また、通知部５０４は、第１のスレッドの実行停止を要求する割込信号Ｃを、第１のスレッドの割当先のＣＰＵ１１２−ｉに通知する機能を有する。具体的には、例えば、通知部５０４は、検出部５０７によって第１のスレッドの実行が開始された時点から第１のスレッドの処理時間が経過したことが検出された場合に、第１のスレッドの実行停止を要求する割込信号Ｃを割当先のＣＰＵ１１２−ｉに通知する。
【００７６】
より具体的には、例えば、通知部５０４が、対象タスク＄０のスレッド＃０の実行が開始された時点からスレッド＃０の処理時間「１０」が経過したことが検出された場合に、スレッド＃０の実行停止を要求する割込信号Ｃを割当先のＣＰＵ１１２−１に通知する。
【００７７】
また、通知部５０４は、実行中の第１のスレッドの処理時間が経過したことが検出された場合に、非対象タスクのスレッドの実行停止を要求する割込信号Ａを、非対象タスクのスレッドの割当先のＣＰＵ１１２−ｉに通知する機能を有する。具体的には、例えば、通知部５０４は、対象タスク＄０のスレッド＃０の実行が開始された時点から該スレッド＃０の処理時間「１０」が経過した際に、非対象タスク＄０のスレッド＃０の実行停止を要求する割込信号Ａを割当先のＣＰＵ１１２−２に通知する。これにより、非対象タスクのスレッドの実行を停止させることができる。
【００７８】
また、通知部５０４は、実行中の第１のスレッドの処理時間が経過したことが検出された場合に、特定部５０３によって特定された第１のスレッドの次に実行される第２のスレッドの割当先のＣＰＵ１１２−ｉに実行開始を要求する割込信号Ｂを通知する。具体的には、例えば、通知部５０４が、対象タスク＄０のスレッド＃０の実行が開始された時点から、スレッド＃０の処理時間「１０」が経過した際に、スレッド＃１の実行開始を要求する割込信号Ｂを割当先のＣＰＵ１１２−２に通知する。
【００７９】
これにより、シングルコアシステム１３０での対象タスクのスレッド（例えば、対象タスク＄０のスレッド＃０、スレッド＃１）の実行順序および処理時間を再現することができる。
【００８０】
また、通知部５０４は、非対象タスク内のスレッドの実行開始を要求する割込信号Ｄを、該スレッドの割当先のＣＰＵ１１２−ｉに通知する。具体的には、例えば、通知部５０４は、実行中の第１のスレッドの処理時間が経過した際に割込信号Ｃを通知したＣＰＵ１１２−ｉに、非対象タスクのスレッドの実行開始を要求する割込信号Ｄを通知する。
【００８１】
より具体的には、例えば、通知部５０４が、対象タスク＄０のスレッド＃０の処理時間が経過した際に割込信号Ｃを通知したＣＰＵ１１２−１に、非対象タスク＄１のスレッド＃０の実行開始を要求する割込信号Ｄを通知する。これにより、ＣＰＵ１１２−ｉで実行されるスレッドを、対象タスクのスレッドから非対象タスクのスレッドへと切り替えることができる。
【００８２】
また、算出部５０５は、抽出されたプロファイル情報を参照して、対象タスクの実行時におけるクロック供給回路２０７に設定する設定値を算出する。ここで、クロック供給回路２０７の設定値とは、例えば、マルチコアシステム１１０の分解能（例えば、「５０」）に対する、ＣＰＵ１１２−ｉ、バス２００、メモリ２０５などの所望の動作周波数の比率である。
【００８３】
・ＣＰＵ１１２−ｉの動作周波数に関する設定値
具体的には、例えば、まず、算出部５０５は、プロファイル情報４００−１の動作環境情報４１１を参照して、シングルコアシステム１３０のＣＰＵ１３１の動作周波数「１０００」を特定する。この動作周波数「１０００」は、対象タスク＄０のスレッド＃０の割当先のＣＰＵ１１２−１の動作周波数として設定したい所望の動作周波数である。
【００８４】
そして、算出部５０５は、例えば、ＣＰＵ１１２−１の動作周波数に関するクロック供給回路２０７の設定値として、マルチコアシステム１１０の分解能「５０」に対するシングルコアシステム１３０のＣＰＵ１３１の動作周波数「１０００」の比率「２０」を算出する。算出された算出結果は、例えば、メモリ３０２に記憶される。
【００８５】
・バス２００の動作周波数に関する設定値
具体的には、例えば、まず、算出部５０５は、プロファイル情報４００−１の動作環境情報４１１を参照して、シングルコアシステム１３０のバスの動作周波数「２００」を特定する。この動作周波数「２００」は、マルチコアシステム１１０のバス２００の動作周波数として設定したい所望の動作周波数である。
【００８６】
そして、算出部５０５は、例えば、バス２００の動作周波数に関するクロック供給回路２０７の設定値として、マルチコアシステム１１０の分解能「５０」に対するシングルコアシステム１３０のバスの動作周波数「２００」の比率「４」を算出する。
【００８７】
ここで、マルチコアシステム１１０のバス２００のビット幅と、シングルコアシステム１３０のバスのビット幅が異なる場合がある。この場合、算出部５０５は、ビット幅の比率を考慮して、マルチコアシステム１１０のバス２００の動作周波数として設定したい所望の動作周波数を算出する。
【００８８】
具体的には、例えば、算出部５０５は、マルチコアシステム１１０のバス２００のビット幅「３２」に対するシングルコアシステム１３０のバスのビット幅「６４」の比率「２」を算出する。次に、算出部５０５は、算出したビット幅の比率「２」にシングルコアシステム１３０のバスの動作周波数「２００」を乗算した値「４００」を、マルチコアシステム１１０のバス２００の所望の動作周波数として算出する。
【００８９】
そして、算出部５０５は、算出したバス２００の所望の動作周波数「４００」からバス２００の動作周波数に関する設定値を算出する。ここでは、算出部５０５は、バス２００の動作周波数に関するクロック供給回路２０７の設定値として、マルチコアシステム１１０の分解能「５０」に対する、算出した動作周波数「４００」の比率「８」を算出する。
【００９０】
また、メモリ２０５の動作周波数に関する設定値についても、上述したバス２００の動作周波数に関する設定値と同様に算出することができる。
【００９１】
設定部５０６は、マルチコアシステム１１０の動作環境を設定する機能を有する。具体的には、例えば、設定部５０６は、対象タスクのスレッドの割当先のＣＰＵ１１２−ｉの動作周波数として、シングルコアシステム１３０のＣＰＵ１３１の動作周波数をクロック供給回路２０７に設定する。
【００９２】
より具体的には、例えば、設定部５０６は、算出されたＣＰＵ１１２−１の動作周波数に関する設定値「２０」を設定する制御信号Ｆをクロック供給回路２０７に通知する。これにより、対象タスク＄０のスレッド＃０の割当先のＣＰＵ１１２−１の動作周波数を、シングルコアシステム１３０のＣＰＵ１３１の動作周波数と同じ値に設定することができる。
【００９３】
また、設定部５０６は、対象タスクのスレッドの割当先のＣＰＵ１１２−ｉの電源電圧として、シングルコアシステム１３０のＣＰＵ１３１の電源電圧をＰＭＵ２０６に設定する。具体的には、例えば、設定部５０６は、プロファイル情報４００−１の動作環境情報４１１を参照して、シングルコアシステム１３０のＣＰＵ１３１の電源電圧「１．０」を特定する。そして、設定部５０６は、対象タスク＄０のスレッド＃０の割当先のＣＰＵ１１２−１の電源電圧として、特定されたＣＰＵ１３１の電源電圧「１．０」を設定する制御信号ＦをＰＭＵ２０６に通知する。これにより、対象タスク＄０のスレッド＃０の割当先のＣＰＵ１１２−１の電源電圧を、シングルコアシステム１３０のＣＰＵ１３１の電源電圧と同じ値に設定することができる。
【００９４】
また、バス２００の電源電圧に関する設定値についても、上述したＣＰＵ１１２−ｉの電源電圧に関する設定値と同様に設定することができる。これにより、マルチコアシステム１１０のバス２００の電源電圧を、シングルコアシステム１３０のバスの電源電圧と同じ値に設定することができる。
【００９５】
また、メモリ２０５の電源電圧に関する設定値についても、ＣＰＵ１１２−ｉと同様に設定することができる。これにより、マルチコアシステム１１０のメモリ２０５の電源電圧を、シングルコアシステム１３０のメモリの電源電圧と同じ値に設定することができる。
【００９６】
また、受付部５０１は、非対象タスクのタスクＩＤと、非対象タスク内の各スレッドが割り当てられた各ＣＰＵ１１２−ｉの識別子とを示すスケジューリング情報をスケジューラ２１３−ｉから受け付ける機能を有する。このスケジューリング情報は、例えば、対象タスクの順序保証要求に含まれている。
【００９７】
具体的には、例えば、受付部５０１は、非対象タスク＄１のＩＤ「１」と、非対象タスク＄１内のスレッド＃０の割当先のＣＰＵ１１２−１の識別子とを示すスケジューリング情報をスケジューラ２１３−ｉから受け付ける。
【００９８】
なお、受付部５０１は、対象タスク＄０の実行中に新たに非対象タスクがＣＰＵ１１２−ｉに割り当てられた場合、新たに割り当てられた非対象タスクに関するスケジューリング情報をスケジューラ２１３−ｉから受け付けることにしてもよい。
【００９９】
また、抽出部５０２は、図２に示したメモリ２０５から、マルチコアシステム１１０での非対象タスクの動作に関するプロファイル情報を抽出する機能を有する。具体的には、例えば、抽出部５０２が、メモリ２０５に記憶されているプロファイル情報１４０の中から、順序保証要求から特定される非対象タスク＄１のタスクＩＤ「１」に対応するプロファイル情報４００−２を抽出する。
【０１００】
また、検出部５０７は、非対象タスクのスレッドの実行が開始された時点から、所定の処理時間が経過したことを検出する機能を有する。所定の処理時間とは、非対象タスクのスレッドに割り当てられた処理時間（タイムスライス）である。非対象タスクの各スレッドの処理時間は、順序保証装置１２０がスケジューラ２１３−ｉから取得してもよく、順序保証装置１２０が算出することにしてもよい。具体的には、例えば、検出部５０７は、タイマ１２１によって計時された時間に基づいて、非対象タスクの第３のスレッドの実行が開始された時点から、第３のスレッドの処理時間が経過したことを検出する。
【０１０１】
より具体的には、例えば、検出部５０７は、非対象タスク＄１のスレッド＃０の実行開始を要求する割込信号Ｄを通知した際に、タイマ１２１によって計時された時間を保持しておく。例えば、タイマ１２１によって計時された時間を「００４０」とする。そして、検出部５０７は、保持した時間「００４０」に非対象タスク＄１のスレッド＃０の処理時間「１０」を加算した時間「００５０」を、タイマ１２１が計時したことを検出することにより、非対象タスク＄１のスレッド＃０の処理時間が経過したことを検出する。
【０１０２】
また、通知部５０４は、非対象タスクのスレッドの実行停止を要求する割込信号Ｉを、非対象タスクのスレッドの割当先のＣＰＵ１１２−ｉに通知する機能を有する。ここで、割込信号Ｉとは、ＣＰＵ１１２−ｉが実行するスレッドを非対象タスクのスレッドから他の非対象タスクのスレッドへと切り替える際に、切替元の非対象タスクのスレッドの実行停止を要求する割込信号である。具体的には、例えば、通知部５０４は、非対象タスクの第３のスレッドの実行が開始された時点から第３のスレッドの処理時間が経過したことが検出された場合に、第３のスレッドの実行停止を要求する割込信号Ｉを割当先のＣＰＵ１１２−ｉに通知する。
【０１０３】
より具体的には、例えば、通知部５０４が、非対象タスク＄１のスレッド＃０の実行が開始された時点から、スレッド＃０の処理時間「１０」が経過したことが検出された場合に、スレッド＃０の実行停止を要求する割込信号Ｉを割当先のＣＰＵ１１２−１に通知する。
【０１０４】
また、通知部５０４は、実行中の非対象タスクの第３のスレッドの処理時間が経過した際に割込信号Ｉを通知したＣＰＵ１１２−ｉに、非対象タスクの第４のスレッドの実行開始を要求する割込信号Ｊを通知する。ここで、割込信号Ｊとは、ＣＰＵ１１２−ｉが実行するスレッドを非対象タスクのスレッドから他の非対象タスクのスレッドへと切り替える際に、切替先の非対象タスクのスレッドの実行開始を要求する割込信号である。具体的には、例えば、通知部５０４が、非対象タスク＄１のスレッド＃０の処理時間が経過した際に割込信号Ｉを通知したＣＰＵ１１２−１に、非対象タスク＄２のスレッド＃０の実行開始を要求する割込信号Ｊを通知する。
【０１０５】
また、算出部５０５は、抽出された非対象タスクのプロファイル情報を参照して、非対象タスクの実行時におけるクロック供給回路２０７に設定する設定値を算出することにしてもよい。具体的には、例えば、まず、算出部５０５は、非対象タスク＄１のプロファイル情報４００−２を参照して、非対象タスク＄１のスレッド＃０の割当先のＣＰＵ１１２−１の動作周波数として設定したい所望の動作周波数「１２００」を特定する。
【０１０６】
そして、算出部５０５は、例えば、ＣＰＵ１１２−１の動作周波数に関するクロック供給回路２０７の設定値として、マルチコアシステム１１０の分解能「５０」に対する所望の動作周波数「１２００」の比率「２４」を算出する。
【０１０７】
また、設定部５０６は、非対象タスクのスレッドの割当先のＣＰＵ１１２−ｉの動作周波数として、所望の動作周波数をクロック供給回路２０７に設定する。具体的には、例えば、設定部５０６は、算出されたＣＰＵ１１２−１の動作周波数に関する設定値「２４」を設定する制御信号Ｆをクロック供給回路２０７に通知する。これにより、非対象タスク＄１のスレッド＃０の割当先のＣＰＵ１１２−１の動作周波数を、所望の動作周波数に設定することができる（例えば、オーバークロック）。
【０１０８】
また、設定部５０６は、非対象タスクのスレッドの割当先のＣＰＵ１１２−ｉの電源電圧として、所望のＣＰＵ１３１の電源電圧をＰＭＵ２０６に設定する。具体的には、例えば、設定部５０６は、プロファイル情報４００−２を参照して、シングルコアシステム１３０のＣＰＵ１３１の電源電圧「１．５」を特定する。そして、設定部５０６は、非対象タスク＄１のスレッド＃０の割当先のＣＰＵ１１２−１の電源電圧として、特定されたＣＰＵ１３１の電源電圧「１．５」を設定する制御信号ＦをＰＭＵ２０６に通知する。これにより、非対象タスク＄１のスレッド＃０の割当先のＣＰＵ１１２−１の電源電圧を、所望の電源電圧に設定することができる。
【０１０９】
また、通知部５０４は、対象タスクの実行が終了した場合、全ＣＰＵ１１２−１〜ＣＰＵ１１２−ｎに、対象タスクの終了を要求する割込信号Ｅを通知する。具体的には、例えば、通知部５０４は、特定された実行順序が最後の対象タスク＄０のスレッド＃０の実行が開始された時点から、スレッド＃０の処理時間「１０」を経過した際に、対象タスクの実行終了を要求する割込信号Ｅを各ＣＰＵ１１２−ｉに通知する。これにより、スケジューラ２１３−ｉが、対象タスクの実行を終了し、ＣＰＵ１１２−ｉを割り込み許可モードから通常の状態に戻すことができる。
【０１１０】
また、通知部５０４は、設定部５０６によって設定された動作環境を、平常時の状態に戻す制御信号Ｇを通知する。具体的には、例えば、通知部５０４は、対象タスクのスレッドの実行を停止して、非対象タスクのスレッドの実行を開始する際に、マルチコアシステム１１０の動作環境を平常時の動作環境に戻す制御信号Ｇをクロック供給回路２０７とＰＭＵ２０６に通知する。また、通知部５０４は、例えば、対象タスクの実行を終了する際に、マルチコアシステム１１０の動作環境を平常時の動作環境に戻す制御信号Ｇをクロック供給回路２０７とＰＭＵ２０６に通知する。これにより、マルチコアシステム１３０の動作環境を、シングルコアシステム１１０の動作環境から平常時の動作環境に戻すことができる。
【０１１１】
また、通知部５０４は、コヒーレンシを保つためのスヌープ処理を実行させる制御信号Ｈをスヌープ回路２０３に通知する。具体的には、例えば、通知部５０４は、対象タスクのスレッドの実行を停止して、かつ、非対象タスクのスレッドの実行を停止した際に、コヒーレンシを実行させる制御信号Ｈをスヌープ回路２０３に通知する。これにより、１次キャッシュ２０１−１〜１次キャッシュ２０２−ｎの整合性をとることができる。
【０１１２】
なお、上述した説明では、通知部５０４は、各種割込信号を特定のＣＰＵ１１２−ｉのみに通知することにしたが、これに限らない。例えば、通知部５０４は、全ＣＰＵ１１２−１〜ＣＰＵ１１２−ｎに割込信号を通知することにしてもよい。この場合、割込信号を通知されたＣＰＵ１１２−ｉが、割込信号が自ＣＰＵ宛の信号か否かを判断して、割込信号を廃棄したり割込信号に従って処理を行うようにしたりする。
【０１１３】
一例として、通知部５０４が全ＣＰＵ１１２−１〜ＣＰＵ１１２−ｎに対象タスク＄０のスレッド＃０の停止を要求する割込信号Ｃを通知する場合を例に挙げて説明する。各ＣＰＵ１１２−ｉは、自ＣＰＵで実行中のスレッドが、対象タスク＄０のスレッド＃０であるかを判定する。そして、各ＣＰＵ１１２−ｉは、自ＣＰＵで実行中のスレッドが対象タスク＄０のスレッド＃０であれば、割込信号Ｃは自ＣＰＵ宛の信号であるとして、対象タスク＄０のスレッド＃０の実行を停止する。一方、各ＣＰＵ１１２−ｉは、自ＣＰＵで実行中のスレッドが対象タスク＄０のスレッド＃０でなければ、割込信号Ｃは自ＣＰＵ宛の信号ではないとして、割込信号Ｃを廃棄する。
【０１１４】
（実施例１）
次に、実施の形態の実施例１について説明する。実施例１では、マルチコアシステム１１０において対象タスクの順序保証を行う場合について説明する。まず、実施例１にかかるマルチコアシステム１１０のＣＰＵ１１２−ｉの実行制御処理手順について説明する。
【０１１５】
（ＣＰＵ１１２−ｉの実行制御処理手順）
図６および図７は、実施の形態の実施例１にかかるＣＰＵの実行制御処理手順を示すフローチャートである。図６のフローチャートにおいて、まず、ＣＰＵ１１２−ｉにより、対象タスクの起動要求があったか否かを判断する（ステップＳ６０１）。
【０１１６】
ここで、ＣＰＵ１１２−ｉにより、対象タスクの起動要求を待って（ステップＳ６０１：Ｎｏ）、対象タスクの起動要求があった場合（ステップＳ６０１：Ｙｅｓ）、ディスパッチ方式を割り込み許可モードに設定する（ステップＳ６０２）。
【０１１７】
次に、ＣＰＵ１１２−ｉにより、対象タスクの順序保証要求を順序保証装置１２０に通知する（ステップＳ６０３）。このあと、ＣＰＵ１１２−ｉにより、順序保証装置１２０からの割込信号の通知があったか否かを判断する（ステップＳ６０４）。
【０１１８】
ここで、割込信号の通知がなかった場合（ステップＳ６０４：Ｎｏ）、ＣＰＵ１１２−ｉにより、非対象タスクに対するスケジューリングを行って（ステップＳ６０５）、ステップＳ６０４に戻る。
【０１１９】
一方、割込信号の通知があった場合（ステップＳ６０４：Ｙｅｓ）、ＣＰＵ１１２−ｉにより、通知された割込信号が、対象タスクの実行終了を要求する割込信号Ｅであるか、非対象タスクのスレッドの実行停止を要求する割込信号Ａであるかを判定する（ステップＳ６０６）。
【０１２０】
ここで、割込信号Ｅである場合（ステップＳ６０６：割込信号Ｅ）、ＣＰＵ１１２−ｉにより、対象タスクの実行を終了して（ステップＳ６０７）、本フローチャートによる一連の処理を終了する。なお、この際、ＣＰＵ１１２−ｉは、ディスパッチ方式を割り込み許可モードから通常モードに戻すことになる。
【０１２１】
一方、ステップＳ６０６において、割込信号Ａである場合（ステップＳ６０６：割込信号Ａ）、図７に示すステップＳ７０１に移行する。
【０１２２】
図７のフローチャートにおいて、まず、ＣＰＵ１１２−ｉにより、非対象タスクのスレッドの実行を停止する（ステップＳ７０１）。そして、ＣＰＵ１１２−ｉにより、順序保証装置１２０からの対象タスクのスレッドの実行開始を要求する割込信号Ｂの通知があったか否かを判断する（ステップＳ７０２）。
【０１２３】
ここで、ＣＰＵ１１２−ｉにより、割込信号Ｂの通知を待って（ステップＳ７０２：Ｎｏ）、割込信号Ｂの通知があった場合（ステップＳ７０２：Ｙｅｓ）、対象タスクのスレッドの実行を開始する（ステップＳ７０３）。そして、ＣＰＵ１１２−ｉにより、順序保証装置１２０からの割込信号の通知があったか否かを判断する（ステップＳ７０４）。
【０１２４】
ここで、ＣＰＵ１１２−ｉにより、割込信号の通知を待って（ステップＳ７０４：Ｎｏ）、割込信号の通知があった場合（ステップＳ７０４：Ｙｅｓ）、通知された割込信号が、対象タスクのスレッドの実行停止を要求する割込信号Ｃであるか、対象タスクの実行終了を要求する割込信号Ｅであるかを判断する（ステップＳ７０５）。
【０１２５】
ここで、割込信号Ｃである場合（ステップＳ７０５：割込信号Ｃ）、ＣＰＵ１１２−ｉにより、対象タスクのスレッドの実行を停止する（ステップＳ７０６）。そして、ＣＰＵ１１２−ｉにより、順序保証装置１２０からの非対象タスクのスレッドの開始を要求する割込信号Ｄの通知があったか否かを判断する（ステップＳ７０７）。
【０１２６】
ここで、ＣＰＵ１１２−ｉにより、割込信号Ｄの通知を待って（ステップＳ７０７：Ｎｏ）、割込信号Ｄの通知があった場合（ステップＳ７０７：Ｙｅｓ）、ＣＰＵ１１２−ｉにより、非対象タスクのスレッドの実行を開始して（ステップＳ７０８）、図６に示したステップＳ６０４に移行する。
【０１２７】
また、ステップＳ７０５において、割込信号Ｅである場合（ステップＳ７０５：割込信号Ｅ）、ＣＰＵ１１２−ｉにより、対象タスクの実行を終了して（ステップＳ７０９）、本フローチャートによる一連の処理を終了する。なお、この際、ＣＰＵ１１２−ｉは、ディスパッチ方式を割り込み許可モードから通常モードに戻すことになる。
【０１２８】
これにより、対象タスクの起動要求があった場合に、順序保証回路１２０からの割込信号に基づいて、実行するスレッドの切替を行うことができる。
【０１２９】
（順序保証装置１２０の順序保証処理手順）
次に、実施例１にかかるマルチコアシステム１１０の順序保証装置１２０の順序保証処理手順について説明する。
【０１３０】
図８および図９は、実施の形態の実施例１にかかる順序保証装置の順序保証処理手順を示すフローチャートである。図８のフローチャートにおいて、まず、順序保証装置１２０により、スケジューラ２１３−ｉから対象タスクの順序保証要求を受け付けたか否かを判断する（ステップＳ８０１）。
【０１３１】
ここで、順序保証装置１２０により、対象タスクの順序保証要求を受け付けるのを待って（ステップＳ８０１：Ｎｏ）、受け付けた場合（ステップＳ８０１：Ｙｅｓ）、タイマ１２１による計時を開始する（ステップＳ８０２）。そして、順序保証装置１２０により、メモリ２０５から対象タスクのプロファイル情報を抽出する（ステップＳ８０３）。
【０１３２】
次に、順序保証装置１２０により、抽出したプロファイル情報を参照して、対象タスクの実行時におけるクロック供給回路２０７に設定する設定値を算出する（ステップＳ８０４）。なお、クロック供給回路２０７に設定する設定値とは、例えば、マルチコアシステム１１０の分解能に対する、ＣＰＵ１１２−ｉ、バス２００、メモリ２０５などの所望の動作周波数の比率である。
【０１３３】
このあと、順序保証装置１２０により、プロファイル情報を参照して、実行中のスレッドの実行が開始された時点から、次に実行されるスレッドの実行が開始される時点までの時間を、実行中のスレッドの処理時間として算出する（ステップＳ８０５）。
【０１３４】
そして、順序保証装置１２０により、実行中のスレッドの処理時間が経過したか否か判断する（ステップＳ８０６）。ここで、順序保証装置１２０により、実行中のスレッドの処理時間が経過するのを待って（ステップＳ８０６：Ｎｏ）、経過した場合（ステップＳ８０６：Ｙｅｓ）、プロファイル情報を参照して、対象タスクの実行を終了するか否かを判断する（ステップＳ８０７）。
【０１３５】
ここで、対象タスクの実行を終了しない場合（ステップＳ８０７：Ｎｏ）、図９に示すステップＳ９０１に移行する。
【０１３６】
一方、対象タスクの実行を終了する場合（ステップＳ８０７：Ｙｅｓ）、順序保証装置１２０により、各ＣＰＵ１１２−ｉに対象タスクの実行終了を要求する割込信号Ｅを通知する（ステップＳ８０８）。そして、順序保証装置１２０により、マルチコアシステム１１０の動作環境を平常時の状態に変更して（ステップＳ８０９）、本フローチャートによる一連の処理を終了する。
【０１３７】
図９のフローチャートにおいて、まず、順序保証装置１２０により、対象タスクのスレッドを実行中のＣＰＵ１１２−ｉに、対象タスクのスレッドの実行停止を要求する割込信号Ｃを通知する（ステップＳ９０１）。また、ステップＳ９０１において、順序保証装置１２０により、非対象タスクのスレッドを実行中のＣＰＵ１１２−ｊ（ｉ≠ｊ、ｊ＝１，２，…，ｎ）に、非対象タスクのスレッドの実行停止を要求する割込信号Ａを通知する（ステップＳ９０１）。
【０１３８】
次に、順序保証装置１２０により、割込信号Ｃの通知先のＣＰＵ１１２−ｉの動作環境（動作周波数、電源電圧）を平常時の状態に変更する制御信号Ｇをクロック供給回路２０７、ＰＭＵ２０６に通知する（ステップＳ９０２）。また、ステップＳ９０２において、順序保証装置１２０により、割込信号Ａの通知先のＣＰＵ１１２−ｊの動作環境をシングルコアシステム１３０の動作環境に変更する制御信号Ｆをクロック供給回路２０７、ＰＭＵ２０６に通知する（ステップＳ９０２）。なお、シングルコアシステム１３０の動作環境とは、ステップＳ８０４において算出した設定値に基づく動作周波数、およびプロファイル情報から特定される電源電圧である。
【０１３９】
そして、順序保証装置１２０により、コヒーレンシを保つためのスヌープ処理を実行させる制御信号Ｈをスヌープ回路２０３に通知する（ステップＳ９０３）。
【０１４０】
次に、順序保証装置１２０により、割込信号Ｃの通知先のＣＰＵ１１２−ｉに、非対象タスクのスレッドの実行開始を要求する割込信号Ｄを通知する（ステップＳ９０４）。また、ステップＳ９０４において、順序保証装置１２０により、割込信号Ａの通知先のＣＰＵ１１２−ｊに、対象タスクのスレッドの実行開始を要求する割込信号Ｂを通知して（ステップＳ９０４）、図８に示したステップＳ８０５に戻る。
【０１４１】
これにより、マルチコアシステム１１０において、対象タスクが実行される際には、シングルコアシステム１３０と同一の動作環境が再現でき、かつ、対象タスクのスレッドの実行順序と処理時間が再現できる。
【０１４２】
次に、図１０を用いて、実施例１にかかるマルチコアシステム１１０の実行制御例について説明する。
【０１４３】
図１０は、実施例１にかかるマルチコアシステム１１０の実行制御例を示す説明図である。図１０において、マルチコアシステム１１０は、ＣＰＵ１１２−１とＣＰＵ１１２−２を含む。ＣＰＵ１１２−１には、対象タスク＄０のスレッド＃０と非対象タスク＄１のスレッド＃０が割り当てられている。ＣＰＵ１１２−２には、対象タスク＄０のスレッド＃１と非対象タスク＄２のスレッド＃０と非対象タスク＄３のスレッド＃０が割り当てられている。
【０１４４】
ここで、ＣＰＵ１１２−１は、対象タスク＄０の起動要求を受け付けると、順序保証装置１２０に対象タスク＄０の順序保証要求を通知して、ディスパッチ方式を割り込み許可モードに変更する。
【０１４５】
順序保証装置１２０は、対象タスク＄０の順序保証要求を受け付けると、ＣＰＵ１１２−１が対象タスク＄０のスレッド＃０の実行を開始する際に、ＣＰＵ１１２−１の動作周波数をシングルコアシステム１３０のＣＰＵ１３１の動作周波数と同じ値に設定する。また、順序保証装置１２０は、ＣＰＵ１１２−２が対象タスク＄０のスレッド＃１の実行を開始する際に、ＣＰＵ１１２−２の動作周波数をシングルコアシステム１３０のＣＰＵ１３１の動作周波数と同じ値に設定する。これにより、対象タスク＄０を実行中のＣＰＵ１１２−１およびＣＰＵ１１２−２の動作環境は、シングルコアシステム１３０のＣＰＵ１３１の動作環境と同一になる。
【０１４６】
また、順序保証装置１２０は、対象タスク＄０のプロファイル情報から、対象タスク＄０のスレッド＃０とスレッド＃１の実行順序および各スレッド＃０，＃１の処理時間を算出する。そして、順序保証装置１２０は、タイマ１２１によって計時された時間に基づいて、各スレッド＃０，＃１の実行順序および処理時間に従って、割込信号Ｂおよび割込信号Ｃを各ＣＰＵ１１２−１，ＣＰＵ１１２−２に通知する。これにより、対象タスク＄０の各スレッド＃０，＃１は、シングルコアシステム１３０と同一の処理時間（図１０中、Ｉ１〜Ｉ６）で実行され、かつ、シングルコアシステム１３０と同一の実行順序で実行される。
【０１４７】
このように、マルチコアシステム１１０において、対象タスク＄０が実行される際には、シングルコアシステム１３０と同一の動作環境が再現され、かつ、対象タスク＄０のスレッド＃０とスレッド＃１との実行順序および処理時間が再現される。よって、マルチコアシステム１１０においても、対象タスク＄０に、シングルコアシステム１３０での正常な動作と同一の動作をさせることができる。
【０１４８】
また、順序保証装置１２０からの割込信号Ｄおよび割込信号Ａの通知により、対象タスク＄０のスレッド＃０，＃１の実行が停止されているＣＰＵ１１２−１，ＣＰＵ１１２−２に非対象タスク＄１，＄２，＄３のスレッドの実行を開始させることができる。
【０１４９】
（実施例２）
次に、実施の形態の実施例２について説明する。実施例２では、マルチコアシステム１１０において全タスク（対象タスク、非対象タスク）の順序保証を行う場合について説明する。まず、実施例２にかかるマルチコアシステム１１０のＣＰＵ１１２−ｉの実行制御処理手順について説明する。
【０１５０】
（ＣＰＵ１１２−ｉの実行制御処理手順）
図１１は、実施の形態の実施例２にかかるＣＰＵの実行制御処理手順を示すフローチャートである。図１１のフローチャートにおいて、まず、ＣＰＵ１１２−ｉにより、対象タスクの起動要求があったか否かを判断する（ステップＳ１１０１）。
【０１５１】
ここで、ＣＰＵ１１２−ｉにより、対象タスクの起動要求を待って（ステップＳ１１０１：Ｎｏ）、対象タスクの起動要求があった場合（ステップＳ１１０１：Ｙｅｓ）、ディスパッチ方式を割り込み許可モードに設定する（ステップＳ１１０２）。
【０１５２】
次に、ＣＰＵ１１２−ｉにより、対象タスクの順序保証要求を順序保証装置１２０に通知する（ステップＳ１１０３）。この順序保証要求には、対象タスク＄０の起動要求を受け付けた時点でスケジューリングされている全タスクのタスクＩＤと割当先のＣＰＵ１１２−ｉの識別子が含まれている。
【０１５３】
このあと、ＣＰＵ１１２−ｉにより、順序保証装置１２０からの割込信号の通知があったか否かを判断する（ステップＳ１１０４）。ここで、ＣＰＵ１１２−ｉにより、割込信号の通知を待つ（ステップＳ１１０４：Ｎｏ）。
【０１５４】
そして、割込信号の通知があった場合（ステップＳ１１０４：Ｙｅｓ）、ＣＰＵ１１２−ｉにより、通知された割込信号が、対象タスクの実行終了を要求する割込信号Ｅであるか、実行中のタスクのスレッドの実行停止を要求する割込信号Ｃまたは割込信号Ａであるかを判定する（ステップＳ１１０５）。なお、割込信号Ｃは、対象タスクの実行停止を要求する割込信号である。割込信号Ａは、非対象タスクの実行停止を要求する割込信号である。
【０１５５】
ここで、割込信号Ｃまたは割込信号Ａである場合（ステップＳ１１０５：割込信号Ｃ／割込信号Ａ）、ＣＰＵ１１２−ｉにより、通知された割込信号Ｃまたは割込信号Ａにより実行停止を要求されているタスクのスレッドの実行を停止する（ステップＳ１１０６）。
【０１５６】
次に、ＣＰＵ１１２−ｉにより、順序保証装置１２０からのタスクのスレッドの実行開始を要求する割込信号Ｂまたは割込信号Ｄの通知があったか否かを判断する（ステップＳ１１０７）。なお、割込信号Ｂは、対象タスクの実行開始を要求する割込信号である。割込信号Ｄは、非対象タスクの実行開始を要求する割込信号である。
【０１５７】
ここで、ＣＰＵ１１２−ｉにより、割込信号Ｂまたは割込信号Ｄの通知を待つ（ステップＳ１１０７：Ｎｏ）。そして、ＣＰＵ１１２−ｉにより、割込信号Ｂまたは割込信号Ｄの通知があった場合（ステップＳ１１０７：Ｙｅｓ）、ＣＰＵ１１２−ｉにより、割込信号Ｂまたは割込信号Ｄにより実行開始を要求されているタスクのスレッドの実行を開始して（ステップＳ１１０８）、ステップＳ１１０４に戻る。
【０１５８】
また、ステップＳ１１０５において、割込信号Ｅである場合（ステップＳ１１０５：割込信号Ｅ）、ＣＰＵ１１２−ｉにより、対象タスクの実行を終了して（ステップＳ１１０９）、本フローチャートによる一連の処理を終了する。なお、この際、ＣＰＵ１１２−ｉは、ディスパッチ方式を割り込み許可モードから通常モードに戻すことになる。
【０１５９】
これにより、対象タスクの起動要求があった場合に、順序保証回路１２０からの割込信号に従って、実行するスレッドを、対象タスクのスレッドと非対象タスクのスレッドとの間で切り替えることができる。
【０１６０】
（順序保証装置１２０の順序保証処理手順）
次に、実施例２にかかるマルチコアシステム１１０の順序保証装置１２０の順序保証処理手順について説明する。
【０１６１】
図１２〜図１４は、実施の形態の実施例２にかかる順序保証装置の順序保証処理手順を示すフローチャートである。図１２のフローチャートにおいて、まず、順序保証装置１２０により、スケジューラ２１３−ｉから対象タスクの順序保証要求を受け付けたか否かを判断する（ステップＳ１２０１）。
【０１６２】
ここで、順序保証装置１２０により、対象タスクの順序保証要求を受け付けるのを待って（ステップＳ１２０１：Ｎｏ）、受け付けた場合（ステップＳ１２０１：Ｙｅｓ）、タイマ１２１による計時を開始する（ステップＳ１２０２）。そして、順序保証装置１２０により、メモリ２０５から対象タスクのプロファイル情報を抽出する（ステップＳ１２０３）。
【０１６３】
次に、順序保証装置１２０により、抽出したプロファイル情報を参照して、対象タスクの実行時におけるクロック供給回路２０７に設定する設定値を算出する（ステップＳ１２０４）。なお、クロック供給回路２０７に設定する設定値とは、例えば、マルチコアシステム１１０の分解能に対する、ＣＰＵ１１２−ｉ、バス２００、メモリ２０５などの所望の動作周波数の比率である。
【０１６４】
このあと、順序保証装置１２０により、プロファイル情報を参照して、実行中のスレッドの実行が開始された時点から、次に実行されるスレッドの実行が開始される時点までの時間を、実行中のスレッドの処理時間として算出する（ステップＳ１２０５）。
【０１６５】
そして、順序保証装置１２０により、実行中のスレッドの処理時間が経過したか否か判断する（ステップＳ１２０６）。ここで、実行中のスレッドの処理時間が経過していない場合（ステップＳ１２０６：Ｎｏ）、図１４に示したステップＳ１４０１に移行する。
【０１６６】
一方、順序保証装置１２０により、実行中のスレッドの処理時間が経過した場合（ステップＳ１２０６：Ｙｅｓ）、プロファイル情報を参照して、対象タスクの実行を終了するか否かを判断する（ステップＳ１２０７）。
【０１６７】
ここで、対象タスクの実行を終了しない場合（ステップＳ１２０７：Ｎｏ）、図１３に示すステップＳ１３０１に移行する。一方、対象タスクの実行を終了する場合（ステップＳ１２０７：Ｙｅｓ）、順序保証装置１２０により、各ＣＰＵ１１２−ｉに対象タスクの実行終了を要求する割込信号Ｅを通知する（ステップＳ１２０８）。
【０１６８】
そして、順序保証装置１２０により、マルチコアシステム１１０の動作環境を平常時の状態に変更し（ステップＳ１２０９）、本フローチャートによる一連の処理を終了する。
【０１６９】
図１３のフローチャートにおいて、まず、順序保証装置１２０により、対象タスクのスレッドを実行中のＣＰＵ１１２−ｉに、対象タスクのスレッドの実行停止を要求する割込信号Ｃを通知する（ステップＳ１３０１）。また、ステップＳ１３０１において、順序保証装置１２０により、非対象タスクのスレッドを実行中のＣＰＵ１１２−ｊに、非対象タスクのスレッドの実行停止を要求する割込信号Ａを通知する（ステップＳ１３０１）。
【０１７０】
次に、順序保証装置１２０により、割込信号Ｃの通知先のＣＰＵ１１２−ｉの動作環境（動作周波数、電源電圧）を平常時の状態に変更する制御信号Ｇをクロック供給回路２０７、ＰＭＵ２０６に通知する（ステップＳ１３０２）。また、ステップＳ１３０２において、順序保証装置１２０により、割込信号Ａの通知先のＣＰＵ１１２−ｊの動作環境をシングルコアシステム１３０の動作環境に変更する制御信号Ｆをクロック供給回路２０７、ＰＭＵ２０６に通知する（ステップＳ１３０２）。
【０１７１】
そして、順序保証装置１２０により、コヒーレンシを保つためのスヌープ処理を実行させる制御信号Ｈをスヌープ回路２０３に通知する（ステップＳ１３０３）。
【０１７２】
次に、順序保証装置１２０により、割込信号Ｃの通知先のＣＰＵ１１２−ｉに、非対象タスクのスレッドの実行開始を要求する割込信号Ｄを通知する（ステップＳ１３０４）。また、ステップＳ１３０４において、順序保証装置１２０により、割込信号Ａの通知先のＣＰＵ１１２−ｊに、対象タスクのスレッドの実行開始を要求する割込信号Ｂを通知して（ステップＳ１３０４）、図１２に示したステップＳ１２０５に戻る。
【０１７３】
図１４のフローチャートにおいて、まず、順序保証装置１２０により、非対象タスクのスレッドを切り替えるか否かを判断する（ステップＳ１４０１）。具体的には、例えば、順序保証装置１２０が、プロファイル情報に含まれている非対象タスク切替フラグを参照して、非対象タスクのスレッドを切り替えるか否かを判断する。ここでは、順序保証装置１２０が、非対象タスク切替フラグが「ＯＮ」の場合は非対象タスクのスレッドを切り替えると判断し、非対象タスク切替フラグが「ＯＦＦ」の場合は非対象タスクのスレッドを切り替えないと判断する。
【０１７４】
ここで、非対象タスクのスレッドを切り替えない場合（ステップＳ１４０１：Ｎｏ）、図１２に示したステップＳ１２０６に戻る。一方、非対象タスクのスレッドを切り替える場合（ステップＳ１４０１：Ｙｅｓ）、順序保証装置１２０により、非対象タスクに割り当てられた処理時間が経過したか否かを判断する（ステップＳ１４０２）。
【０１７５】
ここで、非対象タスクの処理時間が経過していない場合（ステップＳ１４０２：Ｎｏ）、図１２に示したステップＳ１２０６に戻る。
【０１７６】
一方、処理時間が経過した場合（ステップＳ１４０２：Ｙｅｓ）、順序保証装置１２０により、非対象タスクのスレッドを実行中のＣＰＵ１１２−ｉに、切替元の非対象タスクのスレッドの実行停止を要求する割込信号Ｉを通知する（ステップＳ１４０３）。
【０１７７】
次に、順序保証装置１２０により、割込信号Ｉの通知先のＣＰＵ１１２−ｉの動作環境を変更するか否かを判断する（ステップＳ１４０４）。具体的には、例えば、順序保証装置１２０が、プロファイル情報に含まれている動作環境変更フラグを参照して、動作環境を変更するか否かを判断する。ここでは、順序保証装置１２０が、動作環境変更フラグが「ＯＮ」の場合は動作環境を変更すると判断し、動作環境変更フラグが「ＯＦＦ」の場合は動作環境を変更しないと判断する。
【０１７８】
ここで、動作環境を変更しない場合（ステップＳ１４０４：Ｎｏ）、ステップＳ１４０６に移行する。一方、動作環境を変更する場合（ステップＳ１４０４：Ｙｅｓ）、順序保証装置１２０により、割込信号Ｉの通知先のＣＰＵ１１２−ｉの動作環境（動作周波数、電源電圧）をあらかじめ設定された状態に変更する制御信号Ｆをクロック供給回路２０７、ＰＭＵ２０６に通知する（ステップＳ１４０５）。
【０１７９】
そして、順序保証装置１２０により、割込信号Ｉの通知先のＣＰＵ１１２−ｉに、切替先の非対象タスクのスレッドの実行開始を要求する割込信号Ｊを通知して（ステップＳ１４０６）、図１２に示したステップＳ１２０６に戻る。
【０１８０】
これにより、マルチコアシステム１１０において、対象タスクが実行される際には、シングルコアシステム１３０と同一の動作環境が再現でき、かつ、対象タスクのスレッドの実行順序と処理時間が再現できる。
【０１８１】
また、マルチコアシステム１１０において、スケジューラ２１３−ｉにより実行する非対象タスクのスレッドの切替を行わなくても、割込信号Ｉおよび割込信号Ｊの通知により、非対象タスク間の切替を行うことができる。マルチコアシステム１１０において、非対象タスク実行されるＣＰＵ１１２−ｉの動作環境を所望の動作環境として、処理性能を向上させたり省電力化を図ることができる。
【０１８２】
次に、図１５を用いて、実施例２にかかるマルチコアシステムの実行制御例について説明する。
【０１８３】
図１５は、実施例２にかかるマルチコアシステムの実行制御例を示す説明図である。図１５において、マルチコアシステム１１０は、ＣＰＵ１１２−１とＣＰＵ１１２−２を含む。ＣＰＵ１１２−１には、対象タスク＄０のスレッド＃０と非対象タスク＄１のスレッド＃０が割り当てられている。ＣＰＵ１１２−２には、対象タスク＄０のスレッド＃１と非対象タスク＄２のスレッド＃０と非対象タスク＄３のスレッド＃０が割り当てられている。
【０１８４】
ここで、ＣＰＵ１１２−１は、対象タスク＄０の起動要求を受け付けると、順序保証装置１２０に対象タスク＄０の順序保証要求を通知して、ディスパッチ方式を割り込み許可モードに変更する。この順序保証要求には、対象タスク＄０の起動要求を受け付けた時点でスケジューリングされている全タスクのタスクＩＤと割当先のＣＰＵ１１２−ｉの識別子が含まれている。
【０１８５】
順序保証装置１２０は、対象タスク＄０の順序保証要求を受け付けると、ＣＰＵ１１２−１が対象タスク＄０のスレッド＃０の実行を開始する際に、ＣＰＵ１１２−１の動作周波数をシングルコアシステム１３０のＣＰＵ１３１の動作周波数と同じ値に設定する。また、順序保証装置１２０は、ＣＰＵ１１２−２が対象タスク＄０のスレッド＃１の実行を開始する際に、ＣＰＵ１１２−２の動作周波数をシングルコアシステム１３０のＣＰＵ１３１の動作周波数と同じ値に設定する。これにより、対象タスク＄０を実行中のＣＰＵ１１２−１およびＣＰＵ１１２−２の動作環境は、シングルコアシステム１３０のＣＰＵ１３１の動作環境と同一になる。
【０１８６】
また、順序保証装置１２０は、対象タスク＄０のプロファイル情報から、対象タスク＄０のスレッド＃０とスレッド＃１の実行順序および各スレッド＃０，＃１の処理時間を算出する。そして、順序保証装置１２０は、タイマ１２１によって計時された時間に基づいて、各スレッド＃０，＃１の実行順序および処理時間に従って、割込信号Ｂおよび割込信号Ｃを各ＣＰＵ１１２−１，ＣＰＵ１１２−２に通知する。これにより、対象タスク＄０の各スレッド＃０，＃１は、シングルコアシステム１３０と同一の処理時間（図１５中、Ｉ１〜Ｉ６）で実行され、かつ、シングルコアシステム１３０と同一の実行順序で実行される。
【０１８７】
このように、マルチコアシステム１１０において、対象タスク＄０が実行される際には、シングルコアシステム１３０と同一の動作環境が再現され、かつ、対象タスク＄０のスレッド＃０とスレッド＃１との実行順序および処理時間が再現される。よって、マルチコアシステム１１０においても、対象タスク＄０に、シングルコアシステム１３０での正常な動作と同一の動作をさせることができる。
【０１８８】
また、順序保証装置１２０からの割込信号Ｄおよび割込信号Ａの通知により、対象タスク＄０のスレッド＃０，＃１の実行が停止されているＣＰＵ１１２−１，ＣＰＵ１１２−２に非対象タスク＄１，＄２，＄３のスレッドの実行を開始させることができる。
【０１８９】
また、順序保証装置１２０は、対象タスク＄０のスレッド＃１の実行を停止したＣＰＵ１１２−２が非対象タスク＄２のスレッド＃０の実行を開始する際、ＣＰＵ１１２−２の動作周波数を非対象タスク＄２のプロファイル情報から特定される所望の値に設定する。
【０１９０】
そして、順序保証装置１２０は、タイマ１２１によって計時された時間に基づいて、所定の処理時間が経過したことを検出すると、割込信号ＩをＣＰＵ１１２−２に通知して、さらに、非対象タスク＄３のスレッド＃０の実行開始を要求する割込信号Ｊを通知する。
【０１９１】
このように、順序保証装置１２０からの割込信号Ｉおよび割込信号Ｊの通知により、非対象タスク間の切替を行うことができる。また、順序保証装置１２０は、非対象タスクを実行中のＣＰＵ１１２−１，ＣＰＵ１１２−２の動作周波数および電源電圧を所望の値に設定することができる。これにより、ＣＰＵ１１２−１，ＣＰＵ１１２−２の処理性能を向上させたり、低消費電力化を図ったりすることができる。
【０１９２】
例えば、優先度の高い非対象タスクを実行する際には、ＣＰＵ１１２−１，ＣＰＵ１１２−２の動作周波数を高くして処理性能を向上させることができる。また、優先度の低い非対象タスクを実行する際には、ＣＰＵ１１２−１，ＣＰＵ１１２−２の動作周波数を低くして低消費電力化を図ることができる。
【０１９３】
以上説明したように、本実施の形態にかかるマルチコアシステム１１０によれば、順序保証装置１２０からの割込信号Ｂおよび割込信号Ｃにより、対象タスクのスレッドをシングルコアシステム１３０と同一の実行順序および処理時間で実行することができる。
【０１９４】
また、マルチコアシステム１１０によれば、順序保証装置１２０からの制御信号Ｆにより、対象タスクを実行するＣＰＵ１１２−ｉの動作環境をシングルコアシステム１３０のＣＰＵ１３１の動作環境と同一の動作環境に変更することができる。
【０１９５】
また、マルチコアシステム１１０によれば、順序保証装置１２０からの制御信号Ｆにより、非対象タスクを実行するＣＰＵ１１２−ｉの動作環境を変更して、ＣＰＵ１１２−ｉの処理効率を向上させたり、低消費電力化を図ることができる。
【０１９６】
これらのことから、マルチコアシステム１１０によれば、対象タスクのスレッドの実行順序のずれを回避して、対象タスクをシングルコアシステム１３０で正常に動作したのと同様に正常に動作させることができる。この際、対象タスクのプログラムコードの書き換えが不要なため、作業者の作業負担の軽減化や品質の向上を図ることができる。
【０１９７】
なお、本実施の形態で説明したタスクスケジューリング方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本タスクスケジューリングプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本タスクスケジューリングプログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１９８】
１１０  マルチコアシステム
１２０  順序保証装置
１３０  シングルコアシステム
１１２−１〜１１２−ｎ，１３１  ＣＰＵ
１４０，４００−１，４００−２  プロファイル情報
５０１  受付部
５０２  抽出部
５０３  特定部
５０４  通知部
５０５  算出部
５０６  設定部
５０７  検出部
【図１】
2012120654.tif 000003
【図２】
2012120654.tif 000004
【図３】
2012120654.tif 000005
【図４】
2012120654.tif 000006
【図５】
2012120654.tif 000007
【図６】
2012120654.tif 000008
【図７】
2012120654.tif 000009
【図８】
2012120654.tif 000010
【図９】
2012120654.tif 000011
【図１０】
2012120654.tif 000012
【図１１】
2012120654.tif 000013
【図１２】
2012120654.tif 000014
【図１３】
2012120654.tif 000015
【図１４】
2012120654.tif 000016
【図１５】
2012120654.tif 000017
【国際調査報告】
2012120654.tif 000018
2012120654.tif 000019
2012120654.tif 000020