(57)【要約】  マルチコアプロセッサシステムにおいて、アプリケーションＡ，Ｃ，Ｄが実行中であり、実行中のアプリケーションはすべて高信頼アプリケーションである。ＣＰＵ０にはアプリケーションＣとアプリケーションＤの高信頼マスタスレッドが割り当てられ、ＣＰＵ１にはアプリケーションＡの高信頼マスタスレッドが割り当てられている。マスタＣＰＵであるＣＰＵ０が、スケジューラ（１００）により低信頼アプリケーションであるアプリケーションＢの低信頼スレッドの割り当て指示を受け付けると、高信頼マスタスレッドが割り当てられていないＣＰＵを特定する。ここでは、ＣＰＵ２とＣＰＵ３が特定され、ＣＰＵ０がスケジューラ（１００）により特定されたＣＰＵ２へ低信頼スレッドの起動指示を通知する。これにより、高信頼マスタスレッドと低信頼スレッドが同一のＣＰＵに割り当てられないように制御される。
2011104824.tif 000002
【特許請求の範囲】
【請求項１】
マルチコアプロセッサと、アプリケーションソフトウェア（以下、「アプリケーション」）ごとに動作に関する信頼度を記憶する記憶装置とを備え、前記マルチコアプロセッサ内の一のコアが前記記憶装置にアクセス可能なマルチコアプロセッサシステムであって、
前記一のコアが、
前記アプリケーションのうち対象スレッドを起動する対象アプリケーションの信頼度を前記記憶装置から抽出する抽出手段と、
前記抽出手段により抽出された信頼度と指定閾値に基づいて、前記対象アプリケーションが高信頼であるアプリケーションか否かを判断する信頼度判断手段と、
前記信頼度判断手段により前記対象アプリケーションが前記高信頼であるアプリケーションと判断された場合、前記マルチコアプロセッサのうち高信頼でないアプリケーションのスレッドが割り当てられていないコアを特定し、前記対象アプリケーションが前記高信頼でないアプリケーションと判断された場合、前記マルチコアプロセッサのうち前記高信頼であるアプリケーションのスレッドが割り当てられていないコアを特定する特定手段と、
前記対象スレッドの起動指示を、前記特定手段により特定されたコアへ通知する通知手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【請求項２】
前記特定手段は、
前記信頼度判断手段により前記対象アプリケーションが前記高信頼でないアプリケーションと判断された場合、前記マルチコアプロセッサのうち前記高信頼であるアプリケーションのマスタスレッドが割り当てられていないコアを特定し、
前記通知手段は、
前記対象スレッドの起動指示を、前記特定手段により特定されたコアへ通知することを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
前記通知手段は、
前記信頼度判断手段により前記対象アプリケーションが前記高信頼であるアプリケーションと判断された場合において、前記対象スレッドが前記マスタスレッドであるときは前記対象スレッドの起動指示を前記特定手段により特定されたコアへ通知し、前記対象スレッドが前記マスタスレッドでないときは前記対象スレッドの起動指示を前記マルチコアプロセッサのうち任意のコアへ通知することを特徴とする請求項２に記載のマルチコアプロセッサシステム。
【請求項４】
前記一のコアが、
前記特定手段により特定されたコアのうちいずれのスレッドも割り当てられていないコアを検出する検出手段と、
前記検出手段により検出されたコアに前記対象スレッドが割り当てられた場合、前記マルチコアプロセッサのすべてのコアに前記高信頼でないアプリケーションのスレッドが割り当てられるか否かを判断する割り当て判断手段と、
前記割り当て判断手段により前記すべてのコアに前記高信頼でないアプリケーションのスレッドが割り当てられると判断された場合、前記特定されたコアのうち前記検出されたコアを除く残余のコアから前記対象スレッドを割り当てるコアを決定し、前記割り当て判断手段により前記すべてのコアに前記高信頼でないアプリケーションのスレッドが割り当てられないと判断された場合、前記特定されたコアから前記対象スレッドを割り当てるコアを決定する決定手段と、を備え、
前記通知手段は、
前記対象スレッドの割り当て指示を、前記決定手段により決定されたコアへ通知することを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項５】
前記一のコアが、
前記特定手段により特定されたコアのうちいずれのスレッドも割り当てられていないコアを検出する検出手段と、
前記検出手段より検出されたコアに前記対象スレッドが割り当てられた場合、前記マルチコアプロセッサのいずれのコアにも前記高信頼であるアプリケーションのスレッドが割り当てられるか否かを判断する割り当て判断手段と、
前記割り当て判断手段により前記すべてのコアに前記高信頼であるアプリケーションのスレッドが割り当てられると判断された場合、前記特定されたコアのうち前記検出されたコアを除く残余のコアから前記対象スレッドを割り当てるコアを決定し、前記割り当て判断手段により前記すべてのコアに前記高信頼であるアプリケーションのスレッドが割り当てられないと判断された場合、前記特定されたコアから前記対象スレッドを割り当てるコアを決定する決定手段と、を備え、
前記通知手段は、
前記対象スレッドの割り当て指示を、前記決定手段により決定されたコアへ通知することを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項６】
前記特定手段は、
前記信頼度判断手段により前記対象アプリケーションが前記高信頼でないアプリケーションと判断された場合、前記マルチコアプロセッサのうち前記一のコアを除く残余のコアから前記高信頼であるアプリケーションのスレッドが割り当てられていないコアを特定し、
前記通知手段は、
前記対象スレッドの起動指示を、前記特定手段により特定されたコアへ通知することを特徴とする請求項１〜４のいずれか一つに記載のマルチコアプロセッサシステム。
【請求項７】
マルチコアプロセッサを備え、前記マルチコアプロセッサ内の一のコアがスケジューラによりスレッドの割り当て指示の通知を受けると前記スレッドのマルチコアプロセッサへの割り当て処理を実行するマルチコアプロセッサシステムであって、
前記一のコアが、
前記マルチコアプロセッサのうちストールしたストールコアを検出する検出手段と、
前記検出手段により検出されたストールコアでストールによりクラッシュしたスレッドを特定する特定手段と、
前記マルチコアプロセッサのうちストールコアを除く残余のコアに割り当てる前記特定手段により特定されたスレッドの割り当て指示を、前記スケジューラに通知する割り当て通知手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【請求項８】
前記一のコアが、さらに、
前記検出手段により検出されたストールコアにリブート指示を通知するリブート通知手段と、を備え、
前記割り当て通知手段は、
前記スケジューラに前記割り当て指示を通知せず、前記特定手段により特定されたスレッドの起動指示を、前記リブート通知手段によるリブート指示によりリブートされたリブート済ストールコアへ通知することを特徴とする請求項７に記載のマルチコアプロセッサシステム。
【請求項９】
アプリケーションソフトウェア（以下、「アプリケーション」）ごとに動作に関する信頼度を記憶する記憶装置にアクセス可能なマルチコアプロセッサ内の一のコアに、
対象スレッドを起動する対象アプリケーションの信頼度を前記記憶装置から抽出する抽出工程と、
前記抽出工程により抽出された信頼度と指定閾値に基づいて前記対象アプリケーションが、高信頼であるアプリケーションか否かを判断する信頼度判断工程と、
前記信頼度判断工程により前記高信頼であるアプリケーションと判断された場合、前記マルチコアプロセッサのうち高信頼でないアプリケーションのスレッドが割り当てられていないコアを特定し、前記高信頼でないアプリケーションと判断された場合、前記マルチコアプロセッサのうち前記高信頼であるアプリケーションのスレッドが割り当てられていないコアを特定する特定工程と、
前記対象スレッドの起動指示を、前記特定工程により特定されたコアへ通知する通知工程と、
を実行させることを特徴とする制御プログラム。
【請求項１０】
スレッドの割り当て指示の通知を受けるとスケジューラにより前記スレッドのマルチコアプロセッサへの割り当て処理を実行する前記マルチコアプロセッサ内の一のコアに、
前記マルチコアプロセッサのうちストールしたストールコアを検出する検出工程と、
前記検出工程により検出されたストールコアのストールによりクラッシュしたスレッドを特定する特定工程と、
前記マルチコアプロセッサのうち前記ストールコアを除く残余のコアに割り当てる前記特定工程により特定されたスレッドの割り当て指示を、前記スケジューラに通知する割り当て通知工程と、
を実行させることを特徴とする制御プログラム。
【請求項１１】
アプリケーションソフトウェア（以下、「アプリケーション」）ごとに動作に関する信頼度を記憶する記憶装置にアクセス可能なマルチコアプロセッサ内の一のコアが、
前記アプリケーションのうち対象スレッドを起動する対象アプリケーションの信頼度を前記記憶装置から抽出する抽出工程と、
前記抽出工程により抽出された信頼度と指定閾値に基づいて、前記対象アプリケーションが高信頼であるアプリケーションか否かを判断する信頼度判断工程と、
前記信頼度判断工程により前記高信頼であるアプリケーションと判断された場合、前記マルチコアプロセッサのうち高信頼でないアプリケーションのスレッドが割り当てられていないコアを特定し、前記高信頼でないアプリケーションと判断された場合、前記マルチコアプロセッサのうち前記高信頼であるアプリケーションのスレッドが割り当てられていないコアを特定する特定工程と、
前記対象スレッドの起動指示を、前記特定工程により特定されたコアへ通知する通知工程と、
を実行することを特徴とする制御方法。
【請求項１２】
スレッドの割り当て指示の通知を受けるとスケジューラにより前記スレッドのマルチコアプロセッサへの割り当て処理を実行する前記マルチコアプロセッサ内の一のコアが、
前記マルチコアプロセッサのうちストールしたストールコアを検出する検出工程と、
前記検出工程により検出されたストールコアのストールによりクラッシュしたスレッドを特定する特定工程と、
前記マルチコアプロセッサのうち前記ストールコアを除く残余のコアに割り当てる前記特定工程により特定されたスレッドの割り当て指示を、前記スケジューラに通知する割り当て通知工程と、
を実行することを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアプロセッサにおけるマスタスレーブのスケジュール処理とハイパーバイザ処理を行うマルチコアプロセッサシステム、制御プログラム、および制御方法に関する。
【背景技術】
【０００２】
従来、マルチコアプロセッサシステムにおいては、分散システム（以下、「従来方式１」と称する。）と、集中共用システム（以下、「従来方式２」と称する。）と呼ばれる方式が知られている。【０００３】
従来方式１は、個々のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に物理的に分かれているメモリが接続される方式である。よって、従来方式１では、互いに独立したメモリを分散して接続するため、独立したアプリケーション同士によってアクセスが競合せず、アクセスの競合によるＣＰＵの性能劣化が発生しない。したがって、１つのアプリケーションが障害によりクラッシュしても影響を受けるのはクラッシュしたアプリケーションが動作していたＣＰＵだけである。【０００４】
ここで、クラッシュとは、障害（バグ）を含んだソフトウェアが不正な領域にデータを書き込んだり、不正なアドレスにジャンプすることにより、正常な動作ができなくなる状態のうち、障害を起こしたソフトウェアが異常終了するだけではなく、システム領域を破壊や不正ジャンプすることにより、ＯＳを含む他のプロセスを続行ができなくなる状態を指す。【０００５】
従来方式２は、物理的なメモリが１つであり、全ＣＰＵがバスなどを介して当該メモリに接続される方式である。従来方式２は従来方式１と比較してメモリが少ないため低廉かつ低消費電力であるので、組み込みシステムにおいては、従来方式２が採用されていた。従来からマスタＣＰＵが行うスケジューリングでは、たとえば、負荷の小さいＣＰＵから順にアプリケーションあるいはアプリケーションから起動されるスレッドが割り当てられていた。【０００６】
また、大型計算機などでは、チェックポイント／リスタート方法など、クラッシュ時に備えてアプリケーションの動作状態を保存し、問題が発生した場合にはチェックポイントから復帰する機構（従来技術１）を備えていた。【０００７】
また、大型計算機などでは、ＯＳを含むソフトウェアが仮想マシンを通じてハードウェアにアクセスを行う手法（従来技術２、たとえば、下記特許文献１〜３を参照。）が知られている。一般に仮想マシンは、ＣＰＵとソフトウェアのくくりつけを仮想化することで隔離し、円滑なマイグレーション（移動先に仮想マシンごと移す）を実現するために用いられる。１つのソフトウェアが障害によりクラッシュした場合、ダウンするのはクラッシュしたソフトウェアが動作していた仮想マシンということになる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】国際公開第２００６／１３４６９１号パンフレット
【特許文献２】特開２００２−２０２９５９号公報
【特許文献３】特開２００８−１５２５９４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、従来より、クラッシュする可能性が低い高信頼であるアプリケーションとクラッシュする可能性が高い高信頼でないアプリケーションが同時に実行される。よって、高信頼であるアプリケーションが、高信頼でないアプリケーションに起因して発生するクラッシュの影響でクラッシュするという問題点があった。【００１０】
従来技術１および２を用いれば、高信頼であるアプリケーションがクラッシュするのを防止できるが、従来技術１および２では、メモリリソースが膨大に必要となり、メモリリソースの少ない組み込みシステムにおいて従来技術１および２を適用するのは困難であった。【００１１】
本発明は、上述した問題点を解消するため、クラッシュの可能性の高いアプリケーションがクラッシュすることの影響がクラッシュの可能性の低いアプリケーションに及ぶのを回避することができるマルチコアプロセッサシステム、制御プログラム、および制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するため、マルチコアプロセッサシステムは、マルチコアプロセッサと、アプリケーションソフトウェア（以下、「アプリケーション」）ごとに動作に関する信頼度を記憶する記憶装置とを備え、前記マルチコアプロセッサ内の一のコアが前記記憶装置にアクセス可能なマルチコアプロセッサシステムであって、前記一のコアが、前記アプリケーションのうち対象スレッドを起動する対象アプリケーションの信頼度を前記記憶装置から抽出し、抽出された信頼度と指定閾値に基づいて、前記対象アプリケーションが高信頼であるアプリケーションか否かを判断し、前記高信頼であるアプリケーションと判断された場合、前記マルチコアプロセッサのうち高信頼でないアプリケーションのスレッドが割り当てられていないコアを特定し、前記高信頼でないアプリケーションと判断された場合、前記マルチコアプロセッサのうち前記高信頼であるアプリケーションのスレッドが割り当てられていないコアを特定し、前記対象スレッドの起動指示を、特定されたコアへ通知することを要件とする。
【発明の効果】
【００１３】
本マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、クラッシュの可能性の高いアプリケーションがクラッシュすることの影響がクラッシュの可能性の低いアプリケーションに及ぶのを回避することができるという効果を奏する。
【図面の簡単な説明】
【００１４】
【図１】実施の形態１にかかる制御処理の一実施例を示す説明図である。
【図２】信頼度リストの一例を示す説明図である。
【図３】タスク構成情報の一例を示す説明図である。
【図４】マルチコアプロセッサシステムのハードウェア構成を示すブロック図である。
【図５】実施の形態１にかかるマルチコアプロセッサシステムの機能的構成を示すブロック図である。
【図６】高信頼スレッドが割り当てられる例を示す説明図である。
【図７】高信頼スレッドの割り当て後のタスク構成情報の一例を示す説明図である。
【図８】低信頼スレッドが割り当てられる例を示す説明図である。
【図９】すべてのＣＰＵ０〜３に低信頼スレッドが割り当てられない例を示す説明図である。
【図１０】マスタＣＰＵに低信頼スレッドが割り当てられない例を示す説明図である。
【図１１】実施の形態１にかかるマルチコアプロセッサシステムによる制御処理の制御処理手順の一例を示すフローチャートである。
【図１２】図１１で示した高信頼マスタスレッドの割り当て処理（ステップＳ１１０７）の詳細な説明を示すフローチャートである。
【図１３】図１１で示した低信頼スレッドの割り当て処理（ステップＳ１１０９）の詳細な説明を示すフローチャートである。
【図１４】マルチコアプロセッサシステムによる登録処理の登録処理手順の一例を示すフローチャートである。
【図１５】実施の形態２にかかる制御処理の一実施例を示す説明図である。
【図１６】実施の形態２にかかるマルチコアプロセッサシステムの機能的構成を示すブロック図である。
【図１７】スレッドがクラッシュした例を示す説明図である。
【図１８】各ＣＰＵが存命シグナルをＣＰＵ０へ送付する例を示す説明図である。
【図１９】アプリケーションが停止される例を示す説明図である。
【図２０】リブート指示例およびスレッドの割り当て指示例を示す説明図である。
【図２１】信頼度リストの信頼度が変更される例を示す説明図である。
【図２２】ストールＣＰＵを除く残余のＣＰＵにクラッシュしたスレッドが割り当てられる例を示す説明図である。
【図２３】再起動後のタスク構成情報の一例を示す説明図である。
【図２４】ストールＣＰＵへスレッドの起動指示が通知される例を示す説明図である。
【図２５】実施の形態２にかかるマルチコアプロセッサシステムによる制御処理の制御処理手順の一例を示すフローチャートである。
【図２６】図２５で示した再起動処理（ステップＳ２５０３）の詳細な説明を示すフローチャートである。
【図２７】図２５で示した再起動処理（ステップＳ２５０４）の詳細な説明を示すフローチャートである。
【図２８】マルチコアプロセッサによる存命シグナルの送付処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１５】
本発明によるマルチコアプロセッサシステム、制御プログラム、および制御方法の好適な実施の形態を詳細に説明する。
【００１６】
まず、実施の形態１では、各ＣＰＵへの割り当てについて説明する。つぎに、実施の形態２では、ＣＰＵがストールした場合に、ＣＰＵのストールによりクラッシュしたスレッドの再起動に関して説明する。
【００１７】
ここで、スレッドは、周知のようにアプリケーション内で行われる処理の実行単位である。そして、プロセスは、少なくとも１以上のスレッドを含む実行単位である。スレッドを１のみしか含まないプロセスは、実質的にスレッドである。よって、実施の形態１では、割り当ての対象がスレッドであってもプロセスであっても、スケジューラ１００による制御処理に違いはないため、すべてスレッドを用いて説明する。
【００１８】
実施の形態１では、利用者からのアプリケーションの起動指示が通知されることで起動される最初の処理を総称してマスタスレッドと称する。さらに、実施の形態１では、当該マスタスレッドによってあらたに起動される処理をスレーブスレッドと称し、実施の形態１では、スレーブスレッドによってあらたに起動される処理も同様にスレーブスレッドと称する。
【００１９】
なお、マスタスレッドでは、スレーブスレッドの親子関係や処理済みのスレッドにより得られる結果などをすべて管理しているため、マスタスレッドがクラッシュした場合には、アプリケーションが再起動となる。
【００２０】
以下に添付図面を参照して、実施の形態１および実施の形態２を詳細に説明する。
【００２１】
（実施の形態１）
図１は、実施の形態１にかかる制御処理の一実施例を示す説明図である。図１では、アプリケーションＡ，Ｃ，Ｄがすでに実行中であり、さらに、アプリケーションＢのスレッドの割り当て指示をスケジューラ１００が受け付けたとする。アプリケーションＡ，Ｃ，Ｄは高信頼であるアプリケーションであり、アプリケーションＢは高信頼でないアプリケーションであるとする。
【００２２】
ここで、高信頼であるアプリケーションと高信頼でないアプリケーションについて詳細に説明する。上述のように高信頼であるアプリケーションは、クラッシュする可能性が低いアプリケーションである。たとえば、高信頼であるアプリケーションとは、出荷時にインストールされているアプリケーションや出荷元が配布しているアプリケーションである。
【００２３】
一方、上述のように高信頼でないアプリケーションは、クラッシュする可能性が高いアプリケーションである。たとえば、高信頼でないアプリケーションとは、運用後に、利用者が任意にインストールしたアプリケーションである。
【００２４】
実施の形態１では、高信頼であるアプリケーションは高信頼アプリケーションと称し、高信頼アプリケーションのスレッドは高信頼スレッドと称する。高信頼スレッドのうちマスタスレッドは高信頼マスタスレッドと称し、高信頼スレッドのうちスレーブスレッドは高信頼スレーブスレッドと称する。
【００２５】
そして、実施の形態１では、高信頼でないアプリケーションは低信頼アプリケーションと称し、低信頼アプリケーションのスレッドは低信頼スレッドと称する。低信頼スレッドのうちマスタスレッドは低信頼マスタスレッドと称し、低信頼スレッドのうちスレーブスレッドは低信頼スレーブスレッドと称する。
【００２６】
図１では、ＣＰＵ０には、アプリケーションＤの高信頼マスタスレッドとアプリケーションＥの高信頼マスタスレッドが割り当てられ、ＣＰＵ１には、アプリケーションＡの高信頼マスタスレッドが割り当てられている。ＣＰＵ２には、アプリケーションＡの高信頼スレーブスレッドが割り当てられている。ＣＰＵ３には、アプレケーションＡが起動する高信頼スレーブスレッドが割り当てられている。
【００２７】
ここで、スケジューラ１００はオペレーティングシステムに含まれている。マスタＣＰＵであるＣＰＵ０が、スケジューラ１００によりスレッドの割り当て指示を受けると当該スレッドの割り当て処理を実行する。
【００２８】
まず、ＣＰＵ０が、スケジューラ１００によりアプリケーションＢのスレッドの割り当て指示を受け付けると、アプリケーションＢに関する信頼度をメモリから抽出して、アプリケーションＢが、高信頼アプリケーションであるか否かを判断する。ここでは、アプリケーションＢは、低信頼アプリケーションと判断される。
【００２９】
そして、たとえば、ＣＰＵ０が、スケジューラ１００によりＣＰＵ０〜３のうち高信頼マスタスレッドが割り当てられていないＣＰＵを特定する。ここで、ＣＰＵ０とＣＰＵ１には、高信頼マスタスレッドが割り当てられているため、低信頼アプリケーションＢのマスタスレッドを割り当てることができない（図１中点線矢印）。
【００３０】
ここでは、ＣＰＵ２とＣＰＵ３が、高信頼マスタスレッドが割り当てられていないＣＰＵとして特定され、たとえば、ＣＰＵ２にアプリケーションＢのスレッド（図１中低信頼スレッド））が割り当てられる（図１中実線矢印）。
【００３１】
たとえば、低信頼スレッドがクラッシュすることによりＣＰＵ２がストールしてしまうと、ＣＰＵ２に割り当てられている高信頼スレーブスレッドも同時にクラッシュする。しかしながら、高信頼スレッドであってもスレーブスレッドであるため、当該クラッシュした高信頼スレーブスレッドのみを再実行させればよく、クラッシュした影響が他のスレッドに波及しない。
【００３２】
また、図１では、高信頼マスタスレッドであるか低信頼スレッドであるかで割り当てるＣＰＵを分けているが、高信頼スレッドであるか低信頼スレッドであるかで割り当てるＣＰＵを分けてもよい。これにより、低信頼スレッドがクラッシュした場合の影響が、高信頼スレッドに影響しない。
【００３３】
（信頼度リスト）
図２は、信頼度リストの一例を示す説明図である。信頼度リスト２００は、マルチコアプロセッサの各ＣＰＵがアクセス可能なメモリに記憶されている情報であって、アプリケーション名２０１と、信頼度項目２０２とを備えている。ここでは、信頼度項目２０２の値が信頼度を示し、理解の容易化のために信頼度項目２０２を、高信頼と低信頼とクラッシュ済との３段階としている。信頼度については、従来から用いられている優先度の番号を流用してもよい。具体的には、たとえば、信頼度項目２０２の値が３の場合、高信頼アプリケーションであることを示し、信頼度項目２０２の値が２の場合、低信頼アプリケーションであることを示し、信頼度項目２０２の値が１の場合、クラッシュしたことがあるクラッシュ済のアプリケーションであることを示す。
【００３４】
また、マルチコアプロセッサシステムの運用設計時に設計者が、たとえば、あらかじめ組み込むアプリケーションに関する信頼度を信頼度リスト２００に登録する。
【００３５】
（タスク構成情報）
図３は、タスク構成情報の一例を示す説明図である。タスク構成情報３００はマルチコアプロセッサの各ＣＰＵがアクセス可能なメモリに記憶されている情報であり、タスク構成情報には実行中のアプリケーションに関する情報が記述されている。アプリケーションに関する情報とは、アプリケーションが高信頼アプリケーションか否かを示す信頼度フラグと、アプリケーションの各スレッドがどのＣＰＵに割り当てられたかを示す割り当て情報である。
【００３６】
タスク構成情報３００では、“ＴＡＳＫ＿ＮＡＭＥ”の代入文によりタスク名と、信頼度フラグとが示されている。ここで、タスクは、周知のように一つのアプリケーションが行っている作業全体を示す。タスク構成情報３００では、ＴＡＳＫ＿ＦＯＯとＴＡＳＫ＿ＸＹＺが記述され、ＴＡＳＫ＿ＦＯＯがアプリケーションＡに関する情報であり、ＴＡＳＫ＿ＸＹＺがアプリケーションＢに関する情報である。
【００３７】
さらに、タスク構成情報３００では、“ＭＡＳＴＥＲ”の代入文によりマスタスレッドの割り当て情報が示されている。ＴＡＳＫ＿ＦＯＯでは、マスタスレッドがＣＰＵ０に割り当てられていることが記述されている。さらに、タスク構成情報３００のＴＡＳＫ＿ＦＯＯでは、ＭＡＳＴＥＲ”の代入文の下にスレーブスレッドの割り当て情報が記述されている。スレーブスレッド１が“ＬＩＢ＿ＢＡＲ”を呼び出して、ＣＰＵ０に割り当てられているとことが記述され、スレーブスレッド２が“ＬＩＢ＿ＢＵＺ”を呼び出して、ＣＰＵ１に割り当てられていることが記述されている。ここで、“ＬＩＢ＿ＢＡＲ”と“ＬＩＢ＿ＢＵＺ”は、関数の名称である。
【００３８】
さらに、タスク構成情報３００のＴＡＳＫ＿ＦＯＯでは、スレーブスレッド３が０から２００まで同一の処理が行われるループ処理のうちの０〜１００までを行うスレッドであり、スレーブスレッド３が、ＣＰＵ２に割り当てられていることが記述されている。
【００３９】
そして、タスク構成情報３００のＴＡＳＫ＿ＦＯＯでは、０から２００まで同一の処理が行われるループ処理のうちの１０１〜２００までを行うスレッドがＣＰＵ２に割り当てられていることが記述されている。
【００４０】
ここで、タスク構成情報３００内に記述されているＣＯＡＲＳＥＧＲＡＩＮとＭＩＤＤＬＥＧＲＡＩＮについて説明する。実施の形態１では、関数を呼び出し、呼び出した関数を実行するスレッドを粗粒度のスレッドと呼び、ループ処理を実行するスレッドを中粒度のスレッドと呼ぶ。そして、ＣＯＡＥＳＥＧＲＡＩＮで表されているスレッドが、粗粒度のスレッドであり、ＭＩＤＤＬＥＧＲＡＩＮで表されているスレッドが、中粒度のスレッドである。
【００４１】
また、ＴＡＳＫ＿ＸＹＺでは、マスタスレッドがＣＰＵ１に割り当てられ、スレーブスレッドが、ＣＰＵ１に割り当てられていることが記述されている。そして、タスク構成情報３００では、当該スレーブスレッドが“ＬＩＢ＿ＢＡＲ”を呼び出して実行することを示している。
【００４２】
（マルチコアプロセッサシステムのハードウェア構成）
図４は、マルチコアプロセッサシステムのハードウェア構成を示すブロック図である。図４において、マルチコアプロセッサシステム４００は、ＣＰＵ０〜ＣＰＵｎ（ｎ≧１）と、メモリ４０１と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）４０２と、を備えている。また、各構成部は、バス４００によってそれぞれ接続されている。
【００４３】
ここで、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、実施の形態１では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００４４】
メモリ４０１は、共有メモリであって、アプリケーションソフトウェアやシステムソフトウェア（具体的には、ハイパーバイザ０〜ハイパーバイザｎと、スケジューラ１００を含むＯＳ０と、ＯＳ１）などのプログラムを記憶している。メモリ４０１は、さらに、上述した信頼度リスト２００やタスク構成情報３００などのシステムファイルを記憶している。メモリ４０１は、具体的には、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と、フラッシュＲＯＭなどを備えている。
【００４５】
本実施の形態１では、ｎ＝３として計４個のＣＰＵを備えていることとする。そして、ＣＰＵ０〜３が、独立して動作可能なコアとキャッシュとレジスタなどを備えている。
【００４６】
ＣＰＵ０は、マルチプロセッサシステムの全体の制御を司るマスタＣＰＵであり、ＣＰＵ１〜ＣＰＵ３は、スレーブＣＰＵである。たとえば、ＲＯＭが、上記プログラムなどを記憶し、ＲＡＭは、ＣＰＵ０〜３のワークエリアとして使用される。メモリ４０１に記憶されているプログラムは、ＣＰＵにロードされることで、コーディングされている処理をＣＰＵに実行させることとなる。
【００４７】
ＣＰＵ０は、ハイパーバイザ０とスケジューラ１００を含むＯＳ０をロードし、それぞれにコーディングされている処理を実行する。ＣＰＵ１は、ハイパーバイザ１とＯＳ１をロードし、それぞれにコーディングされている処理を実行する。
【００４８】
ＣＰＵ２は、ハイパーバイザ２とＯＳ１をロードし、それぞれにコーディングされている処理を実行する。ＣＰＵ３は、ハイパーバイザ３とＯＳ１をロードし、それぞれにコーディングされている処理を実行する。
【００４９】
ここで、ＣＰＵ１〜３が、それぞれハイパーバイザ１〜３によりハイパーバイザ処理を実行することで、同一のＯＳ１の処理を実行することができる。また、ＣＰＵ０〜３は、スレッドの起動指示を受け付けるとＯＳにより当該スレッドを生成する。
【００５０】
ハイパーバイザ０〜３は、ＣＰＵ０〜３などのハードウェア上で直接動作するプログラムである。ここで、通常のハイパーバイザ処理とは、一般のプログラムでは操作できないＣＰＵのキャッシュ制御やＩ／Ｏ操作を行うような特殊レジスタを操作したり、同様に、一般のプログラムでは読み書きできない共有メモリ上の空間を用いて動作を行う処理である。
【００５１】
また、ＣＰＵ１〜３は、ハイパーバイザ１〜３により上述した通常のハイパーバイザ処理を実行する前にＣＰＵ１〜３がそれぞれストールしていないことを示す情報をハイパーバイザ０へ送付する。ストールしているか否かは、プログラムカウンタが正常に動作しているか否かで判断される。また、ストールしたＣＰＵは、ストールしていないことを示す情報を送付できない。ここで、ストールしたＣＰＵをストールＣＰＵと称する。
【００５２】
そして、ＣＰＵ０は、ハイパーバイザ０により上述した通常のハイパーバイザ処理を実行する前にハイパーバイザ１〜３から送付されるストールしていないことを示す情報を受け付けて、ストールしたＣＰＵを検出する。つづいて、ストールＣＰＵを検出した場合、ストールＣＰＵによりクラッシュしたスレッドを特定する処理を実行し、通常のハイパーバイザ処理を実行する。一方、ストールＣＰＵが検出されなかった場合、通常のハイパーバイザ処理を実行する。
【００５３】
Ｉ／Ｆ４０２は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク４０３に接続され、当該ネットワーク４０３を介して他の装置に接続される。そして、Ｉ／Ｆ４０２は、ネットワーク４０３と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ４０２には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００５４】
また、図示していないが、マルチコアプロセッサシステム４００では、ディスプレイやキーボードなどを備えている。ディスプレイは、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイは、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００５５】
キーボードは、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００５６】
（実施の形態１にかかるマルチコアプロセッサシステムの機能的構成）
図５は、実施の形態１にかかるマルチコアプロセッサシステムの機能的構成を示すブロック図である。マルチコアプロセッサシステム５００は、受付部５０１と、抽出部５０２と、信頼度判断部５０３と、特定部５０４と、検出部５０５と、割り当て判断部５０６と、決定部５０７と、通知部５０８を含む構成である。各機能（受付部５０１〜通知部５０８）は、具体的には、たとえば、図４に示したメモリ４０１に記憶されたスケジューラ１００にコーディングされている処理をマスタＣＰＵであるＣＰＵ０が実行することにより実現される。
【００５７】
（スレッドの起動時に関する処理）
まず、受付部５０１は、スレッドまたはプロセスの起動指示を受け付ける。具体的には、たとえば、マスタＣＰＵであるＣＰＵ０が、ユーザーからのアプリケーションの起動指示を受け付ける。または、実行中のスレッドがあらたにスレッドを立ち上げる際にＣＰＵ０が実行中のスレッドからスレッドの起動指示を受け付ける。
【００５８】
つぎに、抽出部５０２は、受付部５０１によって受け付けた対象スレッドを起動する対象アプリケーションの信頼度を、信頼度リスト２００からアプリケーション名２０１に基づいて抽出する。
【００５９】
そして、信頼度判断部５０３は、抽出部５０２によって抽出された信頼度と指定閾値に基づいて対象アプリケーションが、高信頼アプリケーションか否かを判断する。具体的には、たとえば、信頼度が、指定閾値以上であれば対象アプリケーションが高信頼アプリケーションと判断され、指定閾値未満であれば対象アプリケーションが低信頼アプリケーションと判断される。
【００６０】
特定部５０４は、信頼度判断部５０３により高信頼アプリケーションと判断された場合、すべてのＣＰＵ０〜３のうち低信頼スレッドが割り当てられていないＣＰＵを特定する。
【００６１】
ここで、低信頼スレッドが割り当てられていないＣＰＵとは、高信頼スレッドが割り当てられているコアまたはいずれのスレッドも割り当てられていないＣＰＵである。
【００６２】
特定部５０４は、信頼度判断部５０３により低信頼アプリケーションと判断された場合、マルチコアプロセッサのうち高信頼スレッドが割り当てられていないＣＰＵを特定する。
【００６３】
ここで、高信頼スレッドが割り当てられていないＣＰＵとは、低信頼スレッドが割り当てられているコアまたはいずれのスレッドも割り当てられていないＣＰＵである。
【００６４】
そして、通知部５０８は、対象スレッドの起動指示を、特定部５０４により特定されたコアへ通知する。
【００６５】
また、特定部５０４は、信頼度判断部５０３により対象アプリケーションが低信頼アプリケーションであると判断された場合、マルチコアプロセッサのうち低信頼アプリケーションのマスタスレッドが割り当てられていないコアを特定する。
【００６６】
また、特定部５０４は、信頼度判断部５０３により高信頼アプリケーションであると判断された場合において、対象スレッドがマスタスレッドである場合のみ、マルチコアプロセッサのうち低信頼スレッドが割り当てられていないＣＰＵを特定する。
【００６７】
信頼度判断部５０３により対象アプリケーションが高信頼アプリケーションであると判断された場合において、対象スレッドが高信頼マスタスレッドのときに、通知部５０８は対象スレッドの起動指示を特定部５０４により特定されたＣＰＵへ通知する。一方、対象スレッドが高信頼マスタスレッドでないときに、通知部５０８は、対象スレッドの起動指示をマルチコアプロセッサのうち任意のＣＰＵへ通知する。対象スレッドが高信頼マスタスレッドでないとは、対象スレッドが高信頼スレーブスレッドであることを示している。
【００６８】
以上のことを踏まえて、割り当て例について図を用いて説明する。
【００６９】
図６は、高信頼スレッドが割り当てられる例を示す説明図である。具体的には、たとえば、まず、ＣＰＵ０は、ユーザーからアプリケーションＡの起動指示があると、アプリケーションＡのマスタスレッドの割り当て指示を受け付ける。なお、ここでは、すべてのＣＰＵ０〜３が、にいずれのスレッドも割り当てられていないこととする。図示しないが、ここでのタスク構成情報には、いずれの情報も記述されていないこととする。
【００７０】
そして、具体的には、たとえば、ＣＰＵ０が、優先度リスト２００にアクセスしてアプリケーション名２０１に基づいて信頼度項目２０２の値を抽出する。ここでは、アプリケーションＡの信頼度項目２０２の値は、３である。
【００７１】
つぎに、具体的には、たとえば、ＣＰＵ０が、アプリケーションＡの信頼度が指定閾値以上であるか否かを判断する。実施の形態１では、指定閾値は３である。そして、たとえば、ＣＰＵ０によりアプリケーションＡの信頼度が指定閾値以上であると判断されると、アプリケーションＡは高信頼アプリケーションであると判断される。一方、たとえば、ＣＰＵ０にアプリケーションＡの信頼度が指定閾値未満であると判断されると、アプリケーションＡは低信頼アプリケーションであると判断される。ここでは、アプリケーションＡの信頼度項目２０２の値は３であるため、アプリケーションＡは高信頼アプリケーションであると判断される。
【００７２】
つづいて、具体的には、たとえば、アプリケーションＡが高信頼アプリケーションであると判断された場合、ＣＰＵ０が、ＣＰＵ０〜３のうち低信頼スレッドが割り当てられていないＣＰＵをタスク構成情報に基づいて特定する。
【００７３】
たとえば、ＣＰＵ０が、タスク構成情報内に記述されているアプリケーションに関する情報ごとに信頼度フラグが１であるか否かを判断する。上述のようにアプリケーションに関する情報とは、高信頼アプリケーションであるか否かを示す信頼度フラグとアプリケーションのスレッドがそれぞれどのＣＰＵに割り当てられたかを示す割り当て情報である。
【００７４】
そして、ＣＰＵ０が、信頼度フラグが０であると判断されたアプリケーションに関する情報内に記述されているＣＰＵを特定する。特定されたＣＰＵが、低信頼スレッドが割り当てられているＣＰＵである。
【００７５】
そして、たとえば、ＣＰＵ０が、ＣＰＵ０〜３のなかで低信頼スレッドが割り当てられているＣＰＵを除くＣＰＵを低信頼スレッドが割り当てられていないＣＰＵとして特定する。ここでは、すべてのＣＰＵ０〜３が、低信頼スレッドが割り当てられていないＣＰＵとして特定される。
【００７６】
そして、たとえば、ＣＰＵ０が、ＣＰＵ０〜３のいずれかにマスタプロセスの起動指示を通知する。低信頼スレッドが割り当てられていないＣＰＵが複数ある場合において、どのＣＰＵに割り当てるかについては、従来の割り当て処理と同一であるため、詳細な説明を省略する。ここでは、ＣＰＵ０に通知される（図中（１））。そして、ＣＰＵ０が、マスタプロセスを起動する。
【００７７】
さらに、たとえば、ＣＰＵ０への起動指示の通知前に、ＣＰＵ０が、メモリ４０１へアクセスしてタスク構成情報にあらたにアプリケーションＡに関する情報を追加する。たとえば、タスク名と信頼度フラグが記述される。そして、当該アプリケーションＡに関する情報内にマスタスレッドがどのＣＰＵに割り当てられたかに関する割り当て情報を記述する。
【００７８】
つぎに、ＣＰＵ０が、スケジューラ１００により高信頼マスタスレッドからの高信頼スレーブスレッドの割り当て指示を受け付けると、当該高信頼マスタスレッドがＣＰＵ０〜３のうち任意のＣＰＵに割り当てられる。これにより、高信頼スレーブスレッドが、図中（２）〜（５）のように割り当てられたとする。
【００７９】
図７は、高信頼スレッドの割り当て後のタスク構成情報の一例を示す説明図である。タスク構成情報７００には、“ＴＡＳＫ＿ＦＯＯ”のみが記述されている。“ＴＡＳＫ＿ＦＯＯ”が、上述のタスク構成情報３００と同様にアプリケーションＡに関する情報である。なお、タスク構成情報７００は、上述のタスク構成情報３００の“ＴＡＳＫ＿ＸＹＺ”が記述されていないだけで、“ＴＡＳＫ＿ＦＯＯ”に関しては同一記述であるため、ここでは、詳細な説明を省略する。
【００８０】
つぎに、図８は、低信頼スレッドが割り当てられる例を示す説明図である。ここでは、アプリケーションＢの起動指示がユーザーの操作により通知されたとし、上述の高信頼アプリケーションの割り当て例との異なる点のみを説明する。
【００８１】
つぎに、具体的には、たとえば、ＣＰＵ０が、アプリケーションＢの信頼度が指定閾値以上であるか否かを判断する。ここで、信頼度リスト２００において、アプリケーションＢの信頼度項目２０２の値は２であるため、アプリケーションＢは、低信頼アプリケーションであると判断される。
【００８２】
つづいて、具体的には、たとえば、アプリケーションＢが低信頼アプリケーションであると判断された場合、ＣＰＵ０が、ＣＰＵ０〜３のうち高信頼マスタスレッドが割り当てられていないＣＰＵをタスク構成情報７００に基づいて特定する。
【００８３】
たとえば、ＣＰＵ０が、タスク構成情報７００内に記述されているアプリケーションに関する情報ごとに信頼度フラグが１であるか否かを判断する。たとえば、ＣＰＵ０が、信頼度フラグが１であるアプリケーションに関する情報内でＭＡＳＴＥＲの代入文に記述されているＣＰＵを特定する。特定されたＣＰＵは、高信頼マスタスレッドが割り当てられているＣＰＵである。そして、たとえば、ＣＰＵ０が、ＣＰＵ０〜３のうち高信頼マスタスレッドが割り当てられているＣＰＵを除く残余のＣＰＵを高信頼マスタスレッドスレッドが割り当てられていないＣＰＵとして特定する。
【００８４】
ここでは、“ＴＡＳＫ＿ＦＯＯ”のマスタプロセスがＣＰＵ０に割り当てられているため、ＣＰＵ１〜３が、高信頼アプリケーションのマスタプロセスが割り当てられていないＣＰＵとして特定される。
【００８５】
そして、たとえば、ＣＰＵ０が、ＣＰＵ１〜３のいずれかに低信頼マスタスレッドの起動指示を通知する。ここでは、ＣＰＵ１に通知される（図８中（６））。そして、ＣＰＵ１が、低信頼マスタスレッドを起動する。
【００８６】
さらに、たとえば、ＣＰＵ１への起動指示の通知前に、ＣＰＵ０がメモリ４０１へアクセスしてタスク構成情報７００にアプリケーションＢに関する情報を追加し、マスタスレッドがどのＣＰＵに割り当てられたかに関する情報を記述する。なお、図３のタスク構成情報３００が、タスク構成情報７００にアプリケーションＢに関する情報が追加された例である。
【００８７】
つぎに、アプリケーションＢの低信頼マスタスレッドから低信頼スレーブスレッドの割り当て指示が通知されると、ＣＰＵ０が、割り当て指示を受け付けて、再度、同様の処理を行う。これにより、図８中（７）のように低信頼スレーブスレッドが割り当てられる。
【００８８】
図５の説明に戻って、検出部５０５は、特定部５０４により特定されたＣＰＵのうちいずれのスレッドも割り当てられていないＣＰＵを特定する。
【００８９】
割り当て判断部５０６は、検出部５０５により検出されたＣＰＵに対象スレッドが割り当てられた場合、マルチプロセッサのすべてのＣＰＵ０〜３に高信頼マスタスレッドが割り当てられるか否かを判断する。
【００９０】
そして、決定部５０７は、割り当て判断部５０６によりすべてのＣＰＵ０〜３に高信頼マスタスレッドが割り当てられると判断された場合、特定部５０４により特定されたＣＰＵのうち検出部５０５により検出されたＣＰＵを除く残余のＣＰＵから対象スレッドを割り当てるＣＰＵを決定する。
【００９１】
つづいて、通知部５０８は、対象スレッドの割り当て指示を決定部５０７により決定されたＣＰＵへ通知する。
【００９２】
また、割り当て判断部５０６は、検出部５０５により検出されたＣＰＵに対象スレッドが割り当てられた場合、すべてのＣＰＵ０〜３に低信頼スレッドが割り当てられるか否かを判断する。
【００９３】
そして、決定部５０７は、割り当て判断部５０６によりすべてのＣＰＵに低信頼スレッドが割り当てられると判断された場合、特定部５０４により特定されたＣＰＵのうち検出部５０５により検出されたＣＰＵを除く残余のＣＰＵから対象スレッドを割り当てるＣＰＵを決定する。
【００９４】
つづいて、通知部５０８は、対象スレッドの割り当て指示を決定部５０７により決定されたＣＰＵへ通知する。
【００９５】
ここで、上述した処理を踏まえて図を用いて説明する。
【００９６】
図９は、すべてのＣＰＵ０〜３に低信頼スレッドが割り当てられない例を示す説明図である。ここで、たとえば、アプリケーションＢの低信頼マスタと、低信頼スレーブスレッド１と、低信頼スレーブスレッド２がすでに割り当てられているとする。なお、タスク構成情報については図示しない。そして、あらたに低信頼マスタからの低信頼スレーブスレッド３の割り当て指示がＣＰＵ０へ通知されたとする。
【００９７】
具体的には、たとえば、ＣＰＵ０が、タスク構成情報内に記述されているアプリケーションに関する情報ごとに信頼度フラグが１であるか否かを判断する。信頼度フラグが１と判断されたアプリケーションに関する情報内に記述されているＣＰＵを特定する。ここで、特定される。
【００９８】
そして、たとえば、ＣＰＵ０が、ＣＰＵ０〜３のなかで、信頼度フラグが１であるアプリケーションに関する情報内に記述されているＣＰＵを特定する。特定されたＣＰＵは高信頼スレッドが割り当てられているＣＰＵである。つづいて、すべてのＣＰＵ０〜３が、のうち高信頼スレッドが割り当てられているＣＰＵを除くＣＰＵを高信頼スレッドが割り当てられていないＣＰＵとして特定する。ここでは、ＣＰＵ０〜３のすべてが特定される。
【００９９】
そして、たとえば、ＣＰＵ０が、さらに、信頼度フラグが０であるアプリケーションに関する情報内に記述されているＣＰＵを特定する。特定されたＣＰＵが、低信頼スレッドが割り当てられているスレッドである。つぎに、たとえば、ＣＰＵ０が、高信頼スレッドが割り当てられていないＣＰＵのうち低信頼スレッドが割り当てられているＣＰＵを除く残余のＣＰＵを特定する。特定されたＣＰＵが、いずれのスレッドも割り当てられていないＣＰＵである。ここでは、高信頼スレッドが割り当てられているＣＰＵは無く、ＣＰＵ０〜２に低信頼スレッドが割り当てられているため、ＣＰＵ３がいずれのスレッドも割り当てられていないＣＰＵとして特定される。
【０１００】
そして、たとえば、ＣＰＵ０が、ＣＰＵ３へ対象スレッドを割り当てることで、ＣＰＵ０〜３のそれぞれのＣＰＵに低信頼スレッドが割り当てられるか否かを判断する。具体的には、たとえば、ＣＰＵ０が、低信頼スレッドが割り当てられているＣＰＵ数といずれのスレッドも割り当てられていないＣＰＵ数の合計値が、全ＣＰＵの数になるか否かを判断する。
【０１０１】
たとえば、合計値が全ＣＰＵの数になる場合、ＣＰＵ０はいずれのスレッドも割り当てられていないＣＰＵ３へ対象スレッドを割り当てることで、すべてのＣＰＵ０〜３に低信頼スレッドが割り当てられると判断する。たとえば、合計値が全ＣＰＵの数にならない場合、ＣＰＵ０は、いずれのスレッドも割り当てられていないＣＰＵ３へ対象スレッドを割り当てることで、すべてのＣＰＵ０〜３に低信頼スレッドが割り当てられないと判断する。
【０１０２】
ここでは、全ＣＰＵの数が４つであり、すでに低信頼スレッドが割り当てられているＣＰＵの数が３つであり、いずれのスレッドも割り当てられていないＣＰＵの数が１つである。よって、ＣＰＵ３へ対象スレッドを割り当てることでＣＰＵ０〜３のそれぞれのＣＰＵに低信頼スレッドが割り当てられると判断される。
【０１０３】
つぎに、具体的には、たとえば、ＣＰＵ０が、それぞれのＣＰＵに低信頼スレッドが割り当てられると判断した場合、ＣＰＵ０〜３のうちＣＰＵ３を除く残余のＣＰＵから対象スレッドを割り当てるＣＰＵを決定する。ここで、残余のＣＰＵがＣＰＵ０〜２である。ここでは、割り当てるＣＰＵがＣＰＵ１に決定される。
【０１０４】
そして、具体的には、たとえば、ＣＰＵ０が、対象スレッドの起動指示を決定したＣＰＵ１へ通知する。図９では、低信頼スレーブスレッド３があらたにＣＰＵ１に割り当てられている。
【０１０５】
また、高信頼マスタスレッドをすべてのＣＰＵ０〜３に割り当てないように制御する処理は、低信頼スレッドをすべてのＣＰＵ０〜３に割り当てないように制御する処理と同様の処理であるため、詳細な説明は省略する。
【０１０６】
図５に戻って、特定部５０４は、信頼度判断部５０３により低信頼アプリケーションと判断された場合、すべてのＣＰＵ０〜３のうちマスタＣＰＵであるＣＰＵ０を除く残余のＣＰＵから高信頼スレッドが割り当てられていないＣＰＵを特定する。
【０１０７】
そして、通知部５０８は、対象スレッドの起動指示を特定部５０４により特定されたＣＰＵへ通知する。したがって、マスタＣＰＵであるＣＰＵ０には、必ず低信頼スレッドが割り当てられない。
【０１０８】
図１０は、マスタＣＰＵに低信頼スレッドが割り当てられない例を示す説明図である。ここでは、まだ、ＣＰＵ２〜３にそれぞれ低信頼スレッドが割り当てられているとし、たとえば、ＣＰＵ０が低信頼スレッドの割り当て通知を受け付けたとする。なお、図１０の低信頼スレッドは、低信頼マスタスレッドと低信頼スレーブスレッドとを示す。
【０１０９】
そして、たとえば、ＣＰＵ０が、ＣＰＵ０〜３のうちＣＰＵ０を除くＣＰＵから高信頼スレッドが割り当てられていないＣＰＵを特定する。ここで、ＣＰＵ１〜３が特定される。そして、たとえば、ＣＰＵ０が、低信頼スレッドの起動指示をＣＰＵ１へ通知する（図１０中実線矢印）。
【０１１０】
したがって、ＣＰＵ０には、クラッシュの可能性の高い低信頼スレッドが割り当てられないため（図１０中点線矢印）、ＣＰＵ０がストールする可能性が低くなる。
【０１１１】
また、図示しないが、たとえば、ＣＰＵ０が、あらかじめＣＰＵ０とＣＰＵ１には、低信頼スレッドが割り当てられないように制御し、ＣＰＵ２とＣＰＵ３には高信頼マスタスレッドが割り当てられないように制御してもよい。
【０１１２】
図５に戻って、抽出部５０２は、さらに、対象アプリケーションのクラッシュ済であるか否かに関する情報を抽出する。
【０１１３】
そして、信頼度判断部５０３は、対象アプリケーションのクラッシュ済であるか否かに関する情報が、クラッシュ済であることを示しているか否かを判断する。
【０１１４】
そして、通知部５０８は、クラッシュ済であることを示す場合、対象スレッドの起動指示をどのＣＰＵにも通知せず、ユーザーへ対象アプリケーションがクラッシュ済で起動できないことを通知してもよい。
【０１１５】
一方、特定部５０４は、信頼度判断部５０３によりクラッシュ済でないと判断された場合、上述の処理を実施する。これにより、クラッシュしたことがあるアプリケーションを起動させないことができる。
【０１１６】
具体的には、たとえば、ＣＰＵ０が、スレッドの割り当て指示を受け付けると、信頼度リスト２００を読み出し、優先度項目２０２の値が１であるか否かを判断する。そして、ＣＰＵ０が、優先度項目２０２の値が１であると判断した場合、スレッドの起動指示をどのＣＰＵにも通知せず、対象アプリケーションがストール済であることを出力する。出力形式としては、たとえば、ディスプレイへの表示、Ｉ／Ｆ４０２による外部装置への送信がある。
【０１１７】
また、本実施の形態１では、対象アプリケーションが高信頼アプリケーションであるか否かに基づいて割り当てるＣＰＵを決定しているが、さらに、対象アプリケーションが高信頼アプリケーションと低信頼アプリケーションと中信頼アプリケーションなど信頼度を詳細に分割して割り当てるＣＰＵを決定してもよい。
【０１１８】
（マルチコアプロセッサシステムによる制御処理の制御処理手順）
図１１は、実施の形態１にかかるマルチコアプロセッサシステムによる制御処理の制御処理手順の一例を示すフローチャートである。まず、ＣＰＵ０が、スケジューラ１００により対象スレッドの割り当て指示を受け付けたか否かを判断し（ステップＳ１１０１）、受け付けなかったと判断した場合（ステップＳ１１０１：Ｎｏ）、ステップＳ１１０１へ戻る。一方、ＣＰＵ０が、スケジューラにより受け付けたと判断した場合（ステップＳ１１０１：Ｙｅｓ）、信頼度リストを読み出す（ステップＳ１１０２）。
【０１１９】
つぎに、ＣＰＵ０が、スケジューラ１００により、信頼度リスト２００からスレッドを起動する対象アプリケーションの信頼度を抽出し（ステップＳ１１０３）、対象アプリケーションがストールしたことがあるか否かを判断する（ステップＳ１１０４）。そして、ＣＰＵ０が、スケジューラ１００により、ストールしたことがないと判断した場合（ステップＳ１１０４：Ｎｏ）、対象アプリケーションが高信頼であるアプリケーションか否かを判断する（ステップＳ１１０５）。
【０１２０】
まず、ＣＰＵ０が、スケジューラ１００により対象アプリケーションが高信頼であると判断された場合（ステップＳ１１０５：Ｙｅｓ）、対象スレッドがマスタスレッドであるか否かを判断する（ステップＳ１１０６）。そして、ＣＰＵ０が、スケジューラ１００により対象スレッドがマスタスレッドであると判断した場合（ステップＳ１１０６：Ｙｅｓ）、高信頼マスタスレッドの割り当て処理を実施する（ステップＳ１１０７）。
【０１２１】
一方、ＣＰＵ０が、スケジューラ１００により対象スレッドがマスタスレッドでないと判断した場合（ステップＳ１１０６：Ｎｏ）、対象スレッドの起動指示を任意のＣＰＵへ通知する（ステップＳ１１０８）。
【０１２２】
つぎに、ステップＳ１１０５において、ＣＰＵ０が、スケジューラ１００により対象アプリケーションが高信頼でないアプリケーションと判断された場合（ステップＳ１１０５：Ｎｏ）、低信頼スレッドの割り当て処理を実施する（ステップＳ１１０９）。
【０１２３】
ステップＳ１１０７、ステップＳ１１０８、またはステップＳ１１０９のつぎに、ＣＰＵ０が、スケジューラ１００によりタスク構成情報に対象スレッドの割り当て情報を追加し（ステップＳ１１１０）、一連の処理を終了する。
【０１２４】
一方、ステップＳ１１０４において、ＣＰＵ０が、スケジューラ１００によりストールしたことがあると判断された場合（ステップＳ１１０４：Ｙｅｓ）、ストール済であることをユーザーに通知し（ステップＳ１１１１）、一連の処理を終了する。
【０１２５】
つぎに、図１２は、図１１で示した高信頼マスタスレッドの割り当て処理（ステップＳ１１０７）の詳細な説明を示すフローチャートである。まず、ＣＰＵ０が、スケジューラ１００によりタスク構成情報を読み出し（ステップＳ１２０１）、低信頼スレッドが割り当てられていないＣＰＵを特定する（ステップＳ１２０２）。そして、ＣＰＵ０が、スケジューラ１００により特定したＣＰＵからスレッドが割り当てられていないＣＰＵを検出する（ステップＳ１２０３）。
【０１２６】
そして、マルチコアプロセッサのうちそれぞれのＣＰＵに高信頼マスタスレッドが割り当てられるか否かを判断する（ステップＳ１２０４）。
【０１２７】
ＣＰＵ０が、スケジューラ１００によりそれぞれのＣＰＵに高信頼マスタスレッドが割り当てられると判断した場合（ステップＳ１２０４：Ｙｅｓ）、特定したＣＰＵのうち検出したＣＰＵを除く残余のＣＰＵから対象スレッドを割り当てるＣＰＵを決定する（ステップＳ１２０５）。決定方法については、従来のスケジューリング処理と同一処理であるため、詳細な説明を省略する。
【０１２８】
一方、ＣＰＵ０が、スケジューラ１００によりそれぞれのＣＰＵに高信頼マスタスレッドが割り当てられないと判断した場合（ステップＳ１２０４：Ｎｏ）、特定したＣＰＵから対象スレッドを割り当てるＣＰＵを決定する（ステップＳ１２０６）。
【０１２９】
そして、ステップＳ１２０５またはステップＳ１２０６のつぎに、ＣＰＵ０が、スケジューラ１００により対象スレッドの起動指示を決定したＣＰＵへ通知し（ステップＳ１２０７）、ステップＳ１１１０へ移行する。
【０１３０】
一方、ＣＰＵ０が、スケジューラ１００により割り当てられないと判断した場合（ステップＳ１２０４：Ｎｏ）、ステップＳ１２０６へ移行する。
【０１３１】
つぎに、図１３は、図１１で示した低信頼スレッドの割り当て処理（ステップＳ１１０９）の詳細な説明を示すフローチャートである。まず、ＣＰＵ０が、スケジューラ１００によりタスク構成情報を読み出し（ステップＳ１３０１）、高信頼マスタスレッドが割り当てられていないＣＰＵを特定する（ステップＳ１３０２）。そして、ＣＰＵ０が、スケジューラ１００により特定したＣＰＵからスレッドが割り当てられていないＣＰＵを検出し（ステップＳ１３０３）、検出したＣＰＵに対象スレッドを割り当てることで、それぞれのＣＰＵに低信頼マスタスレッドが割り当てられるか否かを判断する（ステップＳ１３０４）。
【０１３２】
そして、ＣＰＵ０が、スケジューラ１００によりそれぞれのＣＰＵに低信頼スレッドが割り当てられると判断した場合（ステップＳ１３０４：Ｙｅｓ）、特定したＣＰＵのうち検出したＣＰＵを除く残余のＣＰＵから対象スレッドを割り当てるＣＰＵを決定する（ステップＳ１３０５）。
【０１３３】
一方、ＣＰＵ０が、スケジューラ１００によりそれぞれのＣＰＵに低信頼スレッドが割り当てられないと判断した場合（ステップＳ１３０４：Ｎｏ）、特定したＣＰＵから対象スレッドを割り当てるＣＰＵを決定する（ステップＳ１３０６）。そして、ＣＰＵ０が、スケジューラ１００により対象スレッドの起動指示を選択したＣＰＵへ通知し（ステップＳ１３０６）、１１１０へ移行する。
【０１３４】
また、ＣＰＵ０は、ＯＳによりアプリケーションのダウンロードまたはインストール時に優先度を抽出し、信頼度リストにアプリケーション名を登録し、抽出した優先度を信頼度として登録する。
【０１３５】
（マルチコアプロセッサシステムの登録処理手順）
図１４は、マルチコアプロセッサシステムによる登録処理の登録処理手順の一例を示すフローチャートである。ここでは、ＣＰＵ０が、ＯＳにより信頼度リストへ信頼度を登録する登録処理手順を示す。まず、ＣＰＵ０が、ＯＳ０によりアプリケーションをダウンロードし（ステップＳ１４０１）、優先度タグを抽出する（ステップＳ１４０２）。そして、ＣＰＵ０が、ＯＳ０により信頼度リストを読み出し（ステップＳ１４０３）、アプリケーションの信頼度を登録する（ステップＳ１４０４）。優先度タグとは、たとえば、出荷元などを示すタグであり、アプリケーションの信頼度は、出荷元がマルチコアプロセッサの設計元であったりすれば信頼度リストに高信頼で登録される。
【０１３６】
（実施の形態２）
つぎに、図１５は、実施の形態２にかかる制御処理の一実施例を示す説明図である。実施の形態２では、ストールしたストールＣＰＵによってクラッシュしたスレッドを直ちに再起動する例を示す。ここで、ストールＣＰＵは、プログラムカウンタが動作せず、ソフトウェアによる処理が実行できないＣＰＵである。まず、ＣＰＵ０が、ハイパーバイザ０によりストールしたストールＣＰＵを検出する（図１５中（１））。ここでは、ＣＰＵ１がストールＣＰＵとして検出される。
【０１３７】
つぎに、ストールＣＰＵによりクラッシュしたスレッドを特定する（図１５中（２））。ここでは、高信頼スレーブスレッド２が、特定されたスレッドである。最後に、ＣＰＵ０が、ハイパーバイザ０により特定したスレッドの割り当て指示をスケジューラ１００へ通知する（図１５中（３））。
【０１３８】
そして、ＣＰＵ０が、スケジューラ１００により高信頼スレーブスレッドをＣＰＵ１とＣＰＵ２とＣＰＵ３のいずれか一つに割り当てる。
【０１３９】
ここで、復帰処理に関する課題を説明する。従来技術１および２を用いると動作状態を保存するためにメモリやスレッドの状態を確保する必要があり、組み込みシステムでは、メモリのリソースが少ないためリソースの確保が困難であった。よって、リソースの確保のためにシステムが膨大になるという問題点があった。
【０１４０】
そこで、実施の形態２では、僅かなメモリリソースの仕様でストールしたストールＣＰＵによってクラッシュしたスレッドを直ちに再起動する。実施の形態２では、実施の形態１で示した構成と同一構成については同一符号を付し、説明を省略する。
【０１４１】
（実施の形態２にかかるマルチコアプロセッサシステム）
図１６は、実施の形態２にかかるマルチコアプロセッサシステムの機能的構成を示すブロック図である。マルチコアプロセッサシステム１６００は、受付部１６０１と、検出部１６０２と、停止通知部１６０３と、削除部１６０４と、特定部１６０５と、リブート通知部１６０６と、変更部１６０７と、割り当て通知部１６０８と、解除通知部１６０９を含む構成である。各機能（受付部１６０１〜解除通知部１６０９）は、具体的には、たとえば、図４に示したメモリ４０１に記憶されたハイパーバイザ０にコーディングされている処理をＣＰＵ０が実行することにより実現される。
【０１４２】
まず、受付部１６０１は、マルチコアプロセッサのうち一のＣＰＵを除くＣＰＵから送付されるストールしていないことを示す情報を受け付ける。具体的には、たとえば、ハイパーバイザ１〜３によるハイパーバイザ処理を実行するＣＰＵ１〜３から送付される存命シグナルを受け付ける。
【０１４３】
検出部１６０２は、マルチコアプロセッサのうちストールＣＰＵを検出する。具体的には、たとえば、ＣＰＵ０が、マルチコアプロセッサのうち存命シグナルの無かったＣＰＵをストールＣＰＵとして検出する。ここで、検出部１６０２によりストールＣＰＵが検出されなかった場合、通常のハイパーバイザ処理が実行される。以下、検出部１６０２によりストールＣＰＵが検出された場合の処理について説明する。
【０１４４】
まず、メモリ４０１内でストールＣＰＵに割り当てられていた一部のメモリは、解放される。
【０１４５】
そして、停止通知部１６０３は、全アプリケーションの一時停止指示をすべてのＣＰＵ０〜３へ通知する。削除部１６０４は、検出部１６０２により検出されたストールＣＰＵがストールする要因となったスレッドを起動させるアプリケーションに関する情報をタスク構成情報３００から削除する。ストールＣＰＵがストールする要因となったスレッドをクラッシュスレッドと称する。
【０１４６】
また、変更部１６０７は、信頼度リストに記述されている検出部１６０２により検出されたストールＣＰＵをストールさせたクラッシュスレッドを起動させるアプリケーションの信頼度をクラッシュ済であることを示す信頼度に変更する。
【０１４７】
つぎに、特定部１６０５は、検出部１６０２により検出されたストールＣＰＵでのストールによりクラッシュしたスレッドを特定する。ここで、ストールＣＰＵでのストールによりクラッシュしたスレッドとは、ストールＣＰＵがストールする直前まで正常に処理が実行されていたスレッドであり、ストールすることによってクラッシュしたスレッドである。よって、上述のクラッシュスレッドは、ストールＣＰＵでのストールによりクラッシュしたスレッドに含まれない。具体的には、たとえば、タスク構成情報７００を読み出し、タスク構成情報７００からストールＣＰＵに割り当てられていたスレッドを特定する。
【０１４８】
そして、リブート通知部１６０６は、検出部１６０２により検出されたストールＣＰＵへリブート指示を通知する。具体的には、たとえば、ＣＰＵ０が、リセット指示をストールＣＰＵへ行う。なお、リセット指示はハイパーバイザの特権命令である。
【０１４９】
そして、割り当て通知部１６０８は、特定部１６０５により特定されたスレッドをすべてのＣＰＵ０〜３のうちストールＣＰＵを除く残余のＣＰＵに割り当てるためのスレッドの割り当て指示を、スケジューラ１００に通知する。具体的には、たとえば、ＣＰＵ０が、ＣＰＵ０が有しているレジスタに割り当て指示を示す情報を出力する。
【０１５０】
これにより、ＣＰＵ０が、スケジューラ１００によりスレッドの割り当て指示の通知を受けると、スレッドのマルチコアプロセッサへの割り当て処理を実行する。具体的には、たとえば、ＣＰＵ０が実施の形態１で示した処理を実行する。
【０１５１】
また、割り当て通知部１６０８は、ストールＣＰＵがリブート完了後に特定部１６０５により特定されたスレッドの割り当て指示を、スケジューラ１００に通知する。
【０１５２】
さらに、解除通知部１６０９は、割り当て通知部１６０８によりスレッドの割り当て通知が通知され、当該スケジューラ１００によりスレッドが割り当てられると、一時停止を解除する解除通知を、ＣＰＵ０〜３へ通知する。
【０１５３】
以上のことを踏まえて、ストールＣＰＵによってクラッシュしたスレッドの再起動例について図を用いて説明する。まず、実施の形態２では、クラッシュ前の例として図９で示した割り当て結果と図３で示したタスク構成情報３００を挙げて説明する。
【０１５４】
図１７は、スレッドがクラッシュした例を示す説明図である。ＣＰＵ１に割り当てられている低信頼スレーブスレッドがクラッシュし、そして、クラッシュした影響でＯＳ１がクラッシュしてプログラムカウンタが停止することでＣＰＵ１がストールしたとする。
【０１５５】
図１７に記載のＣＰＵ０の処理とは、ＯＳ０による処理とハイパーバイザ０による処理を示し、ＣＰＵ１の処理とは、ＯＳ１による処理とハイパーバイザ１による処理を示している。ＣＰＵ２の処理とは、ＯＳ１による処理とハイパーバイザ２による処理を示し、ＣＰＵ３の処理とは、ＯＳ１による処理とハイパーバイザ３による処理を示している。
【０１５６】
図１８は、各ＣＰＵが存命シグナルをＣＰＵ０へ送付する例を示す説明図である。たとえば、ＣＰＵ０〜３がストールしていない場合、ＣＰＵ１〜３は、それぞれのハイパーバイザにより定期的にストールしていないことを示す情報をＣＰＵ０へ通知する。そして、通知後、ＣＰＵ１〜３はそれぞれのハイパーバイザにより通常のハイパーバイザ処理を実施する。
【０１５７】
ＣＰＵ２とＣＰＵ３が、それぞれハイパーバイザ２とハイパーバイザ３によりＣＰＵ０へストールしていないことを示す情報（以下、「存命シグナル」と称する。）を送付する（図１８中（１））。一方、ＣＰＵ１がストールしたため、ＣＰＵ１はハイパーバイザ１によりＣＰＵ０へ存命シグナルを送付できない。
【０１５８】
具体的には、たとえば、ＣＰＵ０は、ハイパーバイザ０により各ＣＰＵからの存命シグナルを受け付ける。そして、ＣＰＵ０が存命シグナルを送付していないＣＰＵを検出する。ここで、存命シグナルを送付していないＣＰＵがストールＣＰＵである。
【０１５９】
つぎに、図１９は、アプリケーションが停止される例を示す説明図である。具体的には、たとえば、ＣＰＵ０は、ストールＣＰＵを検出すると、ハイパーバイザ０により各ＣＰＵへアプリケーションの一時停止指示を通知する（図１９中（２））。そして、各ＣＰＵが、ＯＳにより起動しているスレッドをすべて一時停止させる。
【０１６０】
そして、具体的には、たとえば、ＣＰＵ０が、アプリケーションＢに関する情報であるＴＡＳＫ＿ＸＹＺの記載をすべて削除する。削除後のタスク構成情報は図７のタスク構成情報７００と同一である。なお、ＣＰＵのストール原因であるクラッシュしたスレッドの特定についてはＯＳにより従来から可能であるため詳細な説明は省略する。
【０１６１】
つぎに、図２０は、リブート指示例およびスレッドの割り当て指示例を示す説明図である。具体的には、たとえば、ＣＰＵ０が、ハイパーバイザ０によりＣＰＵ１へリブート指示を通知し（図２０中（３））、ＣＰＵ１が、リブート指示を受け付けるとリブートする。
【０１６２】
さらに、具体的には、たとえば、ＣＰＵ０が、ハイパーバイザ０によりタスク構成情報を読み出し、ＣＰＵ１に割り当てられていたスレッドを特定する。
【０１６３】
図２１は、信頼度リストの信頼度が変更される例を示す説明図である。具体的には、たとえば、ＣＰＵ０が、ハイパーバイザ０により信頼度リスト２００を読み出し、アプリケーションＢの信頼度項目２０２の値を１に変更する。変更後の信頼度リストが、信頼度リスト２１００である。
【０１６４】
そして、図２２は、ストールＣＰＵを除く残余のＣＰＵにクラッシュしたスレッドが割り当てられる例を示す説明図である。具体的には、たとえば、ＣＰＵ０が、ハイパーバイザ０により特定したスレッドの割り当て指示をスケジューラ１００へ通知する（図２２中（４））。
【０１６５】
そして、ＣＰＵ０が、ＣＰＵ１がリブート中の場合、スケジューラ１００によりＣＰＵ０と、ＣＰＵ２と、ＣＰＵ３のうち任意のＣＰＵに特定したスレッドを割り当てる。ここでは、ＣＰＵ０が、スケジューラ１００によりＣＵＰ２へ高信頼スレーブスレッド２の起動指示を通知する（図２２中（５））。そして、ＣＰＵ２が、ＯＳ１により高信頼スレーブスレッド２を起動する。
【０１６６】
つづいて、ＣＰＵ０が、ハイパーバイザ０により一時停止の解除指示（図２２中（６））を各ＣＰＵへ通知し、各ＣＰＵが、ＯＳにより一時停止を解除する。これにより、ストールＣＰＵによりクラッシュしたスレッドが直ぐに再起動される。
【０１６７】
そして、図２３は、再起動後のタスク構成情報の一例を示す説明図である。スケジューラ１００によりタスク構成情報が更新され、タスク構成情報２３００では高信頼スレーブスレッドがＣＰＵ２に割り当てられていることが示されている（図２３中下線部）。
【０１６８】
また、ＣＰＵ１がすでにリブート済の場合、ＣＰＵ０が、スケジューラ１００によりＣＰＵ０〜３のうち任意のＣＰＵに特定したスレッドを割り当てる。
【０１６９】
図１６に戻って、また、割り当て通知部１６０８は、スケジューラ１００に割り当て指示を通知せず、特定部１６０５により特定されたスレッドの起動指示を、リブート通知部１６０６によるリブート指示によりリブートされたリブート済ストールＣＰＵへ通知する。
【０１７０】
図２４は、ストールＣＰＵへスレッドの起動指示が通知される例を示す説明図である。具体的には、たとえば、ＣＰＵ０が、ハイパーバイザ０によりスケジューラ１００へ割り当て指示を通知せず、ＣＰＵ１のリブート後に特定されたスレッドの起動指示（図２４中（１））をＣＰＵ１へ通知する。そして、具体的には、たとえば、ＣＰＵ０が、ハイパーバイザ０により各ＣＰＵへアプリケーションの一時停止を解除させる解除指示（図２４中（２））を通知する。
【０１７１】
具体的には、たとえば、ＣＰＵ０は、ＯＳ０により解除指示を受け付けると、割り当てられている各スレッドの一時停止を解除する。さらに、具体的には、たとえば、ＣＰＵ２と、ＣＰＵ３とが、ＯＳ１により解除指示を受け付けると、各ＣＰＵに割り当てられている各スレッドの一時停止を解除する。なお、一時停止処理や、一時停止の解除処理の具体的な処理内容については、公知であるため詳細な説明を省略する。
【０１７２】
また、図１６に戻って、特定部１６０５は、ストールＣＰＵによりクラッシュしたスレッドを特定するとともに、クラッシュしたスレッドが中粒度のスレッドであるか粗粒度のスレッドであるかを特定する。そして、特定部１６０５は、クラッシュしたスレッドが粗粒度のスレッドである場合、呼び出し関数と当該関数の係数を特定する。
【０１７３】
一方、特定部１６０５は、クラッシュしたスレッドが中粒度のスレッドである場合、クラッシュ時に実行していた実行位置と終了位置を特定する。
【０１７４】
そして、割り当て通知部１６０８は、特定されたスレッドが粗粒度のスレッドの場合、割り当て通知とともに呼び出し関数に関する情報を同時に通知する。一方、特定されたスレッドが中粒度のスレッドの場合、割り当て通知とともに実行位置と終了位置を同時に通知する。
【０１７５】
具体的には、たとえば、ＣＰＵ０が、タスク構成情報を読み出し、タスク構成情報からクラッシュしたスレッドを特定するとともに、クラッシュしたスレッドがＣＯＡＲＳＥＧＲＡＩＮ（粗粒度）であるかＭＩＤＤＬＥＧＲＡＩＮ（中粒度）であるかを特定する。
【０１７６】
そして、具体的には、たとえば、ＣＰＵ０が、クラッシュしたスレッドがＣＯＡＲＳＥＧＲＡＩＮであると特定すると、当該スレッドが呼び出す呼び出し関数を特定する。
【０１７７】
一方、具体的には、たとえば、ＣＰＵ０が、クラッシュしたスレッドがＭＩＤＤＬＥＧＲＡＩＮであると特定すると、当該スレッドが実施していたループ処理のループ番号を特定する。さらに、具体的には、たとえば、ＣＰＵ０が、タスク構成情報に記述されている１０１〜２００のループ処理のうちすでに実行済のループ番号を特定する。実行済のループ番号に関する情報は、ＯＳによりメモリ４０１やＣＰＵ内のレジスタに記憶されている。たとえば、１０１〜２００のうち１〜５０まで実行済であれば、５０が記憶される。
【０１７８】
また、メモリ４０１のうちストールＣＰＵに割り当てられた領域に実行済のループ番号の情報が記憶されている場合、ストールＣＰＵがリブートされる前に、ＣＰＵ０が実行済のループ番号の情報をメモリ４０１のうちＣＰＵ０に割り当てられた領域へ退避する。
【０１７９】
そして、具体的には、たとえば、ＣＰＵ０が、ハイパーバイザ０によりクラッシュしたスレッドの割り当て指示とループ処理のループ番号のうち未実行のループ番号とをスケジューラ１００へ通知する。または、たとえば、ＣＰＵ０が、ハイパーバイザ０によりクラッシュしたスレッドの起動指示と未実行のループ番号とをリブート済のＣＰＵ１へ通知する。
【０１８０】
（実施の形態２にかかる制御処理の制御処理手順）
図２５は、実施の形態２にかかるマルチコアプロセッサシステムによる制御処理の制御処理手順の一例を示すフローチャートである。まず、ＣＰＵ０が、ハイパーバイザ０により存命シグナルを受け付け（ステップＳ２５０１）、全ＣＰＵから存命シグナルを受け付けたか否かを判断する（ステップＳ２５０２）。
【０１８１】
そして、ＣＰＵ０が、ハイパーバイザ０により全ＣＰＵから存命シグナルを受け付けていないと判断した場合（ステップＳ２５０２：Ｎｏ）、再起動処理を実施する（ステップＳ２５０３またはステップＳ２５０４）。つづいて、ＣＰＵ０が、ハイパーバイザにより通常のハイパーバイザ処理を実施し（ステップＳ２５０５）、一連の処理を終了する。一方、ＣＰＵ０が、ハイパーバイザ０により全ＣＰＵから存命シグナルを受け付けたと判断した場合（ステップＳ２５０２：Ｙｅｓ）、ステップＳ２５０５へ移行する。
【０１８２】
図２６は、図２５で示した再起動処理（ステップＳ２５０３）の詳細な説明を示すフローチャートである。まず、ストールしたストールＣＰＵを特定し（ステップＳ２６０１）、全アプリケーションの一時停止指示を通知する（ステップＳ２６０２）。そして、ストールＣＰＵへリブート指示を通知し（ステップＳ２６０３）、信頼度リストを読み出す（ステップＳ２６０４）。
【０１８３】
そして、クラッシュしたアプリケーションの信頼度を変更し（ステップＳ２６０５）、タスク構成情報を読み出す（ステップＳ２６０６）。タスク構成情報からクラッシュしたアプリケーションに関するタスク情報を削除し（ステップＳ２６０７）。
【０１８４】
つぎに、タスク構成情報からストールＣＰＵに割り当てられているスレッドを検出し（ステップＳ２６０８）、未選択のスレッドがあるか否かを判断する（ステップＳ２６０９）。
【０１８５】
そして、未選択のスレッドがあると判断した場合（ステップＳ２６０９：Ｙｅｓ）、未選択のスレッドから任意のスレッドを選択する（ステップＳ２６１０）。そして、選択したスレッドが粗粒度か否かを判断し（ステップＳ２６１１）、粗粒度であると判断した場合（ステップＳ２６１１：Ｙｅｓ）、呼び出し関数を特定する（ステップＳ２６１２）。
【０１８６】
一方、粗粒度でないと判断した場合（ステップＳ２６１１：Ｎｏ）、未実行のイタレーションを特定する（ステップＳ２６１３）。
【０１８７】
そして、ステップＳ２６１２またはステップＳ２６１３のつぎに、ステップＳ２６１２またはステップＳ２６１３で特定した情報を関連付けてスケジューラへスレッドの割り当て指示を通知し（ステップＳ２６１４）、ステップＳ２６０９へ戻る。
【０１８８】
また、未選択のスレッドがないと判断した場合（ステップＳ２６０９：Ｎｏ）、一時停止の解除指示を通知し（ステップＳ２６１５）、ステップＳ２５０５へ移行する。
【０１８９】
図２７は、図２５で示した再起動処理（ステップＳ２５０４）の詳細な説明を示すフローチャートである。図２７で示すステップＳ２７０１〜Ｓ２７１３は、図２６で示したステップＳ２６０１〜Ｓ２６１３と同一処理であり、ステップＳ２７１６は、ステップＳ２６１５と同一処理であるため、図２６で示した処理と同一処理については説明を省略する。よって、ここでは、ステップＳ２７１４とステップＳ２７１５について説明する。
【０１９０】
ステップＳ２７１２またはステップＳ２７１３のつぎにストールＣＰＵがリブートしたか否かを判断する（ステップＳ２７１４）。そして、リブートしていない場合（ステップＳ２７１４：Ｎｏ）、ステップＳ２７１４に戻る。
【０１９１】
リブートしたと判断した場合（ステップＳ２７１４：Ｙｅｓ）、ステップＳ２７１２またはステップＳ２７１３で特定した情報を関連付けてリブート後のストールＣＰＵへ起動指示を通知する（ステップＳ２７１５）。
【０１９２】
（マルチコアプロセッサによる存命シグナルの送付処理手順）
図２８は、マルチコアプロセッサによる存命シグナルの送付処理手順の一例を示すフローチャートである。まず、スレーブＣＰＵのうちストールしていないＣＰＵが、それぞれのハイパーバイザにより存命シグナルをマスタＣＰＵへ送付し（ステップＳ２８０１）、通常のハイパーバイザ処理を実施する（ステップＳ２８０２）。なお、スレーブＣＰＵがストールした場合、図２８に記載の処理が実施できないので存命シグナルがマスタＣＰＵへ送付されず、マスタＣＰＵがストールしたスレーブＣＰＵを検出することができる。
【０１９３】
また、マスタＣＰＵが、実施の形態１で示したようにマスタＣＰＵへ高信頼マスタスレッドを割り当てるスケジュール処理を実施することで、マスタＣＰＵがストールせず、ハイパーバイザ処理が常時動作可能である。
【０１９４】
以上説明したように、マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、高信頼であるアプリケーションのスレッドと高信頼でないアプリケーションのスレッドとを同一のＣＰＵに割り当てないように制御する。これにより、高信頼でないアプリケーションのスレッドがクラッシュすることによって、高信頼であるアプリケーションのスレッドがクラッシュするのを防止することができる。
【０１９５】
また、高信頼であるアプリケーションのマスタスレッドが割り当てられているＣＰＵに高信頼でないアプリケーションのスレッドを割り当てないように制御する。これにより、高信頼でないアプリケーションのスレッドがクラッシュしても高信頼であるアプリケーションのスレーブスレッドのみがクラッシュする可能性があり、高信頼であるアプリケーションのマスタスレッドがクラッシュするのを防止することができる。これにより、クラッシュしたスレーブスレッドのみを再起動するだけでよく、復帰が容易である。
【０１９６】
また、高信頼でないアプリケーションのスレッドが割り当てられているＣＰＵに高信頼であるアプリケーションのマスタスレッドを割り当てないように制御する。そして、高信頼であるアプリケーションのスレーブスレッドは、マルチコアプロセッサのうち任意のＣＰＵに割り当てる。
【０１９７】
高信頼であるアプリケーションのスレッドのうち少なくともマスタスレッドが、高信頼でないアプリケーションによってクラッシュするのを防止することで、高信頼であるアプリケーションのすべてのスレッドを再起動させる手間を防止することができる。
【０１９８】
マルチコアプロセッサのうちのすべてのＣＰＵに高信頼であるアプリケーションのマスタスレッドが割り当てられないように制御する。これにより、高信頼であるアプリケーションのみが実行されていても、高信頼でないアプリケーションのスレッドをＣＰＵに割り当てることができる。
【０１９９】
マルチコアプロセッサのうちすべてのＣＰＵに高信頼でないアプリケーションのマスタスレッドが割り当てられないように制御する。これにより、高信頼でないアプリケーションのみが起動されていても、高信頼であるアプリケーションのスレッドをＣＰＵに割り当てることができる。
【０２００】
また、マスタコアには、高信頼でないアプリケーションのスレッドを割り当てないことで、スケジューリング処理を実行するマスタコアが、ストールするのを防止することができる。
【０２０１】
以上説明したように、マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、ストールしたストールＣＰＵによりクラッシュしたスレッドを再起動させるようにスケジューラを制御する。これにより、少ないメモリ資源であってもクラッシュしたスレッドを直ちに再起動することができる。
【０２０２】
また、ストールＣＰＵをリブートし、リブート後のストールＣＰＵへクラッシュしたスレッドの起動指示を通知することで、スケジューラを介さずともクラッシュしたスレッドを低負荷なコアへ容易に割り当てることができる。
【符号の説明】
【０２０３】
５００，１６００  マルチコアプロセッサシステム
１００  スケジューラ
５０２  抽出部
５０３  信頼度判断部
５０４  特定部
５０５  検出部
５０６  割り当て判断部
５０７  決定部
５０８  通知部
１６０２  検出部
１６０５  特定部
１６０８  割り当て通知部
１６０６  リブート通知部
【図１】
2011104824.tif 000003
【図２】
2011104824.tif 000004
【図３】
2011104824.tif 000005
【図４】
2011104824.tif 000006
【図５】
2011104824.tif 000007
【図６】
2011104824.tif 000008
【図７】
2011104824.tif 000009
【図８】
2011104824.tif 000010
【図９】
2011104824.tif 000011
【図１０】
2011104824.tif 000012
【図１１】
2011104824.tif 000013
【図１２】
2011104824.tif 000014
【図１３】
2011104824.tif 000015
【図１４】
2011104824.tif 000016
【図１５】
2011104824.tif 000017
【図１６】
2011104824.tif 000018
【図１７】
2011104824.tif 000019
【図１８】
2011104824.tif 000020
【図１９】
2011104824.tif 000021
【図２０】
2011104824.tif 000022
【図２１】
2011104824.tif 000023
【図２２】
2011104824.tif 000024
【図２３】
2011104824.tif 000025
【図２４】
2011104824.tif 000026
【図２５】
2011104824.tif 000027
【図２６】
2011104824.tif 000028
【図２７】
2011104824.tif 000029
【図２８】
2011104824.tif 000030
【国際調査報告】
2011104824.tif 000031
2011104824.tif 000032
2011104824.tif 000033
2011104824.tif 000034
2011104824.tif 000035