(57)【要約】【課題】階層型のマルチプロセッサシステムにおいて、優先順位の高いアプリケーションの実行を確保する。【解決手段】各プロセッサユニットＵ０〜Ｕ３は、それぞれ複数のプロセッサコアＣ００〜Ｃ０３、Ｃ１０〜Ｃ１３、Ｃ２０〜Ｃ２３、Ｃ３０〜Ｃ３３を備える。アプリケーションの優先順位は予め定義されている。プロセッサユニットＵ０〜Ｕ３の優先順位は、プロセッサユニットＵ０〜Ｕ３に割り当てられるアプリケーションの配置に応じて動的に変化する。アプリケーションＡを実行していたプロセッサコアＣ００が故障したとき、プロセッサコアＵ０内に代替実行可能なプロセッサコアが存在しなければ、最も優先順位の低いプロセッサユニット内のプロセッサコアがそのアプリケーションＡを代替実行する。【選択図】図３
2009069963.tif 000002
【特許請求の範囲】
【請求項１】
互いに接続された複数のプロセッサユニットがそれぞれ１または複数のプロセッサコアを備えるマルチプロセッサシステムであって、
前記複数のプロセッサユニットの優先順位は、各プロセッサユニットにおいて実行されているアプリケーションの中の代表アプリケーションの優先順位に基づいて決定される
ことを特徴とするマルチプロセッサシステム。
【請求項２】
互いに接続された複数のプロセッサユニットがそれぞれ１または複数のプロセッサコアを備えるマルチプロセッサシステムであって、
アプリケーションの優先順位を管理する第１の管理手段と、
各プロセッサユニット上で実行されているアプリケーションの優先順位に基づいて各プロセッサユニットの優先順位を管理する第２の管理手段と、
第１のプロセッサユニットにおいて、故障が検出されたプロセッサコアにより実行されていたアプリケーションである代替対象アプリケーションの優先順位がそのユニット内で最も高かった場合であって、そのユニット内に代替実行可能なプロセッサコアが存在しない場合には、前記第１のプロセッサユニットよりも優先順位の低い第２のプロセッサユニット内のプロセッサコアに前記代替対象アプリケーションを割り当てる制御手段、
を有するマルチプロセッサシステム。
【請求項３】
請求項２に記載のマルチプロセッサシステムであって、
前記第２のプロセッサユニットは、前記複数のプロセッサユニットの中で最も優先順位の低いプロセッサユニットである
ことを特徴とするマルチプロセッサシステム。
【請求項４】
請求項２に記載のマルチプロセッサシステムであって、
前記制御手段は、前記第２のプロセッサユニットにおいて最も優先順位の低いアプリケーションを実行しているプロセッサコアに前記代替対象アプリケーションを割り当てる
ことを特徴とするマルチプロセッサシステム。
【請求項５】
請求項２に記載のマルチプロセッサシステムであって、
前記制御手段は、前記第１のプロセッサユニット内に代替実行可能なプロセッサコアが存在する場合には、そのユニットにおいて最も優先順位の低いアプリケーションを実行しているプロセッサコアに前記代替対象アプリケーションを割り当てる
ことを特徴とするマルチプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサコアを備えるマルチプロセッサシステムに係わり、特に、互いに接続された複数のプロセッサユニットがそれぞれ１または複数のプロセッサコアを備えるマルチプロセッサシステムに係わる。
【背景技術】
【０００２】
様々な分野において組込みシステムが広く普及してきている。組込みシステムは、制御すべき対象の装置に内蔵される情報処理システムであって、１または複数のプロセッサを用いてその装置の動作を制御する。そして、近年では、高い信頼性を必要とする組込みシステム（例えば、自動車、航空機、鉄道車両、船舶等に組み込まれる制御システム）が要求されている。
【０００３】
高い信頼性が要求される組込みシステムにおいては、例えば、３重化システムまたは２重化システムが採用されている。３重化システムにおいては、同一の処理を並列に実行する３個のプロセッサの出力値が互いに比較され、多数決の原理に従って出力結果が決定される。このとき、特定のプロセッサの出力値が他の２個のプロセッサの出力値と異なっていた場合には、その特定のプロセッサは故障しているものと判断され、システムから切り離される。これにより、高い信頼性が実現される。２重化システムにおいては、２個のプロセッサの出力値を互いに比較することによって故障を検出できる。ただし、２重化システムでは、出力値の比較だけでは、どちらのプロセッサが故障しているのかを判定することはできない。
【０００４】
組込みシステムは、高い処理能力を必要とする場合には、複数のプロセッサエレメントを備えるマルチプロセッサシステム構成が採用される。ここで、このマルチプロセッサシステムの信頼性を高めるためには、上述した２重化／３重化を導入する構成が考えられる。しかし、各プロセッサエレメントをそれぞれ２重化／３重化すると、全体としてコストが大幅に増加することとなる。
【０００５】
一方、マルチプロセッサシステムは、複数のプロセッサエレメントを備えているので、各プロセッサエレメントが相互に動作状態を監視する機能を導入すれば、各プロセッサエレメントの故障を検出することが可能である。例えば、特許文献１、２には、各プロセッサエレメントが他のプロセッサエレメントから出力される「自己故障検出情報」あるいは「生存通知」を監視するサーバーシステムが記載されている。
【０００６】
また、特許文献３に記載の組込みシステムにおいては、各プロセッサエレメントがそれぞれ自分の「動作状態」を共有メモリに書き込み、他のプロセッサエレメントがその共有メモリを参照する。このとき、異常値が検出されると、その異常値を書き込んだプロセッサエレメントが故障しているものと判断される。そして、そのプロセッサエレメントにより実行されていたアプリケーションは、他のプロセッサエレメントにより実行されるように制御される。さらに、故障が検出されたプロセッサエレメントは、リセットされた後に再起動される。
【０００７】
さらに、互いに接続された複数のプロセッサユニットがそれぞれ複数のプロセッサコアを備える大規模な階層型マルチプロセッサシステムにおける故障時の復旧／代替実行としては、例えば、特許文献４、５に記載の方法が提案されている。なお「代替実行」とは、あるプロセッサにより実行されていたプログラムを他のプロセッサに実行させる処理を意味する。
【０００８】
特許文献４に記載のシステムは、同一命令セットを実行できる複数のＣＰＵグループを備える。第１のグループは、例えば、科学技術演算処理に係わる命令を高速に実行できる複数のＣＰＵを備え、第２のグループは、例えば、文字処理に係わる命令を高速に実行できる複数のＣＰＵを備える。各プログラムは、その処理内容（ここでは、科学技術演算、文字処理）に応じて、対応するクループに割り当てられる。そして、あるプログラムを実行しているＣＰＵが故障すると、そのプログラムは、同一グループ内の他のＣＰＵに割り当てられて実行される。ただし、同一グループ内に代替実行すべきＣＰＵが残っていないときは、そのプログラムは、他のグループに属するＣＰＵに割り当てられる。
【０００９】
特許文献５には、運用系および代替系から構成されるホットスタンバイマルチプロセッサシステムが記載されている。このシステムは、複数の代替系を備え、各代替系の優先順位は予め決められてテーブルに登録されている。そして、運用系において障害が発生すると、このテーブルに従って、使用すべき代替系が決定される。
【特許文献１】特開平７−２６２０４２号公報
【特許文献２】特開昭６３−００４３６６号公報
【特許文献３】特開２００４−３１０２５２号公報
【特許文献４】特開平６−３４８６６４号公報
【特許文献５】特開平７−２４８９３３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
上述のような階層型のマルチプロセッサシステム（互いに接続された複数のプロセッサユニットがそれぞれ１または複数のプロセッサコアを備える構成）においては、上位階層（すなわち、ユニット間）で故障検出および／または代替実行に要する時間は、下位階層（すなわち、ユニット内）で要する時間と比べて大幅に長くなる。よって、システム全体として故障検出および／または代替実行に要する時間が長くなってしまう。
【００１１】
また、従来の技術においては、障害発生時に代替実行を行う機能を備えている場合であっても、各プログラムの優先順位は必ずしも考慮されていなかった。このため、障害発生時に優先順位の高いプログラムの実行を継続できなくなるおそれがあった。
【００１２】
本発明の課題は、階層型のマルチプロセッサシステムにおいて、優先順位の高いアプリケーションの実行を確保する方式を提供することである。
【課題を解決するための手段】
【００１３】
本発明のマルチプロセッサシステムは、互いに接続された複数のプロセッサユニットがそれぞれ１または複数のプロセッサコアを備える構成であって、前記複数のプロセッサユニットの優先順位は、各プロセッサユニットにおいて実行されているアプリケーションの中の代表アプリケーションの優先順位に基づいて決定される。
【００１４】
この構成によれば、アプリケーションの配置が変わると、それに伴ってプロセッサユニットの優先順位も動的に変化する。したがって、常に、優先順位の高いアプリケーションを実行しているプロセッサユニットを認識することができる。
【００１５】
本発明の他の態様のマルチプロセッサシステムは、互いに接続された複数のプロセッサユニットがそれぞれ１または複数のプロセッサコアを備える構成であって、アプリケーションの優先順位を管理する第１の管理手段と、各プロセッサユニット上で実行されているアプリケーションの優先順位に基づいて各プロセッサユニットの優先順位を管理する第２の管理手段と、第１のプロセッサユニットにおいて、故障が検出されたプロセッサコアに
より実行されていたアプリケーションである代替対象アプリケーションの優先順位がそのユニット内で最も高かった場合であって、そのユニット内に代替実行可能なプロセッサコアが存在しない場合には、前記第１のプロセッサユニットよりも優先順位の低い第２のプロセッサユニット内のプロセッサコアに前記代替対象アプリケーションを割り当てる制御手段、を有する。
【００１６】
この構成によれば、あるプロセッサコアが故障したときには、まず、その故障プロセッサを含むプロセッサユニット内で代替実行が可能か否かを判断する。そして、このプロセッサユニット内で代替実行できない場合には、故障プロセッサで実行されていたアプリケーションを他のプロセッサユニットに実行させる。このとき、各プロセッサユニットの優先順位は、各アプリケーションの優先順位および各アプリケーションの配置に応じて決まる。よって、故障発生時には、代替実行を行うべき優先順位の低いプロセッサユニットが適切に選択される。
【発明の効果】
【００１７】
本発明によれば、階層型のマルチプロセッサシステムにおいて、優先順位の高いアプリケーションの実行を確保することができる。
また、本発明によれば、階層型のマルチプロセッサシステムにおいて、下位階層内（プロセッサユニット内）での故障検出および／または代替実行に要する時間を短く保つことができる。
【発明を実施するための最良の形態】
【００１８】
図１は、本発明の実施形態のマルチプロセッサシステムの基本構成を示す図である。実施形態のマルチプロセッサシステム１は、複数のプロセッサユニットを備える。図１に示すマルチプロセッサシステム１は、４個のプロセッサユニットＵ０〜Ｕ３を備えるが、プロセッサユニットの数は特に限定されるものはない。また、プロセッサユニットＵ０〜Ｕ３は、ユニット間接続ネットワーク２により互いに接続されている。すなわち、プロセッサユニットＵ０〜Ｕ３は、ユニット間接続ネットワーク２を介して相互にデータを送受信することができる。なお、ユニット間接続ネットワーク２は、特に限定されるものではないが、例えば、バス形式であってもよいし、スイッチ・ハブ等を利用したスター型接続形式であってもよい。
【００１９】
各プロセッサユニットＵ０〜Ｕ３は、それぞれ、１または複数のプロセッサコア（或いは、プロセッサエレメント）を備えている。この実施例では、各プロセッサユニットＵ０〜Ｕ３は、それぞれ４個のプロセッサコアを備えている。即ち、プロセッサユニットＵ０は、プロセッサコアＣ００〜Ｃ０３を備え、プロセッサユニットＵ１は、プロセッサコアＣ１０〜Ｃ１３を備え、プロセッサユニットＵ２は、プロセッサコアＣ２０〜Ｃ２３を備え、プロセッサユニットＵ３は、プロセッサコアＣ３０〜Ｃ３３を備えている。なお、各プロセッサユニットが備えるプロセッサコアの数は特に限定されるものではなく、プロセッサユニット間で互いに同じである必要もない。
【００２０】
各プロセッサコアは、それぞれ、１または複数のアプリケーションプログラム（以下、単に「アプリケーション」と呼ぶ。）を実行することができる。また、マルチプロセッサシステム１において実行すべきアプリケーションは、任意のプロセッサコアで実行可能であるものとする。
【００２１】
各プロセッサユニットＵ０〜Ｕ３は、それぞれ対応するメモリＭ０〜Ｍ３を備える。各メモリは、例えばＤＲＡＭ／ＳＲＡＭ等の揮発性メモリやフラッシュメモリ等の不揮発性メモリで構成され、対応するプロセッサユニット内のプロセッサコアにより使用される。また、ユニット間接続ネットワーク２には、共有メモリ３が接続されている。共有メモリ
３は、各プロセッサユニットＵ０〜Ｕ３からアクセス可能な記憶領域である。
【００２２】
上記構成のマルチプロセッサシステムは、上位階層構成として、複数のプロセッサユニットを備える。そして、各プロセッサユニットは、下位階層構成として、複数のプロセッサコアを備える。
【００２３】
図２は、プロセッサユニットのハードウェア構成を示す図である。ここでは、図１に示すプロセッサユニットＵ０について示すが、他のプロセッサユニットＵ１〜Ｕ３の構成も基本的に同じであるものとする。
【００２４】
メモリバス１１には、メモリＭ０が接続されている。また、プロセッサコアＣ００〜Ｃ０３は、メモリバス１１に接続されている。そして、プロセッサコアＣ００〜Ｃ０３は、メモリバス１１を介してメモリＭ０にアクセスすることができる。また、プロセッサコアＣ００〜Ｃ０３は、メモリＭ０を介して相互にデータを送受信することができる。
【００２５】
コア間通信パス１２は、プロセッサコアＣ００〜Ｃ０３間を接続する。そして、プロセッサコアＣ００〜Ｃ０３は、コア間通信パス１２を介して（すなわち、メモリＭ０を介することなく）、相互にデータを送受信することができる。
【００２６】
プロセッサコアＣ００〜Ｃ０３は、Ｉ／Ｏバス１３に接続されている。Ｉ／Ｏバス１３には、ユニット間接続ネットワーク２に接続されると共に、各種Ｉ／Ｏデバイスが接続される。
【００２７】
なお、各プロセッサコアＣ００〜Ｃ０３とメモリバス１１との間、各プロセッサコアＣ００〜Ｃ０３とコア間通信パス１２との間、各プロセッサコアＣ００〜Ｃ０３とＩ／Ｏバス１３との間には、図示しないが、それぞれスイッチが設けられている。そして、これらのスイッチを制御することにより、所望のプロセッサコアを、マルチプロセッサシステムの共有資源および他のプロセッサコアから切り離すことが可能である。
【００２８】
図３は、アプリケーションの割当ての実施例である。ここでは、マルチプロセッサシステム１において１６個のアプリケーションＡ、Ｂ、Ｃ、Ｄ、Ｅ０〜Ｅ３、Ｆ０〜Ｆ３、Ｇ０〜Ｇ３を実行するものとする。また、各アプリケーションの優先順位が予め決められており、図４に示すアプリケーション管理テーブル２１に登録されているものとする。
【００２９】
優先順位の高いアプリケーションは、基本的に、異なるプロセッサユニットに割り当てられる。図３に示す例では、優先順位の高い４つのアプリケーションＡ〜ＤがそれぞれプロセッサユニットＵ０〜Ｕ３の任意のプロセッサコアに割り当てられる。また、他のアプリケーションは、マルチプロセッサシステム１の初期状態において、それぞれ対応するプロセッサコアに割り当てられる。マルチプロセッサシステム１におけるアプリケーションの割当ての一例を図５に示す。なお、各アプリケーションは、それぞれ、共有メモリ３から対応するメモリＭ０〜Ｍ１にロードされる。
【００３０】
図６は、プロセッサユニットのソフトウェア構成を示す図である。ここでは、図１に示すプロセッサユニットＵ０について示すが、他のプロセッサユニットＵ１〜Ｕ３の構成も基本的に同じであるものとする。
【００３１】
図６に示すように、プロセッサコアＣ００〜Ｃ０３上でそれぞれリアルタイムＯＳ（ＲＴＯＳ）が動作する。このリアルタイムＯＳは、コア間通信機能を備えている。コア間通信機能は、同一プロセッサユニット内のプロセッサコア間の通信だけでなく、他のプロセッサユニット内のプロセッサコアとの間の通信も制御できるものとする。また、リアルタ
イムＯＳ上で対応するアプリケーション（図６に示す時点では、アプリケーションＡ、Ｅ０、Ｆ０、Ｇ０）が実行される。なお、各アプリケーションは、それぞれ任意のプロセッサコアにおいて実行可能であるものとする。
【００３２】
動作状態管理モジュール２２は、故障検出機能および復旧機能を提供する。故障検出機能は、各プロセッサコアの故障を検出する。プロセッサコアの故障とは、プロセッサコア自体のハードウェア故障のみを意味するものではなく、そのプロセッサコア上で動作しているアプリケーションの異常に起因する動作不良、および／またはメモリに起因する動作不良等も含むものとする。なお、プロセッサコアの故障の検出方法は、特に限定されるものではないが、例えば、パリティチェック等により実現してもよいし、上述した特許文献１、２に記載の「自己故障検出情報」あるいは「生存通知」を監視することにより実現してもよい。また、故障検出機能は、ユニット間接続ネットワーク２とプロセッサユニット間の接続（例えば、Ｉ／Ｏバス１３）の障害、各プロセッサユニットが備えるメモリ（Ｍ０〜Ｍ３）の故障、コア間通信パス１２の故障も検出するようにしてもよい。なお、動作状態管理モジュール２２は、各プロセッサコアにそれぞれ常駐するようにしてもよいし、プロセッサユニット内に１つだけ設けるようにしてもよい。動作状態管理モジュール２２は、プロセッサユニット内に１つだけ設ける場合には、任意のプロセッサコアに動的に割り当て可能であるものとする。この場合、動作状態管理モジュール２２は、例えば、そのプロセッサユニット内で最も優先順位の高いアプリケーションと同じプロセッサコアに割り当てられるものとする。
【００３３】
復旧機能は、後で詳しく説明するが、プロセッサコアの故障が検出されたときに、その故障プロセッサコア上で動作していたアプリケーションを他のプロセッサコアに代替実行させる。このとき、下位階層レベル（すなわち、故障が発生したプロセッサコアを含むプロセッサユニット内）での復旧が優先される。そして、下位階層レベルでの復旧ができない場合に、上位階層レベル（すなわち、プロセッサユニット間）での復旧を行う。
【００３４】
リアルタイムＯＳは、各アプリケーションを任意のプロセッサコアに割り当てることができる。ここで、アプリケーションの割当ての変更は、例えば、リアルタイムＯＳのタスク切替え機能を利用して実現される。あるいは、代替実行を行うプロセッサコアをリセット、再ブートすることによりアプリケーションの割当て変更を行っても良い。
【００３５】
次に、実施形態のマルチプロセッサシステム１の復旧機能を実現するための制御について説明する。
実施形態のマルチプロセッサシステム１においては、各アプリケーションの優先順位が定義されているだけでなく、各プロセッサユニットにも優先順位が与えられる。プロセッサユニットの優先順位は、各ユニットにおいて実行されるアプリケーションのなかの代表アプリケーションに基づいて決定される。代表アプリケーションとは、この実施例では、当該プロセッサユニットにより実行されるアプリケーションの中で最も優先順位の高いアプリケーションを意味する。例えば、図３〜図５に示す状態においては、プロセッサユニットＵ０により実行されるアプリケーションＡ、Ｅ０、Ｆ０、Ｇ０の中で、アプリケーションＡの優先順位が最も高い。よって、プロセッサユニットＵ０の代表アプリケーションは、アプリケーションＡである。同様に、プロセッサユニットＵ１、Ｕ２、Ｕ３の代表アプリケーションは、それぞれ、アプリケーションＢ、Ｃ、Ｄである。
【００３６】
アプリケーションＡ〜Ｄの優先順位は、「第１位：Ａ」「第２位：Ｂ」「第３位：Ｃ」「第４位：Ｄ」である。したがって、この場合、プロセッサユニットＵ０〜Ｕ３の優先順位は、「第１位：Ｕ０」「第２位：Ｕ１」「第３位：Ｕ２」「第４位：Ｕ３」となる。なお、各アプリケーションは、任意のプロセッサユニットの任意のプロセッサコアにより実行され得る。特に、プロセッサコアが故障した場合には、その故障したプロセッサコアで
動作していたアプリケーションは、他のプロセッサコアに割り当てられる。よって、プロセッサユニットＵ０〜Ｕ３の優先順位は、アプリケーションの割当てに応じて、動的に変化する。
【００３７】
図７は、状態管理テーブル２３の実施例である。図７において、「コア０」とは、プロセッサユニットＵ０においては「プロセッサコアＣ００」を意味し、プロセッサユニットＵ１、Ｕ２、Ｕ３においてはそれぞれ「プロセッサコアＣ１０」「プロセッサコアＣ２０」「プロセッサコアＣ３０」を意味する。「コア１」〜「コア３」についても同様である。なお、図７は、マルチプロセッサシステム１において各アプリケーションが図３に示すように割当てられているときの状態管理テーブル２３の状態を表している。
【００３８】
状態管理テーブル２３は、プロセッサユニットＵ０〜Ｕ３の優先順位を管理する。プロセッサユニットＵ０〜Ｕ３の優先順位は、上述したようにして決定される。また、状態管理テーブル２３は、各アプリケーションの割当てを管理する。ここで、「★印」は、各プロセッサユニットの代表アプリケーションを示している。代表アプリケーションは、この実施例では、上述したように、各プロセッサユニット内で実行されているアプリケーションの中で最も優先順位の高いアプリケーションを意味する。
【００３９】
なお、状態管理テーブル２３は、各プロセッサユニット内のプロセッサコアでの動作状況および故障の有無、各プロセッサユニットの優先順位、各プロセッサユニットの故障の有無に関する情報を格納するが、他の情報を含むようにしてもよい。
【００４０】
次に、プロセッサコアの故障が検出されたときの復旧手順について説明する。なお、以下の説明では、アプリケーションＡ〜Ｄ、Ｅ０〜Ｅ３、Ｆ０〜Ｆ３、Ｇ０〜Ｇ３の優先順位は、図４に示すように定義されているものとする。
【００４１】
＜ケース１＞
ケース１は、図３に示す正常動作状態において、アプリケーションＢを実行しているプロセッサコアＣ１０が故障した場合を想定する。以下、図８を参照しながらケース１における復旧手順を説明する。
【００４２】
プロセッサコアＣ１０の故障を検出すると、まず、プロセッサユニットＵ１上で実行している各アプリケーション（Ｂ、Ｅ１、Ｆ１、Ｇ１）の優先順位をチェックする。ケース１では、故障したプロセッサコアＣ１０により実行されていたアプリケーションＢよりも優先順位の低いアプリケーション（Ｅ１、Ｆ１、Ｇ１）が存在する。ここで、アプリケーションＧ１の優先順位が最も低い。また、このアプリケーションＧ１は、プロセッサコアＣ１３により実行されている。よって、この場合、アプリケーションＧ１を停止し、アプリケーションＢは、図８（ａ）に示すように、そのアプリケーションＧ１を実行していたプロセッサコアＣ１３に割当てられる。また、状態管理テーブル２３は、図８（ｂ）に示すように更新される。
【００４３】
このように、あるプロセッサコアが故障したときに、その故障が発生したプロセッサユニット内に代替プロセッサが存在する場合には、当該プロセッサユニット内で代替実行処理が行われる。この場合、他のプロセッサユニットの動作状況等を考慮する必要がないので、復旧処理に要する時間は短い。
【００４４】
なお、プロセッサコアの故障を検出する処理、代替プロセッサを決定する処理、状態管理テーブル２３を更新する処理は、動作状態管理モジュール２２により行われる。また、アプリケーションを他のプロセッサコアに実行させる処理は、例えば、リアルタイムＯＳのタスク切替え機能を利用して実現される。このとき、リアルタイムＯＳは、例えば、動
作状態管理モジュール２２から切替え指示が与えられる。
【００４５】
＜ケース２＞
ケース２は、図９（ａ）に示すように、プロセッサユニットＵ１において、プロセッサコアＣ１１〜Ｃ１３が故障しており、プロセッサコアＣ１０上でアプリケーションＢのみが動作しているときに、そのプロセッサコアＣ１０が故障した場合を想定する。なお、他のプロセッサユニットの各プロセッサコアはそれぞれ正常であるものとする。以下、図９（ａ）および図９（ｂ）を参照しながらケース２における復旧手順を説明する。
【００４６】
プロセッサコアＣ１０の故障を検出すると、ケース１と同様に、プロセッサユニットＵ１上で実行している各アプリケーションの優先順位をチェックする。しかし、ケース２では、プロセッサユニットＵ１においてアプリケーションＢのみが動作している。また、プロセッサユニットＵ１上で動作しているプロセッサコアは、プロセッサコアＣ１０のみである。すなわち、プロセッサユニットＵ１上には、アプリケーションＢを代替実行可能なプロセッサコアは存在しない。この場合、アプリケーションＢについて、ユニット間代替実行を行うか否かを判断する。ユニット間代替実行とは、あるプロセッサユニット上で動作していたアプリケーションを他のプロセッサユニットに割り当てて実行させることを意味する。
【００４７】
ユニット間代替実行を行うか否かの判断においては、まず、故障したプロセッサコアＣ１０で動作していたアプリケーションＢ（以下、「故障アプリケーションＢ」と呼ぶことがある。）の優先順位を、他のプロセッサユニットＵ０、Ｕ２、Ｕ３の代表アプリケーションの優先順位と比較する。この実施例では、プロセッサユニットＵ０、Ｕ２、Ｕ３の代表アプリケーションは、それぞれアプリケーションＡ、Ｃ、Ｄである。ここで、アプリケーションＡ〜Ｄの優先順位は、図４に示すアプリケーション管理テーブル２１に登録されており、「Ａ＞Ｂ＞Ｃ＞Ｄ」である。すなわち、故障アプリケーションＢよりも優先順位の低いアプリケーション（Ｃ、Ｄ）が存在し、それらの中でアプリケーションＤの優先順位が最も低い。よって、故障アプリケーションＢを代替実行すべきプロセッサユニットとしてプロセッサユニットＵ３が選択される。
【００４８】
なお、代替実行すべきプロセッサユニットは、状態管理テーブル２３により管理されている「ユニット優先順位」に基づいて選択するようにしてもよい。この場合、故障アプリケーションＢを実行していたプロセッサユニットＵ１よりも優先順位が低く、且つ最も優先順位の低いプロセッサユニット（すなわち、プロセッサユニットＵ３）が選択される。
【００４９】
続いて、選択した代替実行プロセッサユニットにおいて、最も優先順位の低いアプリケーションを実行しているプロセッサコアを選択する。この実施例では、プロセッサコアＣ３０〜Ｃ３３においてアプリケーションＤ、Ｅ３、Ｆ３、Ｇ３が実行されており、その優先順位は「Ｄ＞Ｅ３＞Ｆ３＞Ｇ３」である。よって、アプリケーションＧ３を実行しているプロセッサコアＣ３３が選択される。そうすると、アプリケーションＢは、図９（ａ）に示すように、プロセッサコアＣ３３に割当てられる。また、状態管理テーブル２３は、図９（ｂ）に示すように更新される。なお、プロセッサユニットＵ１は、すべてのプロセッサコアが停止しているので、マルチプロセッサシステム１から切り離される。
【００５０】
上述の手順により、プロセッサユニットＵ３においては、アプリケーションＤ、Ｅ３、Ｆ３、Ｂが実行されることになる。したがって、以降、プロセッサユニットＵ３の代表アプリケーションは「Ｂ」になる。そうすると、プロセッサユニットＵ３の優先順位は、プロセッサユニットＵ２よりも高くなる。
【００５１】
このように、あるプロセッサコアが故障したときに、その故障が発生したプロセッサユ
ニット内に代替プロセッサが存在しない場合には、他のプロセッサユニットに代替実行を依頼する。このとき、最も優先順位の低いプロセッサユニットが代替実行を行うので、優先順位の高いアプリケーションの動作が停止することはない。
【００５２】
なお、ケース２は、プロセッサユニットＵ１が故障した場合にも同様に起こり得る。プロセッサユニットＵ１の故障は、例えば、プロセッサユニットＵ１とユニット間接続ネットワーク２との接続に障害が発生したとき、プロセッサユニットＵ１が備えるメモリＭ１が故障したとき、プロセッサユニットＵ１内の各プロセッサコア間を接続するコア間通信パス１２が故障したときに検出される。
【００５３】
＜ケース３＞
ケース３は、ケース２による復旧手順に続いて、図１０（ａ）に示すように、下記の動作状態においてさらにプロセッサコアＣ００が故障した場合を想定する。
プロセッサユニットＵ０：プロセッサコアＣ０１〜Ｃ０３が故障しており、プロセッサコアＣ００でアプリケーションＡが動作中
プロセッサユニットＵ１：すべてのプロセッサコアが故障
プロセッサユニットＵ２：プロセッサコアＣ２３が故障しており、プロセッサコアＣ２０〜Ｃ２２においてそれぞれアプリケーションＣ、Ｅ２、Ｆ２が動作中
プロセッサユニットＵ３：プロセッサコアＣ３０〜Ｃ３３においてそれぞれアプリケーションＤ、Ｅ３、Ｆ３、Ｂが動作中
そして、このような動作状態において、さらに、アプリケーションＡを実行するプロセッサコアＣ００が故障したものとする。なお、プロセッサコアＣ００が故障した時点で、プロセッサユニットＵ０〜Ｕ３の優先順位は、図９（ｂ）に示すように「１位：Ｕ０」「２位：Ｕ３」「３位：Ｕ２」「Ｕ１：故障」であるものとする。以下、図１０を参照しながらケース３における復旧手順を説明する。
【００５４】
アプリケーションＡを実行するプロセッサコアＣ００が故障したとき、プロセッサユニットＵ０上に代替可能なプロセッサコアは存在しない。そうすると、プロセッサユニット間の優先順位に基づいて代替実行すべきプロセッサユニットを決定する。ここで、プロセッサユニットＵ０〜Ｕ３の優先順位は、「Ｕ３＞Ｕ２（Ｕ０、Ｕ１は、故障）」である。したがって、アプリケーションＡを代替実行すべきプロセッサユニットとして、より優先順位の低いプロセッサユニットＵ２が選択される。
【００５５】
続いて、選択した代替実行プロセッサユニットにおいて、最も優先順位の低いアプリケーションを実行しているプロセッサコアを選択する。この実施例では、プロセッサコアＣ２０〜Ｃ２２においてアプリケーションＣ、Ｅ２、Ｆ２が実行されており、その優先順位は「Ｃ＞Ｅ２＞Ｆ２」である。よって、アプリケーションＦ２を実行しているプロセッサコアＣ２２が選択される。そうすると、アプリケーションＡは、図１０（ａ）に示すように、プロセッサコアＣ２２に割り当てられる。また、状態管理テーブル２３は、図１０（ｂ）に示すように更新される。なお、プロセッサユニットＵ０は、すべてのプロセッサコアが停止しているので、マルチプロセッサシステム１から切り離される。
【００５６】
なお、ケース３は、プロセッサユニットＵ１が故障した後にプロセッサユニットＵ０が故障した場合にも同様に起こり得る。
このように、実施形態のマルチプロセッサシステム１においては、アプリケーションの配置に応じて、プロセッサユニットの優先順位が動的に変化する。したがって、階層型のマルチプロセッサシステムにおいて、優先順位の高いアプリケーションの実行を確保できる。例えば、図９〜図１０に示す実施例では、まず、プロセッサユニットＵ１が故障したことによって、アプリケーションＢがプロセッサユニットＵ３に割り当てられる。このとき、プロセッサユニットＵ３の優先順位は、プロセッサユニットＵ２よりも高くなる。こ
のため、プロセッサユニットＵ１の故障に続いてプロセッサユニットＵ０が故障したときに、アプリケーションＡは、プロセッサユニットＵ３ではなく、プロセッサユニットＵ２に割り当てられる。すなわち、優先順位の高いアプリケーションＡ、Ｂ、Ｃ、Ｄは、可能な限り異なるプロセッサユニットに分散されることになる。したがって、優先順位の高いアプリケーションの実行を継続しやすくなる。
【００５７】
これに対して、各プロセッサユニットの優先順位が固定的に決められていたとすると、故障したプロセッサコアで動作していたアプリケーションを最も優先順位の低いプロセッサユニットに割り当てる場合、代替実行プロセッサユニットとして常に同じプロセッサユニット（すなわち、最低優先順位のプロセッサユニット）が選択されることになる。したがって、複数の故障が発生すると、優先順位の高いアプリケーションの実行を継続できなくなる可能性が高くなる。
【００５８】
図１１は、故障検出時の復旧手順を示すフローチャートである。このフローチャートの処理は、動作状態管理モジュール２２により実行される。ただし、アプリケーションの代替実行は、例えば、リアルタイムＯＳが動作状態管理モジュール２２からの指示に従って行うようにしてもよい。
【００５９】
各プロセッサユニット上で動作する動作状態管理モジュール２２は、常時、プロセッサコアの状態をモニタする。ここで、動作状態管理モジュール２２は、当該プロセッサユニット内のプロセッサコアの状態をモニタすると共に、他のプロセッサユニット内のプロセッサコアの状態もモニタできるものとする。そして、ステップＳ１においてあるプロセッサコア（以下、故障プロセッサコア）の故障が検出されると、復旧手順が実行される。
【００６０】
ステップＳ２では、故障プロセッサコア上で動作していたアプリケーション（以下、故障アプリケーション）の優先順位と、その故障プロセッサコアを搭載するプロセッサユニット上で動作する他のアプリケーションの優先順位とを比較する。そして、故障アプリケーションよりも優先順位の低いアプリケーションが当該プロセッサユニット上で動作中であれば、ステップＳ１１へ進む。ステップＳ１１では、故障アプリケーションよりも優先順位の低いアプリケーション（例えば、当該プロセッサユニット上で最も優先順位の低いアプリケーション）を停止し、その停止したアプリケーションを実行していたプロセッサコアに、故障アプリケーションを代替実行させる。なお、ステップＳ１１の処理は、例えば、図８に示す実施例に対応する。
【００６１】
故障アプリケーションよりも優先順位の低いアプリケーションが当該プロセッサユニット上で動作していないときは、ステップＳ３へ進む。ここで、故障アプリケーションよりも優先順位の低いアプリケーションが当該プロセッサユニット上で動作していない状態としては、以下の２つの動作状態が考えられる。
第１の動作状態：当該プロセッサユニットにおいて、故障プロセッサコア以外のプロセッサコア上で故障アプリケーション以外のアプリケーションが動作しており、且つ、故障アプリケーションの優先順位が当該プロセッサユニット内で最も低い
第２の動作状態：当該プロセッサユニット上で故障プロセッサコア以外のプロセッサコアが動作していない（すなわち、故障アプリケーションの優先順位が当該プロセッサユニット内で最も高い）
当該プロセッサユニットの動作状態が第１の状態であれば、ステップＳ１２に進む。ステップＳ１２では、故障プロセッサコアがマルチプロセッサシステムから切り離される。
【００６２】
当該プロセッサユニットの動作状態が第２の状態であれば、ステップＳ４に進む。ステップＳ４では、故障アプリケーションを他のプロセッサユニットに代替実行させるか否かを判断する。この判断は、プロセッサユニットの優先順位に従って行われる。すなわち、
故障プロセッサコアを搭載するプロセッサユニット（以下、故障プロセッサユニット）の優先順位が動作中の全プロセッサユニットの中で最も低い場合には、ステップＳ１３へ進む。ステップＳ１３では、故障プロセッサユニットがマルチプロセッサシステムから切り離される。
【００６３】
一方、故障プロセッサユニットよりも優先順位の低いプロセッサユニットが存在する場合には、ステップＳ５へ進む。ステップＳ５では、最も優先順位の低いプロセッサユニット上で最も優先順位の低いアプリケーションを実行しているプロセッサコアを選択する。そして、故障アプリケーションをその選択したプロセッサコアに代替実行させる。なお、代替実行するプロセッサコアは、必ずしも、最も優先順位の低いアプリケーションを実行しているプロセッサに限定されるものではない。そして、ステップＳ６において、状態管理テーブル２３を更新する。このとき、プロセッサユニットの優先順位も更新される。
【００６４】
図１２および図１３は、システム構成例を示す図である。図１２に示す構成では、代替実行処理に係わるテーブル（アプリケーション管理テーブル２１および状態管理テーブル２３）は、各プロセッサユニットＵ０〜Ｕ３が備える各メモリＭ０〜Ｍ３にそれぞれ設けられる。この場合、各メモリＭ０〜Ｍ３に設けられるテーブルの内容は、互いに同じである必要がある。よって、例えば、代替実行処理等によってアプリケーションを実行すべきプロセッサコアが変更されると、各メモリＭ０〜Ｍ３に設けられるテーブルの内容が同期して更新される。図１３に示す構成では、上記テーブルは、共有メモリ３に設けられる。この場合、各プロセッサコアは、必要に応じて共有メモリ３にアクセスして対応する情報を取得することになる。
【００６５】
（付記１）
互いに接続された複数のプロセッサユニットがそれぞれ１または複数のプロセッサコアを備えるマルチプロセッサシステムであって、
前記複数のプロセッサユニットの優先順位は、各プロセッサユニットにおいて実行されているアプリケーションの中の代表アプリケーションの優先順位に基づいて決定される
ことを特徴とするマルチプロセッサシステム。
（付記２）
付記１に記載のマルチプロセッサシステムであって、
各プロセッサユニットの代表アプリケーションは、そのプロセッサユニットが備えるプロセッサコアにより実行されているアプリケーションの中で最も優先順位の高いアプリケーションである
ことを特徴とするマルチプロセッサシステム。
（付記３）
互いに接続された複数のプロセッサユニットがそれぞれ１または複数のプロセッサコアを備えるマルチプロセッサシステムであって、
アプリケーションの優先順位を管理する第１の管理手段と、
各プロセッサユニット上で実行されているアプリケーションの優先順位に基づいて各プロセッサユニットの優先順位を管理する第２の管理手段と、
第１のプロセッサユニットにおいて、故障が検出されたプロセッサコアにより実行されていたアプリケーションである代替対象アプリケーションの優先順位がそのユニット内で最も高かった場合であって、そのユニット内に代替実行可能なプロセッサコアが存在しない場合には、前記第１のプロセッサユニットよりも優先順位の低い第２のプロセッサユニット内のプロセッサコアに前記代替対象アプリケーションを割り当てる制御手段、
を有するマルチプロセッサシステム。
（付記４）
付記３に記載のマルチプロセッサシステムであって、
前記第２のプロセッサユニットは、前記複数のプロセッサユニットの中で最も優先順位の低いプロセッサユニットである
ことを特徴とするマルチプロセッサシステム。
（付記５）
付記３に記載のマルチプロセッサシステムであって、
前記制御手段は、前記第２のプロセッサユニットにおいて最も優先順位の低いアプリケーションを実行しているプロセッサコアに前記代替対象アプリケーションを割り当てる
ことを特徴とするマルチプロセッサシステム。
（付記６）
付記３に記載のマルチプロセッサシステムであって、
前記制御手段は、前記第１のプロセッサユニット内に代替実行可能なプロセッサコアが存在する場合には、そのユニットにおいて最も優先順位の低いアプリケーションを実行しているプロセッサコアに前記代替対象アプリケーションを割り当てる
ことを特徴とするマルチプロセッサシステム。
（付記７）
付記３に記載のマルチプロセッサシステムであって、
前記複数のプロセッサユニットは、それぞれ、メモリ手段を備え、
前記第１および第２の管理手段により管理される情報は、各プロセッサユニットが備える前記メモリ手段にそれぞれ格納される
ことを特徴とするマルチプロセッサシステム。
（付記８）
付記３に記載のマルチプロセッサシステムであって、
前記複数のプロセッサユニットからアクセス可能な共有メモリ手段をさらに備え、
前記第１および第２の管理手段により管理される情報は、前記共有メモリ手段に格納される
ことを特徴とするマルチプロセッサシステム。
（付記９）
付記３に記載のマルチプロセッサシステムであって、
前記制御手段は、前記第１のプロセッサユニットが故障したときに、前記代替対象アプリケーションを前記第２のプロセッサユニット内のプロセッサコアに割り当てる
ことを特徴とするマルチプロセッサシステム。
（付記１０）
付記９に記載のマルチプロセッサシステムであって、
前記制御手段は、前記複数のプロセッサユニット間を接続するネットワークと前記第１のプロセッサユニットとの接続に障害が発生したときに、前記代替対象アプリケーションを前記第２のプロセッサユニット内のプロセッサコアに割り当てる
ことを特徴とするマルチプロセッサシステム。
（付記１１）
付記９に記載のマルチプロセッサシステムであって、
前記制御手段は、前記第１のプロセッサユニットにおいてそのユニット内の各プロセッサコアが共用するメモリ手段が故障したときに、前記代替対象アプリケーションを前記第
２のプロセッサユニット内のプロセッサコアに割り当てる
ことを特徴とするマルチプロセッサシステム。
（付記１２）
付記９に記載のマルチプロセッサシステムであって、
前記制御手段は、前記第１のプロセッサユニットにおいてそのユニット内の各プロセッサコア間を接続するパスが故障したときに、前記代替対象アプリケーションを前記第２のプロセッサユニット内のプロセッサコアに割り当てる
ことを特徴とするマルチプロセッサシステム。
【図面の簡単な説明】
【００６６】
【図１】本発明の実施形態のマルチプロセッサシステムの基本構成を示す図である。
【図２】プロセッサユニットのハードウェア構成を示す図である。
【図３】アプリケーションの割当ての実施例である。
【図４】アプリケーション管理テーブルの実施例である。
【図５】アプリケーションの割当て状態の一例を示す図である。
【図６】プロセッサユニットのソフトウェア構成を示す図である。
【図７】状態管理テーブルの実施例である。
【図８】復旧手順（ユニット内での代替）を説明する図である。
【図９】復旧手順（ユニット間での代替１）を説明する図である。
【図１０】復旧手順（ユニット間での代替２）を説明する図である。
【図１１】故障検出時の復旧手順を示すフローチャートである。
【図１２】システム構成例（分散型）を示す図である。
【図１３】システム構成例（共有型）を示す図である。
【符号の説明】
【００６７】
１      マルチプロセッサシステム
２      ユニット間接続ネットワーク
３      共有メモリ
１１    メモリバス
１２    コア間通信パス
１３    Ｉ／Ｏバス
２１    アプリケーション管理テーブル
２２    動作状態管理モジュール
２３    状態管理テーブル
【図１】
2009069963.tif 000003
【図２】
2009069963.tif 000004
【図３】
2009069963.tif 000005
【図４】
2009069963.tif 000006
【図５】
2009069963.tif 000007
【図６】
2009069963.tif 000008
【図７】
2009069963.tif 000009
【図８】
2009069963.tif 000010
【図９】
2009069963.tif 000011
【図１０】
2009069963.tif 000012
【図１１】
2009069963.tif 000013
【図１２】
2009069963.tif 000014
【図１３】
2009069963.tif 000015