(57)【特許請求の範囲】
【請求項１】
共有メモリにアクセスするマルチコアプロセッサを有するマルチコアプロセッサシステムであって、
前記マルチコアプロセッサは、
前記マルチコアプロセッサのうちマスタプロセスを実行する第１のプロセッサが前記共有メモリ内の前記マスタプロセスに関するコンテキストにアクセスしたことを検出し、
前記コンテキストへのアクセスが検出される都度、前記コンテキストのうちアクセス先を含む区画での検出前後のデータを組み合わせた差分データを保存し、
前記第１のプロセッサがストールした場合、前記マルチコアプロセッサのうち前記第１のプロセッサ以外の他のプロセッサ群の中から選ばれた第２のプロセッサにより、前記ストール前の前記区画ごとの前記差分データの組み合わせに基づいて、前記ストール前のコンテキストを復元し、
前記第１のプロセッサがストールした場合、前記第２のプロセッサが実行する前記マスタプロセスを、前記第２のプロセッサにより生成し、
復元された前記ストール前のコンテキストと生成されたマスタプロセスとを、前記第２のプロセッサにより関連付ける、
ことを特徴とするマルチコアプロセッサシステム。
【請求項２】
前記マルチコアプロセッサは、
前記マルチコアプロセッサ内の各キャッシュのコヒーレント処理を実行するキャッシュコヒーレンシー機構での前記共有メモリへのメモリアクセスの検出結果に基づいて、前記マスタプロセスに関するコンテキストにアクセスしたことを検出することを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
前記マルチコアプロセッサは、
前記差分データを圧縮し、
圧縮された圧縮差分データのハッシュ値を算出し、
算出された、前記コンテキストへのアクセス前後における同一箇所での前記圧縮差分データのハッシュ値どうしが、一致するか否かを判定し、
不一致と判定された場合、不一致と判定された前記圧縮差分データの組み合わせを保存し、
前記圧縮差分データを伸張し、
前記ストール前の前記圧縮差分データから伸張された差分データに基づいて、前記ストール前のコンテキストを復元することを特徴とする請求項１または２に記載のマルチコアプロセッサシステム。
【請求項４】
前記マルチコアプロセッサは、
前記他のプロセッサ群の各々の負荷に基づいて、前記他のプロセッサ群の中から前記第２のプロセッサを決定し、
前記第１のプロセッサがストールした場合、決定された第２のプロセッサにより、前記ストール前の前記差分データに基づいて、前記ストール前のコンテキストを復元することを特徴とする請求項１または２に記載のマルチコアプロセッサシステム。
【請求項５】
前記マルチコアプロセッサは、
前記第１のプロセッサのストール後に、前記第２のプロセッサにより、前記第１のプロセッサをリブートすることを特徴とする請求項１または２に記載のマルチコアプロセッサシステム。
【請求項６】
共有メモリにアクセスするマルチコアプロセッサを有するマルチコアプロセッサシステムの復元プログラムであって、
前記マルチコアプロセッサに、
前記マルチコアプロセッサのうちマスタプロセスを実行する第１のプロセッサが前記共有メモリ内の前記マスタプロセスに関するコンテキストにアクセスしたことを検出し、
前記コンテキストへのアクセスが検出される都度、前記コンテキストのうちアクセス先を含む区画での検出前後のデータを組み合わせた差分データを保存し、
前記第１のプロセッサがストールした場合、前記マルチコアプロセッサのうち前記第１のプロセッサ以外の他のプロセッサ群の中から選ばれた第２のプロセッサにより、前記ストール前の前記区画ごとの前記差分データの組み合わせに基づいて、前記ストール前のコンテキストを復元し、
前記第１のプロセッサがストールした場合、前記第２のプロセッサが実行する前記マスタプロセスを、前記第２のプロセッサにより生成し、
復元された前記ストール前のコンテキストと生成されたマスタプロセスとを、前記第２のプロセッサにより関連付ける、
処理を実行させることを特徴とする復元プログラム。
【請求項７】
共有メモリにアクセスするマルチコアプロセッサを有するマルチコアプロセッサシステムの復元方法であって、
前記マルチコアプロセッサが、
前記マルチコアプロセッサのうちマスタプロセスを実行する第１のプロセッサが前記共有メモリ内の前記マスタプロセスに関するコンテキストにアクセスしたことを検出し、
前記コンテキストへのアクセスが検出される都度、前記コンテキストのうちアクセス先を含む区画での検出前後のデータを組み合わせた差分データを保存し、
前記第１のプロセッサがストールした場合、前記マルチコアプロセッサのうち前記第１のプロセッサ以外の他のプロセッサ群の中から選ばれた第２のプロセッサにより、前記ストール前の前記区画ごとの前記差分データの組み合わせに基づいて、前記ストール前のコンテキストを復元し、
前記第１のプロセッサがストールした場合、前記第２のプロセッサが実行する前記マスタプロセスを、前記第２のプロセッサにより生成し、
復元された前記ストール前のコンテキストと生成されたマスタプロセスとを、前記第２のプロセッサにより関連付ける、
処理を実行することを特徴とする復元方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサ（マルチコアプロセッサ）にプログラムを実行させるマルチコアプロセッサシステム、復元プログラム、および復元方法に関する。
【背景技術】
【０００２】
従来、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）の初期起動時にＯＳの初期化データを主記憶の書込禁止領域に退避し、障害検出での再起動時にはＯＳを特定番地から再起動し退避済初期化データを使用して主記憶を復元する技術が開示されている。また、ＯＳの初期起動後、主記憶の内容を主記憶の保存領域に退避し、再起動時に保存領域の内容を主記憶に復元する技術も開示されている（たとえば、下記特許文献１，２を参照。）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１１−２４９３６号公報
【特許文献２】特開２００２−２５８９７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述した従来技術のソフトウェア制御で、マルチコアプロセッサシステムを適用した携帯電話等の組み込みシステムで運用しようとすると、運用中にメモリイメージを時々刻々と保護することとなり、オーバーヘッドの要因になるという問題がある。また、メモリ上に運用状態の多重保存をおこなうと、必要メモリ量の増大化を招いてしまい、大型化により携帯性を損ねてしまうという問題がある。【０００５】
本発明は、上述した従来技術による問題点を解消するため、運用中のウォームスタートを効率的に実現することができるマルチコアプロセッサシステム、復元プログラム、および復元方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上述した課題を解決し、目的を達成するため、共有メモリにアクセスするマルチコアプロセッサのうちマスタプロセスを実行する第１のプロセッサが前記共有メモリ内の前記マスタプロセスに関するコンテキストにアクセスしたことを検出し、前記コンテキストへのアクセスが検出される都度、前記コンテキストのうちアクセス先を含む区画での検出前後の差分データの組み合わせを保存し、前記第１のプロセッサがストールした場合、前記マルチコアプロセッサのうち前記第１のプロセッサ以外の他のプロセッサ群の中から選ばれた第２のプロセッサにより、前記ストール前の前記区画ごとの前記差分データの組み合わせに基づいて、前記ストール前のコンテキストを復元し、前記第１のプロセッサがストールした場合、前記第２のプロセッサが実行する前記マスタプロセスを、前記第２のプロセッサにより生成し、復元された前記ストール前のコンテキストと生成されたマスタプロセスとを、前記第２のプロセッサにより関連付けるマルチコアプロセッサシステム、復元プログラム、および復元方法を、一例として提供する。
【発明の効果】
【０００７】
上記マルチコアプロセッサシステム、復元プログラム、および復元方法によれば、運用中のウォームスタートを効率的に実現することができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】マルチコアプロセッサシステムのシステム構成例を示すブロック図である。
【図２】保護領域内の圧縮情報の更新例を示す説明図である。
【図３】圧縮情報の更新処理手順を示すフローチャートである。
【図４】復元処理手順を示すフローチャートである。
【図５】復元後のシステム状態を示すブロック図である。
【発明を実施するための形態】
【０００９】
以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、復元プログラム、および復元方法の実施の形態を詳細に説明する。
【００１０】
以下に示す実施の形態では、組み込み型端末、特に多くの携帯端末に標準的に実装されている暗号エンジンや、マルチコアプロセッサに実装されているスヌープコントローラを用いることで、ＯＳのマスタ機能を保護し、障害発生時にコールドスタートすることなくシステムを継続運用する。
【００１１】
（システム構成の一例）
図１は、マルチコアプロセッサシステムのシステム構成例を示すブロック図である。図１において、マルチコアプロセッサシステム１００は、マルチコアプロセッサ１０１と、スヌープコントローラ１０２と、ウォッチドッグタイマ１０３と、暗号エンジン１０４と、共有メモリ１０５とが、バス１０６を介して通信可能に接続されている。
【００１２】
マルチコアプロセッサ１０１は、複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）（図では、例として４個）により構成されている。各ＣＰＵ＃０〜ＣＰＵ＃３にはキャッシュメモリ（以下、単に、「キャッシュ」）Ｃが設けられている。また、各ＣＰＵ＃０〜ＣＰＵ＃３は、特権モードプログラムＨを実行する。特権モードプログラムＨとは、たとえば、ハイパーバイザであり、特権により各々のＣＰＵ＃０〜ＣＰＵ＃３に直接アクセスすることができるプログラムである。
【００１３】
また、各ＣＰＵ＃０〜ＣＰＵ＃３は、カーネルＫ、マスタプロセスＭＰ、およびスレーブプロセスＳＰを実行する。カーネルＫは、ＯＳの中核となるプログラムであり、メモリ管理やファイル管理、マルチコアプロセッサ１０１の管理を実行する。また、カーネルＫは、マスタプロセスＭＰを生成する。
【００１４】
マスタプロセスＭＰは、スレーブプロセスＳＰを管理するプログラムである。マスタプロセスＭＰは、マルチコアプロセッサ１０１のうち１つのＣＰＵ（図１では、例としてＣＰＵ＃０）でのみ生成されて実行される。マスタプロセスＭＰを実行するＣＰＵをマスタＣＰＵと称す。初期起動時では、マスタＣＰＵは、ＣＰＵ＃０とするが、本実施の形態によりマイグレーションをおこなったり、その他既存の負荷分散をおこなうことで、他のＣＰＵ＃１〜ＣＰＵ＃３に移行することがある。また、マルチコアプロセッサ１０１のうちマスタＣＰＵ以外の残余のＣＰＵをスレーブＣＰＵと称す。
【００１５】
スレーブプロセスＳＰは、マルチコアプロセッサ１０１で実行されるプログラムである。スレーブプロセスＳＰとしては、具体的には、たとえば、スレッド生成（スケジューリング）、割込み処理、システムリソースアクセス（ドライバ）といったシステムプロセスが挙げられる。上述したように、これらのスレーブプロセスＳＰの情報管理は、マスタプロセスＭＰが握っており、マスタプロセスＭＰはこれらの資源管理を共有メモリ１０５上のシステム管理領域に書き込まれたマスタコンテキストを用いて監視する。
【００１６】
また、スレーブプロセスＳＰは、自身の状態の変化をマスタプロセスＭＰに通知する。マスタプロセスＭＰに応答がない場合、資源障害が発生したとして、タイムアウトが発生する。このあと、従来では、ウォッチドッグタイマ１０３を通じて、マルチコアプロセッサシステム１００をハングさせるか、リセット操作をおこなうことになるが、本実施の形態では、マスタプロセスＭＰを復元する。
【００１７】
なお、マスタプロセスＭＰが動作しているカーネルＫおよびプロセス（少なくともマスタプロセスＭＰを含む）をマスタＯＳと称す。また、カーネルＫおよびスレーブプロセスＳＰをスレーブＯＳと称す。なお、ＯＳにはアプリケーションソフトウェア（以下、単に、「アプリ」）ＡＰに共通なライブラリも含まれているが説明の簡略化のため、ここでは省略する。また、マスタＯＳおよびスレーブＯＳ上では、各種アプリＡＰが動作する。
【００１８】
スヌープコントローラ１０２は、マルチコアプロセッサ１０１に接続されており、各ＣＰＵ＃０〜ＣＰＵ＃３のキャッシュＣを監視する。あるキャッシュＣ内の値が更新されると、スヌープコントローラ１０２は、他のキャッシュＣに対してコヒーレント処理をおこなう。具体的には、スヌープコントローラ１０２は、キャッシュＣを通過するメモリアクセスをすべて検出する。したがって、その検出されたメモリアクセスがキャッシュＣ内のコヒーレント対応領域に対するメモリアクセスである場合には、スヌープコントローラ１０２は、上述したコヒーレント処理を実行する。
【００１９】
ウォッチドッグタイマ１０３は、周期的にマルチコアプロセッサ１０１の生存状態を確認し、不正なセグメントアクセスに対するプログラムカウンタの停止や暴走状態から復帰するために、応答のないＣＰＵ＃０〜ＣＰＵ＃３に対してリセットシグナルを発行する。
【００２０】
暗号エンジン１０４は、対象データの暗号化処理や暗号化データの復号処理を実行するハードウェアである。暗号エンジン１０４は、携帯型端末に標準装備されているハードウェアである。暗号エンジン１０４は、通常個人データの秘匿のため共有メモリ１０５が接続されたバス１０６上に設置され、暗号化・復号化をおこなうユニットである。
【００２１】
暗号化にはＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）やＤＥＳ（Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）などが用いられるが、通常ハフマン符号化などによるデータ可逆圧縮機能が搭載されている。
【００２２】
なお、本実施の形態では、暗号エンジン１０４での暗号化および復号化の処理を省略して説明するが、圧縮データは暗号化され、暗号化データは圧縮データに復号されて、そののちに伸張されるものとする。また、圧縮と伸張のみで暗号化処理と復号処理を実行しなくてもよい。
【００２３】
運用中、スヌープコントローラ１０２によるメモリ書き換えの検出、あるいは特権モードプログラムＨがプロセスの変化（マスタプロセスＭＰによるシステム管理領域の更新）を検出した場合に、更新されたデータを、暗号エンジン１０４の可逆圧縮機能を用いて圧縮して、圧縮データとして共有メモリ１０５内の保護領域にデータバックアップする。
【００２４】
また、暗号エンジン１０４は、圧縮データのハッシュ値を算出する。これにより、データが更新されて圧縮データおよびそのハッシュ値が得られた場合、保存済みのハッシュ値と一致すれば、更新前後で圧縮データが同じであることがわかる。一方、ハッシュ値が不一致となった場合は、更新前後で圧縮データが異なることとなる。
【００２５】
更新前後で圧縮データが異なる場合は、暗号エンジン１０４は、更新前の旧圧縮データおよびそのハッシュ値と、更新後の新圧縮データおよびそのハッシュ値とを共有メモリ１０５内の保護領域に保存する。更新前後で圧縮データが同一である場合は、更新後の新圧縮データおよびそのハッシュ値を保存しない。これにより、常に最新の２つの圧縮データおよびそのハッシュ値が保存されていることとなる。なお、暗号エンジン１０４は、ハードウェアであるため性能の影響がない。
【００２６】
共有メモリ１０５は、マルチコアプロセッサ１０１が共有する記憶領域であり、システム管理領域１５１と保護領域１５２と一般領域１５３とを有する。システム管理領域１５１は、マスタＯＳ、スレーブＯＳ、および特権モードプログラムＨが読み書きできる領域である。システム管理領域１５１には、マスタプロセスＭＰに関するマスタコンテキストＭＣが保存される。
【００２７】
マスタコンテキストＭＣとは、マスタプロセスＭＰが管理するスタックポインタやレジスタの値、プログラムカウンタの値、生成したスレーブプロセスＳＰの種類、スレーブプロセスＳＰの生成先ＣＰＵ番号といったマスタプロセスＭＰが得る固有な情報である。また、マスタコンテキストＭＣは、複数の区画に分割されている。具体的には、たとえば、キャッシュライン、ページ、バンクといった単位領域ごとに区分されて保存される。
【００２８】
保護領域１５２は、特権モードプログラムＨにより圧縮された圧縮データとそのハッシュ値を保存する領域である。本実施の形態では、ダブルバッファ方式を採用する。ダブルバッファ方式とは、同一箇所のデータに対する圧縮データおよびそのハッシュ値を時系列で２個保存する方式である。
【００２９】
マスタコンテキストＭＣは、単位領域ごとに区分されているため、マスタコンテキストＭＣ内のある単位領域のデータが更新されると、圧縮情報１６０として、その更新前の圧縮データ（旧圧縮データ）およびそのハッシュ値（旧ハッシュ値）と、更新後の圧縮データ（新圧縮データ）およびそのハッシュ値（新ハッシュ値）を保存する。
【００３０】
一般領域１５３は、マスタＯＳ、スレーブＯＳ、アプリＡＰがデータ保存する領域である。具体的には、マスタＯＳおよびスレーブＯＳは、システム管理領域１５１に保存すべきデータ以外のデータを一般領域１５３に保存する。アプリＡＰはその演算結果などを一般領域１５３に保存する。
【００３１】
（保護領域１５２の更新例）
図２は、保護領域１５２内の圧縮情報１６０の更新例を示す説明図である。図２では、例としてマスタコンテキストＭＣが８分割されて区画データＭＣ１〜ＭＣ８としてシステム管理領域１５１に保存されるものとする。
【００３２】
（Ａ）は、システム起動時の状態を示している。システム起動時では、マスタコンテキストＭＣの全保存領域にアクセスするため、全保存領域で差分が生じる。したがって、区画データＭＣ１〜ＭＣ８がマスタコンテキストＭＣとして保存される。そして、特権モードプログラムＨからの指示により、区画データＭＣ１〜ＭＣ８ごとに、暗号エンジン１０４が圧縮して圧縮データｍｃ１〜ｍｃ８を生成する。また、暗号エンジン１０４は、圧縮データｍｃ１〜ｍｃ８のハッシュ値ｈ１〜ｈ８を生成する。暗号エンジン１０４は、生成された圧縮データｍｃ１〜ｍｃ８とそのハッシュ値ｈ１〜ｈ８を保護領域１５２に保存する。
【００３３】
（Ｂ）において、（Ａ）の状態からマスタコンテキストＭＣのうち区画データＭＣ１が更新されて区画データＭＣ１１になったとする。すなわち、メモリアクセス先が区画データＭＣ１内のアドレスであったとする。この場合、暗号エンジン１０４は、特権モードプログラムＨからの指示により、区画データＭＣ１１を圧縮して圧縮データｍｃ１１を生成する。また、暗号エンジン１０４は、圧縮データｍｃ１１のハッシュ値ｈ１１を生成する。
【００３４】
そして、ハッシュ値ｈ１とハッシュ値ｈ１１とを比較する。ｈ１＝ｈ１１の場合は、圧縮データｍｃ１１およびそのハッシュ値ｈ１１は保存されない。一方、ｈ１≠ｈ１１の場合は、区画データＭＣ１と区画データＭＣ１１とは差分があることとなり、圧縮データｍｃ１１およびそのハッシュ値ｈ１１は保存される。（Ｂ）では、ｈ１≠ｈ１１として、圧縮データｍｃ１１およびそのハッシュ値ｈ１１が保存されるものとする。また、今回更新されていない区画データＭＣ２〜ＭＣ８については、暗号エンジン１０４は圧縮もハッシュ値算出もしない。
【００３５】
（Ｃ）において、（Ｂ）の状態からマスタコンテキストＭＣのうち区画データＭＣ１１が更新されて区画データＭＣ１２になったとする。すなわち、メモリアクセス先が区画データＭＣ１２内のアドレスであったとする。この場合、暗号エンジン１０４は、特権モードプログラムＨからの指示により、区画データＭＣ１２を圧縮して圧縮データｍｃ１２を生成する。また、暗号エンジン１０４は、圧縮データｍｃ１２のハッシュ値ｈ１２を生成する。
【００３６】
そして、ハッシュ値ｈ１１とハッシュ値ｈ１２とを比較する。ｈ１１＝ｈ１２の場合は、圧縮データｍｃ１２およびそのハッシュ値ｈ１２は保存されない。一方、ｈ１１≠ｈ１２の場合は、区画データＭＣ１１と区画データＭＣ１２とは差分があることとなり、圧縮データｍｃ１２およびそのハッシュ値ｈ１２は保存される。（Ｃ）では、ｈ１１≠ｈ１２として、圧縮データｍｃ１２およびそのハッシュ値ｈ１２が保存されるものとする。また、今回更新されていない区画データＭＣ２〜ＭＣ８については、暗号エンジン１０４は圧縮もハッシュ値算出もしない。
【００３７】
（Ｄ）において、（Ｃ）の状態からマスタコンテキストＭＣのうち区画データＭＣ５が障害により更新されて区画データＭＣ５１になったとする。すなわち、メモリアクセス先が区画データＭＣ５１内のアドレスであったとする。この場合、暗号エンジン１０４は、特権モードプログラムＨからの指示により、区画データＭＣ５１を圧縮して圧縮データｍｃ５１を生成する。また、暗号エンジン１０４は、圧縮データｍｃ５１のハッシュ値ｈ５１を生成する。
【００３８】
そして、ハッシュ値ｈ５とハッシュ値ｈ５１とを比較する。障害により区画データＭＣ５は区画データＭＣ５１に更新されている。したがって、ｈ５≠ｈ５１となり、区画データＭＣ５と区画データＭＣ５１とは差分があり、圧縮データｍｃ５１およびそのハッシュ値ｈ５１は保存される。この場合、マスタＣＰＵがストールしているため、スレーブＣＰＵの特権モードプログラムＨからの指示により、暗号エンジン１０４は、障害箇所である区画データＭＣ５１に対する保護領域１５２に保存されている圧縮データｍｃ５，ｍｃ５１のうち、障害による更新前の圧縮データｍｃ５を伸張して、区画データＭＣ５を生成する。
【００３９】
そして、（Ｅ）において、障害発生時のマスタコンテキストＭＣ、具体的には、（Ｄ）のマスタコンテキストＭＣである区画データＭＣ１２，ＭＣ２〜ＭＣ４，ＭＣ５１，ＭＣ６〜ＭＣ８のうち、障害となる区画データＭＣ５１を伸張した区画データＭＣ５に置き換えて、マスタコンテキストＭＣ（区画データＭＣ１２，ＭＣ２〜ＭＣ８）を復元する。この復元後のマスタコンテキストＭＣは、（Ｄ）での障害発生前の状態、すなわち、（Ｃ）の状態となる。また、（Ｄ）における更新後の圧縮データｍｃ５１とそのハッシュ値ｈ５１も保護領域１５２から削除されて、（Ｃ）と同一の状態に復元される。
【００４０】
（圧縮データおよびハッシュ値の更新処理）
図３は、圧縮情報１６０の更新処理手順を示すフローチャートである。まず、スヌープコントローラ１０２は、カーネルＫ、マスタプロセスＭＰ、スレーブプロセスＳＰからのキャッシュＣを通過するメモリアクセスを検出する（ステップＳ３０１）。なお、メモリアクセスは、カーネルＫ、マスタプロセスＭＰ、スレーブプロセスＳＰを介してアプリＡＰからも行われる。
【００４１】
つぎに、スヌープコントローラ１０２は、メモリアクセスを検出すると、そのメモリアクセスがキャッシュＣ内のコヒーレント対応領域であるか否かを判断する（ステップＳ３０２）。コヒーレント対応領域でない場合（ステップＳ３０２：Ｎｏ）、ステップＳ３０１に戻る。一方、コヒーレント対応領域である場合（ステップＳ３０２：Ｙｅｓ）、スヌープコントローラ１０２は、キャッシュコヒーレントをおこない（ステップＳ３０３）、ステップＳ３０１に戻る。
【００４２】
特権モードプログラムＨは、スヌープコントローラ１０２によるメモリアクセスを監視している。そして、ステップＳ３０１において、スヌープコントローラ１０２が対象データのメモリアクセスを検出した場合、特権モードプログラムＨは、共有メモリ１０５内のシステム管理領域１５１へのメモリアクセスを待ち受ける（ステップＳ３０４：Ｎｏ）。対象データのメモリアクセスがシステム管理領域１５１へのメモリアクセスである場合（ステップＳ３０４：Ｙｅｓ）、特権モードプログラムＨは、対象データのキャッシュフラッシュをおこなう（ステップＳ３０５）。
【００４３】
この場合、キャッシュＣに書き込まれた対象データは、ライトスルーにより、共有メモリ１０５にも書き込まれる。たとえば、マスタプロセスＭＰによるシステム管理領域１５１内のマスタコンテキストＭＣが更新される場合には、キャッシュＣの非コヒーレント対応領域に対象データが書き込まれるとともに、マスタコンテキストＭＣにも書き込まれる。そして、キャッシュＣの非コヒーレント対応領域はキャッシュフラッシュされる。このあと、特権モードプログラムＨは、暗号エンジン１０４を起動して、対象データの圧縮指示をおこなう（ステップＳ３０６）。
【００４４】
また、マスタプロセスＭＰによるシステム管理領域１５１内へのアクセスではなく、他のプログラム、たとえば、アプリＡＰからのアクセスであっても、同様な処理となる。すなわち、特権モードプログラムＨは、メモリアクセス元が、どんなプログラムであるかを問わず、ステップＳ３０４〜Ｓ３０６の処理を実行することとなる。
【００４５】
暗号エンジン１０４は、特権モードプログラムＨから圧縮指示を受けると、アクセス先に書き込まれた対象データを圧縮する（ステップＳ３０７）。たとえば、図２に示したように、マスタコンテキストＭＣの区画データＭＣ１が対象データである場合、区画データＭＣ１が区画データＭＣ１１に更新されるため、暗号エンジン１０４は、区画データＭＣ１１を圧縮して圧縮データｍｃ１１とする。
【００４６】
つぎに、暗号エンジン１０４は、圧縮データのハッシュ値を算出する（ステップＳ３０８）。そして、暗号エンジン１０４は、アクセス先となった区画データについて前回圧縮された圧縮データと今回圧縮された圧縮データとに差分があるか否かを判断する（ステップＳ３０９）。具体的には、旧圧縮データのハッシュ値と新圧縮データのハッシュ値が同一であるか否かを判断する。同一であれば差分がないこととなる。
【００４７】
一方、同一でない場合、差分があることとなる。差分がない場合（ステップＳ３０９：Ｎｏ）、暗号エンジン１０４の処理を終了する。一方、差分がある場合（ステップＳ３０９：Ｙｅｓ）、暗号エンジン１０４は、図２に示したように、新圧縮データとそのハッシュ値とを保護領域１５２に格納する（ステップＳ３１０）。
【００４８】
このように、図３に示したフローチャートでは、システム管理領域１５１へのメモリアクセスが正常な更新処理であるかシステム管理領域１５１を障害するメモリアクセスであるかを問わず、システム管理領域１５１内のデータが更新されると、アクセス先における最新の圧縮データおよびそのハッシュ値と、１つ前の旧圧縮データおよびそのハッシュ値が保存されることとなる。
【００４９】
（復元処理）
図４は、復元処理手順を示すフローチャートである。まず、ウォッチドッグタイマ１０３がマスタＣＰＵを監視する（ステップＳ４０１：Ｎｏ）。ウォッチドッグタイマ１０３は、マスタＣＰＵのストールやハングにより異常を検出した場合（ステップＳ４０１：Ｙｅｓ）、特権モードプログラムＨは、マスタＣＰＵの異常検出の通知を受けて、スレーブＣＰＵにスレーブＯＳの一時停止指示を通知する（ステップＳ４０２）。一時停止指示を受けたスレーブＣＰＵは、そのスレーブＯＳを一時停止させる。
【００５０】
このあと、マスタＣＰＵはストールしているため（以下、ストールしたマスタＣＰＵを「ストールＣＰＵ」と称す。）、特権モードプログラムＨは、スレーブＯＳの一時停止指示を受けたスレーブＣＰＵの中から、ストールＣＰＵを復元させる復元元ＣＰＵを選択する（ステップＳ４０３）。具体的には、たとえば、スレーブＣＰＵのうち、ＣＰＵ番号が若いＣＰＵを復元元ＣＰＵに選択する。図１の例では、ＣＰＵ＃０がストールＣＰＵになるため、ＣＰＵ＃１が復元元ＣＰＵとなる。また、スレーブＣＰＵのうち最も低負荷のＣＰＵを復元元ＣＰＵに選択する。ＣＰＵの負荷は、スレーブＯＳまたはスレーブＣＰＵの特権モードプログラムＨが監視することで得ることができる。
【００５１】
そして、復元元ＣＰＵが選択されると、復元元ＣＰＵの特権モードプログラムＨは、マスタコンテキストＭＣ内の障害箇所となる区画データを特定する（ステップＳ４０４）。具体的には、復元元ＣＰＵの特権モードプログラムＨは、ストールにより障害されたかどうかを特定せず、またその必要もない。ウォッチドッグタイマ１０３による異常検出があった場合、図２に示したように、メモリアクセス検出により、マスタコンテキストＭＣのある区画データが圧縮されて新圧縮データとそのハッシュ値が保存される。
【００５２】
復元元ＣＰＵの特権モードプログラムＨは、このときに保存された新圧縮データの圧縮元の区画データを障害箇所として特定することとなる。復元元ＣＰＵの特権モードプログラムＨは、暗号エンジン１０４に対し、特定された障害箇所である区画データの新旧圧縮データのうち旧圧縮データを抽出して（ステップＳ４０５）、抽出された旧圧縮データを伸張する（ステップＳ４０６）。たとえば、図２の（Ｄ）に示したように、障害箇所が区画データＭＣ５１の場合は、その新圧縮データｍｃ５１ではなく、１つ前の旧圧縮データｍｃ５を抽出することとなる。
【００５３】
復元元ＣＰＵの特権モードプログラムＨは、マスタコンテキストＭＣの障害箇所を伸張された区画データで上書きすることで、マスタコンテキストＭＣをストール前の状態に復元する（ステップＳ４０７）。たとえば、図２の（Ｄ）に示したように、抽出された圧縮データｍｃ５を区画データＭＣ５に伸張し、図２の（Ｄ）のマスタコンテキストＭＣの区画データＭＣ５１に伸張された区画データＭＣ５を上書きする（図２の（Ｅ）参照。）。
【００５４】
このあと、復元元ＣＰＵの特権モードプログラムＨは、復元元ＣＰＵで一時停止中のスレーブＯＳ内のカーネルＫが持つプロセステーブルを更新する（ステップＳ４０８）。具体的には、復元後のマスタコンテキストＭＣを指定するアドレスをプロセステーブルに追加する。なお、プロセステーブルは、復元元ＣＰＵ内のキャッシュＣまたはシステム管理領域に格納されている。
【００５５】
そして、復元元ＣＰＵの特権モードプログラムＨは、復元元ＣＰＵのスレーブＯＳのみ一時停止を解除して、復元元ＣＰＵのスレーブＯＳのカーネルＫにマスタプロセスＭＰの生成指示を通知する（ステップＳ４０９）。これにより、復元元ＣＰＵでマスタプロセスＭＰが生成されるため、更新後のプロセステーブル内の復元後のマスタコンテキストＭＣを指定するアドレスと関連付けされる。このようにして、マスタプロセスＭＰが復元元ＣＰＵにマイグレートされたこととなる。
【００５６】
このあと、復元元ＣＰＵの特権モードプログラムＨは、存命している残余のスレーブＣＰＵのスレーブＯＳの一時停止の解除指示を通知する（ステップＳ４１０）。これにより、ストールＣＰＵ以外のスレーブＣＰＵでＯＳの動作が再開することとなる。また、ＯＳの動作が再開することにより、その上位のアプリＡＰの動作も再開することとなる。
【００５７】
このように、マスタプロセスＭＰのマイグレートの完了後に、復元元ＣＰＵの特権モードプログラムＨは、ストールＣＰＵのリブートをおこなう（ステップＳ４１１）。これにより、復元処理が終了する。
【００５８】
図５は、復元後のシステム状態を示すブロック図である。図５では、ＣＰＵ＃１が復元元ＣＰＵとなっているため、ＣＰＵ＃１にマスタプロセスＭＰがマイグレートされている。また、ストールＣＰＵであるＣＰＵ＃０は、リブート直後には、ＯＳ、アプリＡＰが実行されていないが、復元後のマスタＣＰＵであるＣＰＵ＃１がスレーブＯＳの起動指示をすることで、ＣＰＵ＃０でカーネルＫが起動する。また、その後、周知の負荷分散技術によりスレーブプロセスＳＰやアプリＡＰを割り当てることで、マルチコアプロセッサ１０１の負荷の均衡を図ることができる。
【００５９】
マスタプロセスＭＰやマスタＣＰＵを保護する技術は多く開発されているが、いずれも、初期状態を保存しているものであり、動作中では、動的な変化状態を刻々保存するオーバーヘッドが大きいため、効率的な復元はできない。
【００６０】
これに対し、本実施の形態によれば、マルチコアプロセッサシステム１００の動作中に、マスタＣＰＵに異常が発生してストールした場合、マスタコンテキストＭＣをストール前の状態に復元して、スレーブＣＰＵにマスタプロセスＭＰを移行することができる。したがって、システム全体をコールドスタートさせる必要はなく、ウォームスタートが可能となる。また、マスタプロセスＭＰに限らず、アプリＡＰの不正動作や異常動作によりマスタコンテキストＭＣが書き換えられた場合でも、同様にウォームスタートさせることができる。
【００６１】
特に、マルチコアプロセッサシステム１００は、ＣＰＵ数が多いため、チップ面積が必然的に広くなる。したがって、ガンマ線が照射されやすく、ＣＰＵ内でのビット反転が発生する可能性がある。このようなビット反転によりマスタコンテキストＭＣ内の値が狂った場合でも、ウォッチドッグタイマ１０３によりマスタＣＰＵのストールが検出されるため、マスタプロセスＭＰの高速移行によるウォームスタートを実現することができる。
【００６２】
また、マスタコンテキストＭＣが更新される都度、更新された区画データについてのみ、新旧圧縮データとそのハッシュ値を保存しておくことで、マスタコンテキストＭＣを復元することができる。したがって、保護領域１５２のサイズを小さくすることができるため、その分システム管理領域１５１や一般領域１５３を大きくとることができる。
【００６３】
また、本マルチコアプロセッサシステム１００を携帯端末に搭載する場合、携帯端末では据え置き型端末に比べて、必然的に高速起動が要求される。したがって、マスタＣＰＵのストール発生後のウォームスタートにより、システム全体を再起動する必要はない。したがって、携帯端末の利便性の向上を図ることができる。
【００６４】
また、暗号エンジン１０４は、携帯電話、スマートフォン、ゲーム機、タブレットなどの携帯端末において通信認証やデータ保護のために標準装備されるハードウェアである。このような標準装備される暗号エンジン１０４を復元に流用することで、復元専用のハードウェアを搭載する必要がない。したがって、携帯端末の部品点数の低減化を図ることができ、機能増加にともなう大型化を防止することができる。
【符号の説明】
【００６５】
１００  マルチコアプロセッサシステム
１０１  マルチコアプロセッサ
１０２  スヌープコントローラ
１０３  ウォッチドッグタイマ
１０４  暗号エンジン
１０５  共有メモリ
１０６  バス
１５１  システム管理領域
１５２  保護領域
１５３  一般領域
１６０  圧縮情報
ＡＰ  アプリ
Ｃ  キャッシュ
Ｈ  特権モードプログラム
ＭＣ  マスタコンテキスト
ＭＰ  マスタプロセス
ＳＰ  スレーブプロセス
【図１】
0005454686.tif 000002
【図２】
0005454686.tif 000003
【図３】
0005454686.tif 000004
【図４】
0005454686.tif 000005
【図５】
0005454686.tif 000006