(57)【要約】  マルチコアプロセッサシステム（１００）を、高信頼アプリ（１１２）と低信頼アプリ（１１１）が混載した状態で運用する。マルチコアプロセッサシステム（１００）は、ＣＰＵ（＃１）が低信頼アプリ（１１１）を実行し、ＣＰＵ（＃２）が高信頼アプリ（１１２）を実行する状態である。メモリプロテクトコントローラ（１０６＃２）は、ユーザ領域（１２１）内の高信頼アプリメモリ領域（１２３）にアクセスするとともに、プロテクト領域（１２４）内の高信頼アプリメモリ領域（１２５）にアクセスする。低信頼アプリ（１１１）による不正書込によって、高信頼アプリメモリ領域（１２３）のデータが破壊された場合、ＣＰＵ（＃２）は、高信頼アプリメモリ領域（１２５）のデータを高信頼アプリメモリ領域（１２３）にコピーすることでデータを復元する。
2012131884.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵと、
メモリと、
前記複数のＣＰＵと前記メモリとの間に配置されるメモリプロテクトコントローラと、
を含み、
前記メモリプロテクトコントローラは、
アプリケーション実行時に前記複数のＣＰＵのアクセス要求によって第１メモリ領域にアクセスするとともに、システムブート時に確保された第２メモリ領域にアクセスすること
を特徴とするマルチコアプロセッサシステム。
【請求項２】
所定のアプリケーションのリストを格納するテーブルと、
実行されるアプリケーションと前記リストのアプリケーションとを比較する比較部と、
を含むことを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
比較結果が一致を示すとき、前記実行されるアプリケーションについて、前記第１メモリ領域と前記第２メモリ領域とをアクセスする指示を登録すること
を特徴とする請求項２に記載のマルチコアプロセッサシステム。
【請求項４】
比較結果が不一致を示すとき、前記実行されるアプリケーションについて、前記第１メモリ領域のみをアクセスする指示を登録すること
を特徴とする請求項２に記載のマルチコアプロセッサシステム。
【請求項５】
自システムの異常の検出に応答して、前記実行されるアプリケーションが実行中であるときに前記第１メモリ領域と前記第２メモリ領域との比較結果に基づいて前記第１メモリ領域を復元すること
を特徴とする請求項１乃至請求項４の何れか一に記載のマルチコアプロセッサシステム。
【請求項６】
前記所定のアプリケーションは、マルチコアプロセッサシステム環境での動作検証が行われたアプリケーションであること
を特徴とする請求項１乃至請求項５の何れか一に記載のマルチコアプロセッサシステム。
【請求項７】
前記複数のＣＰＵの数がＮ（Ｎは２以上の整数）であり、アプリケーション実行時に割り当てられる前記メモリのメモリ領域がＭ（Ｍは１以上の整数）バイトであるとき、前記第２メモリ領域の大きさはＮ×Ｍであること
を特徴とする請求項１乃至請求項６の何れか一に記載のマルチコアプロセッサシステム。
【請求項８】
複数のＣＰＵと、
メモリと、
前記複数のＣＰＵと前記メモリとの間に配置されるメモリプロテクトコントローラと、
を含み、
前記メモリプロテクトコントローラは、
アクセス形態情報が第１アクセス形態を示す場合には、アプリケーション実行において第１メモリ領域へのアクセスと同様に第２メモリ領域をアクセスし、
アクセス形態情報が第２アクセス形態を示す場合には、アプリケーション実行において前記第１メモリ領域のみをアクセスすること
を特徴とするマルチコアプロセッサシステム。
【請求項９】
前記アプリケーションとリストに登録されるアプリケーションとの比較結果に基づいて前記アクセス形態情報が設定されること
を特徴とする請求項８に記載のマルチコアプロセッサシステム。
【請求項１０】
前記比較結果が一致を示すとき、前記アクセス形態情報が第１アクセス形態に設定され、
前記比較結果が不一致を示すとき、前記アクセス形態情報が第２アクセス形態に設定されること
を特徴とする請求項９に記載のマルチコアプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアを保護するマルチコアプロセッサシステムに関する。
【背景技術】
【０００２】
近年、１つのシステム内に、複数のコアを有するマルチコアプロセッサシステムの形態を採用する機器が増加している。１つのシステム内に１つのコアを有するシングルコアプロセッサシステム用のアプリケーションソフトウェア（以下、「アプリ」と称する）をマルチコアプロセッサシステムで動作させた場合、多くの障害が発生する可能性が存在する。また、新たにマルチコアプロセッサシステム向けに開発されたソフトウェアであっても、複数のコアが同時に動作する並列動作状態での検証について、試験者が全てのタイミングを検証することは困難であった。次に、マルチコアプロセッサシステムでどのような障害が起きるかということを図１０、図１１を参照して説明する。【０００３】
図１０は、シングルコアプロセッサシステム向けのソフトウェアをマルチコアプロセッサシステム上で動作する場合の動作例を示す説明図である。符号１００１で示す説明図では、アプリ１００３をシングルコアプロセッサシステムで動作する場合について説明し、符号１００２で示す説明図では、アプリ１００３をマルチコアプロセッサシステムで動作する場合について説明する。【０００４】
初めに、符号１００１で示す説明図にて、アプリ１００３内のメインスレッド１００４は、関数ｆ（ｘ）を呼び出し、ｆ（ｘ）の結果を利用する。そこで、メインスレッド１００４は、ｆ（ｘ）を実行するオフロード処理用のスレッド１００５を起動し、スレッド１００５の終了後、ｆ（ｘ）の結果を利用し、処理を続行する。なお、スレッドとはＣＰＵで行う処理を管理するための基本単位である。【０００５】
アプリ１００３がシングルコアプロセッサシステムで動作する場合、メインスレッド１００４は、時刻ｔ１でスレッド１００５を起動する。続けて、スレッド１００５が時刻ｔ２にてｆ（ｘ）の処理を終了した後、時刻ｔ３にて、メインスレッド１００４は、結果を利用する。【０００６】
次に、符号１００２で示す説明図にて、アプリ１００３がマルチコアプロセッサシステムで動作する場合について説明する。アプリ１００３が、マルチコアプロセッサシステム環境で動作検証されておらず安全でない場合、符号１００６で示す動作となり、マルチコアプロセッサシステム環境で動作検証されており安全である場合、符号１００７で示す動作となる。なお、以下の説明にて、マルチコアプロセッサシステム環境で動作検証されておらず安全でないアプリを低信頼アプリと呼称し、マルチコアプロセッサシステム環境で動作検証されており安全であるアプリを高信頼アプリと呼称する。なお、マルチコアプロセッサシステムで対象のアプリに信頼性があるか否かを検証する方法としては、様々なタイミングに対して検証を行う方法が存在する。【０００７】
アプリ１００３が低信頼アプリである場合、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）＃１で実行するメインスレッド１００４は、時刻ｔ１でスレッド１００５をＣＰＵ＃２上で起動する。ＣＰＵ＃２は、スレッド１００５と他スレッドが割り当てられている状態を想定している。スレッド１００５は、時刻ｔ３にてｆ（ｘ）の処理を終了する。【０００８】
また、ＣＰＵ＃１はメインスレッド１００４のみを実行しているため、メインスレッド１００４の割当時間がシングルコアプロセッサシステム時より多くなる。結果、時刻ｔ３より早い時刻ｔ２にて、メインスレッド１００４は、ｆ（ｘ）の結果を利用する。時刻ｔ２では、まだｆ（ｘ）の処理が終了していないため、メインスレッド１００４は、予期せぬ値を読み込むことになり、障害が発生する。【０００９】
アプリ１００３が高信頼アプリである場合、メインスレッド１００４は、ｆ（ｘ）の結果を利用する前に同期処理が挿入されている。これにより、メインスレッド１００４は、時刻ｔ２にて、スレッドｆ（ｘ）の結果を利用する前で同期処理を実行する。同期処理が実行されたメインスレッド１００４は、スレッド１００５が処理終了するまで待機し、安全に処理を実行することができる。【００１０】
図１１は、シングルコアプロセッサシステム上で呼び出されていたライブラリがマルチコアプロセッサシステム上で呼び出される場合の説明図である。符号１１０１で示す説明図は、ライブラリＡがシングルコアプロセッサシステム上で動作する場合を示しており、符号１１０２で示す説明図は、ライブラリＡがマルチコアプロセッサシステム上で動作する場合を示している。【００１１】
符号１１０１で示す説明図にて、アプリＸは、ライブラリＡを呼び出している。また、アプリＹは、ライブラリＡとライブラリＢを呼び出している。このように、シングルコアプロセッサシステム上で呼び出されるライブラリＡは、特別な管理を行わなくてよい。【００１２】
符号１１０２で示す説明図にて、アプリＸはＣＰＵ＃１で実行されており、アプリＹはＣＰＵ＃２で実行されている。ライブラリＡが共有リソースを有する場合、ライブラリＡは、ライブラリＡのコンテキスト１１０３に対して排他制御を行うといった対策が取られる。具体的な対策として、ＣＰＵ＃１上のライブラリＡは、インターフェース１１０４＃１を通じ、ＩＰＣ（Ｉｎｔｅｒ−Ｐｒｏｃｅｓｓｏｒ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ）１１０５＃１、ＩＰＣ１１０５＃２を用いてＣＰＵ＃２のライブラリＡと排他制御を行う。このような対策が行われているライブラリは高信頼のライブラリとなり、対策が行われていないライブラリは低信頼のライブラリとなる。【００１３】
このような、高信頼アプリ、低信頼アプリを実行する場合の技術として、たとえば、システムを、ドメイン分割し、安全な動作をする高信頼アプリ群となる安全ドメインと、安全な動作をする保証がない低信頼アプリ群となる非安全ドメインとに分割する。安全ドメインは、メモリ内の非安全ドメインがアクセスできない安全データにアクセスする技術が開示されている（たとえば、下記特許文献１、２を参照。）。【００１４】
また、データを保護する技術として、たとえば、フラッシュメモリの例として、未使用の予備ブロックを探し出し、保護領域用のエラーブロックとする技術が開示されている。また、データを保護する他の技術として、たとえば、メモリを２重化する領域を設け、重要なプログラムやデータの破壊を防ぐ技術が開示されている（たとえば、下記特許文献３、４を参照。）。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特表２００６−５０６７５４号公報
【特許文献２】特開２００４−１７１５６３号公報
【特許文献３】特開２００４−３１０７７０号公報
【特許文献４】特開平５−１０８４９３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１６】
上述した従来技術を適用し、高信頼アプリ、低信頼アプリを実行する場合、マルチコアプロセッサシステムは、高信頼アプリ、低信頼アプリを分割して運用することになる。したがって、従来技術を適用したマルチコアプロセッサシステムは、高信頼アプリと低信頼アプリを混載して運用することが困難であるという問題があった。【００１７】
本発明は、上述した従来技術による問題点を解消するため、高信頼アプリと低信頼アプリを混載して運用できるマルチコアプロセッサシステムを提供することを目的とする。
【課題を解決するための手段】
【００１８】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、複数のＣＰＵと、メモリと、複数のＣＰＵとメモリとの間に配置されるメモリプロテクトコントローラと、を含み、メモリプロテクトコントローラは、アプリケーション実行時に複数のＣＰＵのアクセス要求によって第１メモリ領域にアクセスするとともに、システムブート時に確保された第２メモリ領域にアクセスするマルチコアプロセッサシステムが提案される。
【発明の効果】
【００１９】
本発明の一側面によれば、高信頼アプリと低信頼アプリを混載して運用できるという効果を奏する。
【図面の簡単な説明】
【００２０】
【図１】図１は、本実施の形態にかかるマルチコアプロセッサシステム１００の障害発生時の動作例と復元処理の動作例を示す説明図である。
【図２】図２は、マルチコアプロセッサシステム１００のハードウェア例を示すブロック図である。
【図３】図３は、マルチコアプロセッサシステム１００の機能例を示すブロック図である。
【図４】図４は、メモリプロテクトコントローラ１０６の内部の機能例を示す説明図である。
【図５】図５は、メモリプロテクトコントローラ１０６の登録例を示す説明図である。
【図６】図６は、マルチコアプロセッサシステム１００の起動時の処理手順の一例を示すフローチャートである。
【図７】図７は、マルチコアプロセッサシステム１００のアプリ切替時の処理手順の一例を示すフローチャート（その１）である。
【図８】図８は、マルチコアプロセッサシステム１００のアプリ切替時の処理手順の一例を示すフローチャート（その２）である。
【図９】図９は、マルチコアプロセッサシステム１００のエラー時の処理手順の一例を示すフローチャートである。
【図１０】図１０は、シングルコアプロセッサシステム向けのソフトウェアをマルチコアプロセッサシステム上で動作する場合の動作例を示す説明図である。
【図１１】図１１は、シングルコアプロセッサシステム上で呼び出されていたライブラリがマルチコアプロセッサシステム上で呼び出される場合の説明図である。
【発明を実施するための形態】
【００２１】
以下に添付図面を参照して、開示のマルチコアプロセッサシステムの実施の形態を詳細に説明する。
【００２２】
図１は、本実施の形態にかかるマルチコアプロセッサシステム１００の障害発生時の動作例と復元処理の動作例を示す説明図である。図１では、符号１０１で示す説明図にて、マルチコアプロセッサシステム１００の障害発生時の動作例を示し、符号１０２で示す説明図にて、マルチコアプロセッサシステム１００の復元処理の動作例を示す。
【００２３】
図１におけるマルチコアプロセッサシステム１００は、複数のコアとなるＣＰＵｓ１０３と、メモリ１０４とを含む。マルチコアプロセッサシステム１００は、携帯電話といった携帯端末を想定している。ＣＰＵｓ１０３には、ＣＰＵ＃１とＣＰＵ＃２が含まれる。以下、接尾記号“＃ｎ”が付随された記号は、ｎ番目のＣＰＵに対応する記号であることを示している。ＣＰＵｓ１０３とメモリ１０４は、バス１０５で接続されている。また、ＣＰＵ＃１、ＣＰＵ＃２は、それぞれ、メモリプロテクトコントローラ１０６＃１、メモリプロテクトコントローラ１０６＃２と通信可能である。
【００２４】
メモリプロテクトコントローラ１０６は、２重アクセス形態とアクセススルー形態という、２つの形態のうち指示された形態に応じた動作をする装置である。２重アクセス形態の指示がある場合、メモリプロテクトコントローラ１０６は、アプリ本来の要求先アドレスにアクセスしつつ、保護されたメモリ領域内のアドレスにアクセスする機能を有している。また、アクセススルー形態の指示がある場合、メモリプロテクトコントローラ１０６は、アプリ本来の要求先アドレスにアクセスする。
【００２５】
また、マルチコアプロセッサシステム１００は、低信頼アプリ１１１と高信頼アプリ１１２を実行する。具体的には、ＣＰＵ＃１が低信頼アプリ１１１を実行し、ＣＰＵ＃２が高信頼アプリ１１２を実行する。また、マルチコアプロセッサシステム１００は、低信頼アプリ１１１のコンテキストが格納される領域として、ユーザ領域１２１内に、低信頼アプリメモリ領域１２２を確保する。同様に、マルチコアプロセッサシステム１００は、高信頼アプリ１１２のコンテキストが格納される領域として、ユーザ領域１２１内に、高信頼アプリメモリ領域１２３を確保する。なお、コンテキストとは、ＣＰＵのレジスタの値となるプログラムカウンタ、スタックポインタなどといったアプリが使用するデータである。
【００２６】
さらに、マルチコアプロセッサシステム１００は、ユーザ領域１２１とは別の領域となるプロテクト領域１２４を確保し、プロテクト領域１２４内に、高信頼アプリメモリ領域１２５を確保する。高信頼アプリメモリ領域１２５は、高信頼アプリメモリ領域１２３と同一のデータが格納される。同一のデータの格納方法として、ＣＰＵ＃２は、高信頼アプリ１１２が実行するタイミングで、メモリプロテクトコントローラ１０６＃２に２重アクセス形態の登録を行う。２重アクセス形態となっているメモリプロテクトコントローラ１０６＃２は、ライトアクセスが発生した場合、書き込み内容を高信頼アプリメモリ領域１２３に書き込みつつ、同内容を高信頼アプリメモリ領域１２５にも書き込む。
【００２７】
符号１０１で示す説明図では、このように高信頼アプリメモリ領域１２３が保護されている状態で、低信頼アプリ１１１が不正書込を行い、高信頼アプリメモリ領域１２３のデータを破壊した場合を想定している。ＣＰＵ＃２は、高信頼アプリ１１２を実行する際に、高信頼アプリメモリ領域１２３を読み込んで実行しようとするが、高信頼アプリメモリ領域１２３のデータは正しい値を示しておらず、高信頼アプリ１１２が強制終了する。たとえば、高信頼アプリメモリ領域１２３のプログラムカウンタが不正なアドレスに書き換えられた場合、ＣＰＵ＃２は、不正なアドレスの値を実行コードとして実行しようとし、高信頼アプリ１１２が強制終了する。
【００２８】
なお、不正書込が行われることによって高信頼アプリ１１２が強制終了する場合以外に、ＯＳがハングする場合もある。ＯＳがハングする場合の動作については、図９にて説明する。
【００２９】
次に、符号１０２で示す説明図では、データ破壊後の復元処理を示している。ＣＰＵ＃２は、高信頼アプリ１１２に対してエラーが発生したことを検出すると、高信頼アプリ１１２が実行中であったか否かを判定する。高信頼アプリ１１２が実行中であった場合、ＣＰＵ＃２は、高信頼アプリメモリ領域１２３と高信頼アプリメモリ領域１２５を比較し、差分が存在する場合、高信頼アプリメモリ領域１２３を高信頼アプリメモリ領域１２５で上書きする。これにより、不正書込が行われたデータが正常なデータに復元し、ＣＰＵ＃２は、高信頼アプリ１１２を続行することができるため、高信頼アプリ１１２を保護することができる。
【００３０】
（マルチコアプロセッサシステム１００のハードウェア）
図２は、マルチコアプロセッサシステム１００のハードウェア例を示すブロック図である。図２において、マルチコアプロセッサシステム１００は、ＣＰＵを複数搭載するＣＰＵｓ１０３と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０１と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０２と、を含む。また、マルチコアプロセッサシステム１００は、フラッシュＲＯＭ２０３と、フラッシュＲＯＭコントローラ２０４と、フラッシュＲＯＭ２０５と、を含む。なお、メモリ１０４は、ＲＡＭ２０２の全てであってもよいし、または一部であってもよい。さらに、メモリ１０４は、ＲＯＭ２０１、フラッシュＲＯＭ２０３、フラッシュＲＯＭ２０５を含んでいてもよい。
【００３１】
また、マルチコアプロセッサシステム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ２０６と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０７と、キーボード２０８と、を含む。また、各部はバス１０５によってそれぞれ接続されている。
【００３２】
ここで、ＣＰＵｓ１０３は、マルチコアプロセッサシステム１００の全体の制御を司る。ＣＰＵｓ１０３は、シングルコアのプロセッサを並列して接続した全てのＣＰＵを指している。ＣＰＵｓ１０３は、ＣＰＵ＃１〜ＣＰＵ＃ｘを含む。なお、ｘは２以上の整数である。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、シングルコアのプロセッサであるＣＰＵが並列されている形態を例にあげて説明する。
【００３３】
また、ＣＰＵ＃１〜ＣＰＵ＃ｘは、それぞれ、メモリプロテクトコントローラ１０６と通信可能である。さらに、ＣＰＵ＃１〜ＣＰＵ＃ｘは、それぞれ専用のキャッシュメモリを有してもよい。
【００３４】
ＲＯＭ２０１は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０２は、ＣＰＵｓ１０３のワークエリアとして使用される。フラッシュＲＯＭ２０３は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、マルチコアプロセッサシステム１００は、Ｉ／Ｆ２０７によって新しいＯＳを受信し、フラッシュＲＯＭ２０３に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００３５】
フラッシュＲＯＭコントローラ２０４は、ＣＰＵｓ１０３の制御にしたがってフラッシュＲＯＭ２０５に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０５は、フラッシュＲＯＭコントローラ２０４の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがＩ／Ｆ２０７を通して取得した画像データ、映像データや、本実施の形態にかかるソフトウェア保護方法を実行するプログラムが格納されていてもよい。フラッシュＲＯＭ２０５は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００３６】
ディスプレイ２０６は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。たとえば、ディスプレイ２０６は、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００３７】
Ｉ／Ｆ２０７は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２０９に接続され、ネットワーク２０９を介して他の装置に接続される。そして、Ｉ／Ｆ２０７は、ネットワーク２０９と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０７には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３８】
キーボード２０８は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０８は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００３９】
（マルチコアプロセッサシステム１００の機能例）
次に、マルチコアプロセッサシステム１００の機能例について説明する。図３は、マルチコアプロセッサシステム１００の機能例を示すブロック図である。なお、マルチコアプロセッサシステム１００は、各機能からアクセスされる記憶領域として、高信頼ホワイトリスト３０１にアクセス可能である。
【００４０】
マルチコアプロセッサシステム１００は、確保部３１１と検出部３１２と比較部３１３と、通知部３１４と、登録部３１５と、検出部３１６と、検出部３１７と、比較部３１８と、復元部３１９と、を含む。この制御部となる機能（確保部３１１〜復元部３１９）は、記憶装置に記憶されたプログラムをＣＰＵ＃１〜ＣＰＵ＃ｘが実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０１、ＲＡＭ２０２、フラッシュＲＯＭ２０３、フラッシュＲＯＭ２０５などである。または、Ｉ／Ｆ２０７を経由して他のＣＰＵが実行することにより、その機能を実現してもよい。
【００４１】
また、図３では、確保部３１１は、高信頼アプリ１１２を実行するＣＰＵ＃２の機能となっているが、ＣＰＵ＃１、ＣＰＵ＃３〜ＣＰＵ＃ｘのうちいずれか一つのＣＰＵの機能であってもよい。また、検出部３１２〜復元部３１９は、ＣＰＵ＃１〜ＣＰＵ＃ｘの全てのＣＰＵに含まれる機能であってもよい。
【００４２】
なお、ＣＰＵ＃２は、ハイパーバイザ＃２、ＯＳ＃２、カーネル＃２を実行する。ハイパーバイザ＃２は、ＣＰＵ＃２などのハードウェア上で直接動作するプログラムである。ハイパーバイザ＃２は、ＣＰＵ＃２内のレジスタを直接参照したり、ＣＰＵ＃２内のレジスタの情報を読み出したり、ＣＰＵ＃２内のレジスタの情報を書き換えたりする特権命令を実行することができるプログラムである。カーネル＃２は、ＯＳ＃２の中核の機能であり、たとえば、マルチコアプロセッサシステム１００のリソースを管理し、スレッドなどのソフトウェアがハードウェアにアクセスできるようにする。
【００４３】
また、図示していないが、ＯＳ＃２は、ＣＰＵ＃２を制御するプログラムである。たとえば、マルチコアプロセッサシステム１００内のリソースにアクセスするライブラリ、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）等をアプリに提供する。
【００４４】
なお、図示していないが、ＣＰＵ＃１、ＣＰＵ＃３〜ＣＰＵ＃ｘも、ハイパーバイザ、ＯＳ、カーネルを実行する。確保部３１１〜通知部３１４、検出部３１６は、カーネル＃２の機能に含まれ、登録部３１５、検出部３１７〜復元部３１９はハイパーバイザ＃２の機能に含まれる。
【００４５】
高信頼ホワイトリスト３０１は、所定のアプリを登録するリストである。登録される所定のアプリとは、マルチコアプロセッサシステム１００での動作検証が行われた高信頼アプリ１１２である。たとえば、高信頼アプリ１１２は、マルチコアプロセッサシステム１００に予めプリインストールされているアプリである。また、マルチコアプロセッサシステム１００を製造するメーカ、ネットワーク２０９を提供する通信キャリア等が提供するアプリを高信頼アプリとして登録してもよい。たとえば、マルチコアプロセッサシステム１００は、ネットワーク２０９からアプリをダウンロードした際に、メーカまたは通信キャリアが提供することを示す識別情報が付随していた場合、ダウンロードしたアプリを高信頼ホワイトリスト３０１に登録してもよい。
【００４６】
なお、高信頼ホワイトリスト３０１に登録される内容は、たとえば、アプリの名称であってもよいし、またファイルシステムが存在する場合、アプリのプログラムが格納されたファイルパスであってもよい。
【００４７】
確保部３１１は、システムブート時に、アプリ実行時に複数のＣＰＵがアクセスする第１メモリ領域に対応するとともに、複数のＣＰＵが第１メモリ領域にアクセスするときに同様にアクセスされる第２メモリ領域を確保する機能を有する。なお、第１メモリ領域は、実行中アプリのアクセス先となるメモリ領域であり、図３で示すユーザ領域１２１となる。また、第２メモリ領域は、ユーザ領域１２１のデータを保護する領域となるプロテクト領域１２４となる。また、第２メモリが確保されるタイミングとしては、システムブート時であってもよいし、アプリが起動されるときであってもよい。
【００４８】
また、確保部３１１は、マルチコアプロセッサシステム１００での同時に実行するアプリの数がＮであり、アプリ実行時にて割り当てられるメモリ領域がＭ［バイト］である場合、第２メモリ領域の大きさをＮ×Ｍ［バイト］で確保してもよい。たとえば、確保部３１１は、Ｎ＝５、Ｍ＝１［Ｍバイト］である場合、Ｎ×Ｍ＝５×１＝５［Ｍバイト］の領域をユーザ領域１２１として確保する。
【００４９】
また、Ｎの値として、本実施の形態にかかるマルチコアプロセッサシステム１００は、携帯電話等を想定しており、多数のアプリを同時起動することを想定していない。Ｎの最大値としては、たとえば、８、１６といった値になる。また、Ｎは、ＣＰＵｓ１０３の数であってもよい。なお、確保された領域のアドレスは、ＣＰＵ＃２のレジスタ、キャッシュメモリ、ＲＡＭ２０２等の記憶領域に記憶される。
【００５０】
検出部３１２は、アプリが起動したというイベント、アプリが終了したというイベント、またはアプリが切り替えられたというイベントのうち、いずれかのイベントを検出する機能を有する。たとえば、検出部３１２は、高信頼アプリ１１２が起動されたというイベントを検出する。なお、検出したイベントは、ＣＰＵ＃２のレジスタ、キャッシュメモリ、ＲＡＭ２０２等の記憶領域に記憶される。
【００５１】
比較部３１３は、検出部３１２によってイベントが検出された場合、実行されるアプリと所定のアプリのリストに登録されたアプリとを比較する機能を有する。たとえば、比較部３１３は、実行される高信頼アプリ１１２と高信頼ホワイトリスト３０１に登録されたアプリを比較する。なお、比較結果は、ＣＰＵ＃２のレジスタ、キャッシュメモリ、ＲＡＭ２０２等の記憶領域に記憶される。
【００５２】
通知部３１４は、比較部３１３による比較結果が一致を示すとき、実行されるアプリからのアクセスについて、メモリプロテクトコントローラ１０６＃２が第１メモリ領域と第２メモリ領域とにアクセスする指示をハイパーバイザ＃２に通知する機能を有する。たとえば、高信頼アプリ１１２と高信頼ホワイトリスト３０１に登録されたアプリが一致を示す場合を想定する。このとき、通知部３１４は、高信頼アプリ１１２からのアクセスについて、メモリプロテクトコントローラ１０６＃２が高信頼アプリメモリ領域１２３と高信頼アプリメモリ領域１２５とにアクセスする指示をハイパーバイザ＃２に通知する。
【００５３】
また、通知部３１４は、比較部３１３による比較結果が不一致を示すとき、実行されるアプリからのアクセスについて、メモリプロテクトコントローラ１０６＃２が第１メモリ領域にアクセスする指示をハイパーバイザ＃２に通知してもよい。
【００５４】
また、通知部３１４は、アプリが起動され、起動されたアプリの比較部３１３による比較結果が一致を示すとき、第２メモリ領域内に起動されたアプリ用の領域を追加する指示を通知してもよい。また、通知部３１４は、アプリが終了し、終了したアプリの比較部３１３による比較結果が一致を示すとき、第２メモリ領域内の終了したアプリ用の領域を解放する指示を通知してもよい。なお、通知された内容は、ＣＰＵ＃２のレジスタ、キャッシュメモリ、ＲＡＭ２０２等の記憶領域に記憶されてもよい。
【００５５】
登録部３１５は、通知部３１４によって通知された指示をメモリプロテクトコントローラ１０６＃２に登録する機能を有する。たとえば、登録部３１５は、第１アクセス形態である２重アクセス形態の指示が通知された場合、メモリプロテクトコントローラ１０６＃２に２重アクセス形態を登録する。具体的に、登録部３１５は、メモリプロテクトコントローラ１０６＃２内のレジスタに登録する。
【００５６】
また、登録部３１５は、第２アクセス形態であるアクセススルー形態の指示が通知された場合、メモリプロテクトコントローラ１０６＃２にアクセススルー形態を登録する。なお、具体的な登録内容は、図４にて説明する。なお、登録を行ったという情報は、ＣＰＵ＃２のレジスタ、キャッシュメモリ、ＲＡＭ２０２等の記憶領域に記憶されてもよい。
【００５７】
検出部３１６は、自ＣＰＵ内のアプリが強制終了したことを検出する機能を有する。たとえば、検出部３１６は、アクセス不可能なメモリにアクセスしたことを示すセグメントエラー等が発生し、高信頼アプリ１１２が強制終了したことを検出する。なお、アプリが強制終了したという情報は、ＣＰＵ＃２のレジスタ、キャッシュメモリ、ＲＡＭ２０２等の記憶領域に記憶される。
【００５８】
検出部３１７は、ＯＳ＃２がハングしたことを検出する機能を有する。たとえば、検出部３１７は、ＯＳ＃２を周期監視し、ＯＳ＃２からの応答がない場合、ＯＳ＃２がハングしたことを検出する。なお、ハング中にあるＯＳは、異常状態となり、要求に対する応答が行えない状態である。ＯＳのハング状態は、カーネルパニックとも呼ばれる。なお、ＯＳ＃２がハングしたという情報は、ＣＰＵ＃２のレジスタ、キャッシュメモリ、ＲＡＭ２０２等の記憶領域に記憶される。
【００５９】
比較部３１８は、検出部３１６によるアプリの強制終了が検出された場合、または検出部３１７によるＯＳ＃２のハングが検出された場合、第１メモリ領域と第２メモリ領域とを比較する機能を有する。たとえば、比較部３１８は、高信頼アプリメモリ領域１２３と高信頼アプリメモリ領域１２５のデータを比較する。また、比較部３１８は、実行中のアプリが高信頼ホワイトリスト３０１に登録されている場合に、第１メモリ領域と第２メモリ領域とを比較してもよい。なお、比較結果は、ＣＰＵ＃２のレジスタ、キャッシュメモリ、ＲＡＭ２０２等の記憶領域に記憶される。
【００６０】
復元部３１９は、比較部３１８による比較結果に基づいて、第１メモリ領域を復元する機能を有する。たとえば、復元部３１９は、比較部３１８による比較結果が不一致を示すとき、比較結果の差分を第１メモリ領域に上書きすることで、第１メモリ領域を復元する。なお、復元を行ったという結果は、ＣＰＵ＃２のレジスタ、キャッシュメモリ、ＲＡＭ２０２等の記憶領域に記憶されてもよい。
【００６１】
図４は、メモリプロテクトコントローラ１０６の内部の機能例を示す説明図である。図４では、メモリプロテクトコントローラ１０６＃１を例にして説明を行うが、メモリプロテクトコントローラ１０６＃２〜メモリプロテクトコントローラ１０６＃ｘも、メモリプロテクトコントローラ１０６＃１と同様の機能を含む。メモリプロテクトコントローラ１０６＃１は、記憶部４０１＃１、判定部４０２＃１、変換部４０３＃１を含む。
【００６２】
記憶部４０１は、メモリプロテクトコントローラ１０６のアクセス形態とアプリに対応するプロテクト領域を記憶する。具体的に、記憶部４０１＃１は、制御レジスタ４０４＃１と格納レジスタ４０５＃１＿１〜格納レジスタ４０５＃１＿ｙを含む。ｙは１以上の整数である。
【００６３】
なお、具体的なｙの値としては、ＣＰＵ＃１が同時実行可能なアプリの数の最大値でよい。本実施の形態にかかるマルチコアプロセッサシステム１００は、携帯電話等を想定しており、パーソナル・コンピュータのように多数のアプリを同時実行することを想定していない。したがって、各ＣＰＵで同時に起動される際の最大のアプリ数も、多数のアプリを同時起動することを想定していない数となる。さらに、ｙは、Ｎ以下の値となる。たとえば、ｙは４、または８といった値となる。
【００６４】
制御レジスタ４０４＃１は、アクセス形態フラグ、プロテクト領域管理番号という２つのフィールドを含む。アクセス形態フラグフィールドには、２箇所のアドレスにアクセスを行う２重アクセス形態、または通常のアクセスを行うアクセススルー形態、のうちいずれかのアクセス形態情報を示す識別子が格納される。たとえば、具体的な識別子として、“１”が２重アクセス形態を意味してもよい。プロテクト領域管理番号フィールドには、２箇所のアドレスにアクセスを行う場合、格納レジスタ４０５＃１＿１〜格納レジスタ４０５＃１＿ｙのうち、どの格納レジスタ４０５＃１を適用するかを示す値が格納される。たとえば、プロテクト領域管理番号フィールドに“１”が格納された場合、変換部４０３＃１は、格納レジスタ４０５＃１＿１の設定を用いて変換を行う。
【００６５】
格納レジスタ４０５＃１＿１〜格納レジスタ４０５＃１＿ｙは、プロテクト領域をアプリごとに格納するレジスタである。また、格納レジスタ４０５＃１＿１〜格納レジスタ４０５＃１＿ｙは、それぞれ、管理番号＿１〜管理番号＿ｙに対応している。続けて、格納レジスタ４０５＃１の各フィールドについて説明を行う。格納レジスタ４０５＃１は、使用中ビット、アプリＩＤ、マスクアドレス、プロテクトアドレスという４つのフィールドを含む。
【００６６】
使用中ビットフィールドには、該当の格納レジスタ４０５＃１が使用中か否かを示すビットが格納される。アプリＩＤフィールドには、ＣＰＵ＃１にて実行中のアプリの識別情報が格納される。マスクアドレスフィールドには、アプリのアクセスするメモリ範囲を示すアドレスが格納される。具体的なメモリ範囲の大きさは、ＯＳが有するメモリ管理機構によって決定される。プロテクトアドレスフィールドには、ＣＰＵ＃１にて実行中のアプリのプロテクト領域へのアドレスが格納される。なお、制御レジスタ４０４＃１、格納レジスタ４０５＃１の具体的な設定例は、図５にて後述する。
【００６７】
判定部４０２＃１は、記憶部４０１＃１に記憶されたアクセス形態情報に応じてアドレス変換を行うか否かを判定する機能を有する。具体的には、判定部４０２＃１は、アクセス形態フラグフィールドが２重アクセス形態であれば、２箇所のアドレスにアクセスを行い、アクセス形態フラグフィールドがアクセススルー形態であればアドレス変換を行わず、アドレススルーする。
【００６８】
変換部４０３＃１は、判定部４０２＃１により２重アクセス形態であると判定された場合、一方のアクセス先についてアドレス変換を行う機能を有する。具体的には、変換部４０３＃１は、プロテクト領域管理番号フィールドに設定された管理番号に対応する格納レジスタ４０５＃１のマスクアドレスフィールドと、プロテクトアドレスフィールドとを参照してアドレス変換を行う。たとえば、変換部４０３は、変換後のアドレスを、下記（１）式によって変換する。
【００６９】
変換後のアドレス＝変換前のアドレス＆マスクアドレス＋プロテクトアドレス…（１）
【００７０】
具体的に、変換前のアドレスとなるアプリからのアクセス先が、０ｘ０５０００１００であり、マスクアドレスフィールドが０ｘ００００ｆｆｆｆであり、プロテクトアドレスフィールドが０ｘ０１００００００である場合を想定する。このとき、変換部４０３は、（１）にしたがって、以下のように変換する。
【００７１】
変換後のアドレス＝０ｘ０５０００１００＆０ｘ００００ｆｆｆｆ＋０ｘ０１００００００
⇔変換後のアドレス＝０ｘ０１０００１００
【００７２】
なお、メモリプロテクトコントローラ１０６＃１は、ＣＰＵ＃１からのリードリクエストアクセスとライトリクエストアクセスのうち、ライトリクエストアクセスについて２重アクセス形態を行ってもよい。理由として、エラーが発生していない状態で、リードリクエストアクセスに関する２重アクセス形態を行っても同一の値が返ってくるので、変換を行わないアドレスに対するリードアクセスで十分なためである。
【００７３】
図５は、メモリプロテクトコントローラ１０６の登録例を示す説明図である。図５で示すマルチコアプロセッサシステム１００は、高信頼ホワイトリスト３０１に登録されており、高信頼アプリとなるアプリＡ、アプリＣと、高信頼ホワイトリスト３０１に登録されておらず低信頼アプリとなるアプリＢ、アプリＤ、アプリＥを実行している。アプリＡとアプリＢは、ＣＰＵ＃１に割り当てられており、アプリＣ〜アプリＥは、ＣＰＵ＃２に割り当てられている。さらに、ＣＰＵ＃１はアプリＡを実行しており、ＣＰＵ＃２はアプリＤを実行している。なお、アプリＡ〜アプリＥのアプリＩＤは、それぞれ、０ｘ０００１、０ｘ０００２、０ｘ０００３、０ｘ０００４、０ｘ０００５となる。
【００７４】
カーネル＃１は、ＯＳがブートする際に、０ｘ００００００００〜０ｘ００５０００００となるメモリ領域をカーネル占有領域５０１として確保する。続けて、カーネル＃１は、アプリの動作空間となるユーザ領域１２１を確保する前に、プロテクト領域１２４を確保する。たとえば、マルチコアプロセッサシステム１００のアプリ同時実行数Ｎ＝５であり、１つのアプリに対して許容するメモリサイズＭを１［Ｍバイト］と想定する。
【００７５】
このとき、カーネル＃１は、Ｎ×Ｍ＝５×１＝５［Ｍバイト］となる０ｘ０１００００００〜０ｘ０１０４ｆｆｆｆをプロテクト領域１２４として確保する。続けて、カーネル＃１は、０ｘ０５００００００〜０ｘｆｆｆｆｆｆｆｆをユーザ領域１２１として確保する。また、カーネル＃１は、ユーザ領域１２１からプロテクト領域１２４へのオフセットアドレスとして、０ｘ０５００００００−０ｘ０１００００００＝０ｘ０４００００００を記憶する。なお、Ｍ＝１［Ｍバイト］であるため、１つのアプリがアクセスするアドレス範囲となるマスクアドレスは、０ｘ００００ｆｆｆｆとなる。本実施の形態では、１つのアプリがアクセスするアドレス範囲は、説明の簡略化のため、常に固定であることを想定する。
【００７６】
このとき、プロテクト領域１２４は、アプリからはアクセスできない領域となる。このため、たとえば、アプリＡ、アプリＢがＯＳ＃１を通じてプロテクト領域１２４にアクセスしようとした場合、カーネル＃１は、ＯＳ＃１の管理外領域にアクセスすることを示すセグメントエラーを発行することになる。このように、マルチコアプロセッサシステム１００は、プロテクト領域１２４をユーザ領域１２１以外の領域とすることで、低信頼アプリによってプロテクト領域１２４の不正書込を防ぐことができる。
【００７７】
なお、プロテクト領域１２４となる領域は、連続範囲かつ固定でなくてもよく、メモリプロテクトコントローラ１０６が管理可能であれば、分散して確保されてもよいし、マルチコアプロセッサシステム１００の実行中にダイナミックに変化してもよい。本実施の形態では、説明を簡略化するため、プロテクト領域１２４となる領域が連続範囲かつ固定で説明する。
【００７８】
また、マルチコアプロセッサシステム１００は、アプリＡ〜アプリＥが起動される際に、各アプリのコンテキストを格納する領域をユーザ領域１２１内に確保する。具体的に、カーネル＃１は、アプリＡの起動時にアプリＡメモリ領域５０２を確保し、アプリＢの起動時にアプリＢメモリ領域５０３を確保する。また、カーネル＃２は、アプリＣの起動時にアプリＣメモリ領域５０４を確保し、アプリＤの起動時にアプリＤメモリ領域５０５を確保し、アプリＥの起動時にアプリＥメモリ領域５０６を確保する。アプリＡメモリ領域５０２〜アプリＥメモリ領域５０６の先頭アドレスは、それぞれ、０ｘ０５００００００、０ｘ０５０１００００、０ｘ０５０２００００、０ｘ０５０３００００、０ｘ０５０４００００となる。
【００７９】
また、マルチコアプロセッサシステム１００は、高信頼アプリが起動する場合、プロテクト領域１２４内にもメモリ領域を確保する。具体的に、カーネル＃１から指示を受けたハイパーバイザ＃１が、アプリＡの起動時にアプリＡメモリ領域５０７を確保する。
【００８０】
アプリＡメモリ領域５０７のアドレスの設定方法として、たとえば、ハイパーバイザ＃１は、アプリＡメモリ領域５０２の先頭アドレスから、ユーザ領域１２１へのオフセットアドレスを減じたアドレスをアプリＡメモリ領域５０７の先頭アドレスに設定する。具体的に、ハイパーバイザ＃１は、アプリＡメモリ領域５０２の先頭アドレス０ｘ０５００００００−オフセットアドレス０ｘ０４００００００＝０ｘ０１００００００をアプリＡメモリ領域５０７の先頭アドレスに設定する。
【００８１】
続けて、ハイパーバイザ＃１は、格納レジスタ４０５＃１＿１に値を設定する。具体的に、ハイパーバイザ＃１は、使用中ビットフィールドに使用中を設定し、アプリＩＤフィールドにアプリＡのアプリＩＤである０ｘ０００１を設定する。続けて、ハイパーバイザ＃１は、マスクアドレスフィールドに０ｘ００００ｆｆｆｆを設定し、プロテクトアドレスフィールドにアプリＡメモリ領域５０７の先頭アドレスである０ｘ０１００００００を設定する。
【００８２】
同様に、ハイパーバイザ＃２は、アプリＣの起動時にアプリＣメモリ領域５０８を確保する。さらに、ハイパーバイザ＃２は、格納レジスタ４０５＃２＿１に値を設定する。具体的に、ハイパーバイザ＃２は、使用中ビットフィールドに使用中を設定し、アプリＩＤフィールドにアプリＣのアプリＩＤである０ｘ０００３を設定する。続けて、ハイパーバイザ＃２は、マスクアドレスフィールドに０ｘ００００ｆｆｆｆを設定し、プロテクトアドレスフィールドにアプリＣメモリ領域５０８の先頭アドレスである０ｘ０１０２００００を設定する。
【００８３】
上述の段階で、マルチコアプロセッサシステム１００はアプリの起動の段階を終え、実際に動作する状態に遷移する。ＣＰＵ＃１は、アプリＡ、アプリＢ、アプリＡ、…、の順でアプリを実行する。アプリ切替イベントが発生し、ＣＰＵ＃１がアプリＡを実行するときに、アプリＡは高信頼ホワイトリスト３０１に登録されているため、カーネル＃１は、アクセス形態を２重アクセス形態に設定するようにハイパーバイザ＃１に指示する。このとき、カーネル＃１は、切替後のアプリＩＤも指示内容に含める。
【００８４】
指示を受けたハイパーバイザ＃１は、メモリプロテクトコントローラ１０６＃１に２重アクセス形態を登録する。具体的に、ハイパーバイザ＃１は、メモリプロテクトコントローラ１０６＃１のアクセス形態フラグを２重アクセス形態に設定する。また、ハイパーバイザ＃１は、指示されたアプリＩＤと一致する格納レジスタ４０５＃１の管理番号を、プロテクト領域管理番号フィールドに設定する。このような動作により、マルチコアプロセッサシステム１００は、ＯＳ＃１にてアプリＡ、アプリＢ、…、と切り替えられる動作と同期して、メモリプロテクトコントローラ１０６＃１にて２重アクセス形態、アクセススルー形態、…、と動作する。
【００８５】
なお、この動作により、アプリＡが実行中の場合、マルチコアプロセッサシステム１００は、０ｘ０５００００００および０ｘ０１００００００の２つのアドレス空間にアクセスを行うことになる。２重アクセスによって、バスアクセスのパフォーマンスが劣化する可能性があるが、一般的に、６４［ビット］系のＣＰＵに対し、１２８［ビット］帯域のバス設定が行われるなど、ＣＰＵアクセスの帯域はバスの帯域を全て使用しない粗の状態である。したがって、バス１０５内にて、２つの６４［ビット］のアクセスを１つの１２８［ビット］にまとめるデータパッキング機能と連動することにより、バスアクセスのパフォーマンスの劣化を避けることができる。
【００８６】
同様に、ＣＰＵ＃２は、アプリＣ、アプリＤ、アプリＥ、アプリＣ、…、の順でアプリを実行する。たとえば、ＣＰＵ＃２がアプリＤを実行するとき、アプリＤは高信頼ホワイトリスト３０１に登録されていないため、カーネル＃２は、アプリ切替イベントが発生し、アクセス形態をアクセススルー形態に設定するようにハイパーバイザ＃２に指示する。このとき、カーネル＃２は、切替後のアプリＩＤも指示内容に含める。指示を受けたハイパーバイザ＃２は、メモリプロテクトコントローラ１０６＃２にアクセススルー形態を登録する。具体的に、ハイパーバイザ＃２は、メモリプロテクトコントローラ１０６＃２のアクセス形態フラグをアクセススルー形態に設定する。
【００８７】
次に、図５で説明した動作を行うフローチャートを図６〜図９にて説明する。なお、図６で示す起動時の処理手順の一例を実行する実行主体は、ＣＰＵ＃１〜ＣＰＵ＃ｘのうちいずれのＣＰＵであってもよいが、説明の簡略化のため、ＣＰＵ＃１が実行する場合を想定して説明を行う。また、図７〜図９で示すアプリ切替時の処理手順とエラー時の処理手順を実行する実行主体は、ＣＰＵ＃１〜ＣＰＵ＃ｘの全てのＣＰＵで実行されるが、説明の簡略化のため、ＣＰＵ＃１が実行する場合を想定して説明を行う。
【００８８】
図６は、マルチコアプロセッサシステム１００の起動時の処理手順の一例を示すフローチャートである。カーネル＃１は、ブート開始する（ステップＳ６０１）と、メモリ管理機構を起動する（ステップＳ６０２）。カーネル＃１は、メモリ管理機構により、Ｎ×Ｍ［バイト］のアドレス空間を確保する（ステップＳ６０３）。
【００８９】
確保後、カーネル＃１は、確保されたアドレス空間をハイパーバイザ＃１に通知し（ステップＳ６０４）、通常運用を行い（ステップＳ６０５）、起動時の処理を終了する。なお、通常運用としては、ユーザ領域１２１の確保を行ったり、ブートの初めに起動されるアプリを起動したりする。アドレス空間の通知を受けたハイパーバイザ＃１は、通知されたアドレス空間をプロテクト領域１２４として設定し（ステップＳ６０６）、起動時の処理を終了する。これにより、マルチコアプロセッサシステム１００は、高信頼アプリのメモリ保護領域を確保することができる。
【００９０】
図７、図８では、マルチコアプロセッサシステム１００のアプリ切替時の処理手順の一例を示す。図７では、カーネル＃１の処理手順の一例を示し、図８では、ハイパーバイザ＃１の処理手順の一例を示す。
【００９１】
図７は、マルチコアプロセッサシステム１００のアプリ切替時の処理手順の一例を示すフローチャート（その１）である。カーネル＃１は、イベントが発生したか否かを判断する（ステップＳ７０１）。イベントが発生していない場合（ステップＳ７０１：イベント発生なし）、カーネル＃１は、一定時間後に、ステップＳ７０１を再度実行する。なお、カーネル＃１は、一定時間にカーネル＃１の他の処理を実行してもよい。
【００９２】
アプリ起動イベントが発生した場合（ステップＳ７０１：アプリ起動イベント）、カーネル＃１は、起動したアプリが高信頼ホワイトリスト３０１に登録されているか否かを判断する（ステップＳ７０２）。登録されている場合（ステップＳ７０２：Ｙｅｓ）、カーネル＃１は、ハイパーバイザ＃１に管理番号の追加指示を通知する（ステップＳ７０４）。なお、ステップＳ７０４の処理にて、カーネル＃１は、起動したアプリのアプリＩＤを指示内容に含める。
【００９３】
通知後、カーネル＃１は、通常時の処理を実行し（ステップＳ７０３）、ステップＳ７０１の処理に移行する。登録されていない場合（ステップＳ７０２：Ｎｏ）、カーネル＃１は、ステップＳ７０３の処理に移行する。なお、アプリ起動イベントの通常時の処理としては、たとえば、起動したアプリのコンテキストを格納する領域をユーザ領域１２１内に確保する処理等である。
【００９４】
アプリ終了イベントが発生した場合（ステップＳ７０１：アプリ終了イベント）、カーネル＃１は、終了したアプリが高信頼ホワイトリスト３０１に登録されているか否かを判断する（ステップＳ７０５）。登録されている場合（ステップＳ７０５：Ｙｅｓ）、カーネル＃１は、ハイパーバイザ＃１に管理番号の解放指示を通知する（ステップＳ７０６）。なお、ステップＳ７０６の処理にて、カーネル＃１は、終了したアプリのアプリＩＤを指示内容に含める。
【００９５】
通知後、または、登録されていない場合（ステップＳ７０５：Ｎｏ）、カーネル＃１は、ステップＳ７０３の処理に移行する。なお、アプリ終了イベントの通常時の処理としては、たとえば、ユーザ領域１２１内に確保されている、終了したアプリのコンテキストを格納する領域を解放する処理等である。
【００９６】
アプリ切替イベントが発生した場合（ステップＳ７０１：アプリ切替イベント）、カーネル＃１は、切替後のアプリが高信頼ホワイトリスト３０１に登録されているか否かを判断する（ステップＳ７０７）。登録されている場合（ステップＳ７０７：Ｙｅｓ）、カーネル＃１は、ハイパーバイザ＃１に２重アクセス形態指示を通知する（ステップＳ７０８）。なお、ステップＳ７０８の処理にて、カーネル＃１は、切替後のアプリのアプリＩＤを指示内容に含める。通知後、カーネル＃１は、ステップＳ７０３の処理に移行する。登録されていない場合（ステップＳ７０７：Ｎｏ）、カーネル＃１は、ハイパーバイザ＃１にアクセススルー形態指示を通知する（ステップＳ７０９）。通知後、カーネル＃１は、ステップＳ７０３の処理に移行する。
【００９７】
なお、アプリ切替イベントの通常時の処理としては、たとえば、ディスパッチ処理がある。ディスパッチ処理とは、ＣＰＵのレジスタ等を切替前のアプリのコンテキストを格納する領域に退避し、切替後のアプリのコンテキストを格納する領域に退避されていたレジスタの値をＣＰＵのレジスタに設定する。
【００９８】
これにより、マルチコアプロセッサシステム１００は、アプリの起動、終了、切替といったイベントに対して、メモリプロテクトコントローラ１０６への設定変更を指示することができる。
【００９９】
図８は、マルチコアプロセッサシステム１００のアプリ切替時の処理手順の一例を示すフローチャート（その２）である。なお、図８では、ハイパーバイザ＃１がメモリプロテクトコントローラ１０６＃１内の制御レジスタ４０４＃１、格納レジスタ４０５＃１を設定することを想定している。したがって、各ステップの説明において、説明の簡略化のため、設定先のレジスタがメモリプロテクトコントローラ１０６＃１内のレジスタであるという記述を省略する。
【０１００】
ハイパーバイザ＃１は、指示内容を確認する（ステップＳ８０１）。指示内容が管理番号の追加指示である場合（ステップＳ８０１：管理番号の追加指示）、ハイパーバイザ＃１は、格納レジスタ４０５＃１＿１〜格納レジスタ４０５＃１＿ｙのうち、未使用の格納レジスタ４０５＃１が存在するか否かを判断する（ステップＳ８０２）。
【０１０１】
未使用の格納レジスタ４０５＃１が存在する場合（ステップＳ８０２：Ｙｅｓ）、ハイパーバイザ＃１は、発見された格納レジスタ４０５＃１の使用中ビットフィールドを使用中に設定する（ステップＳ８０３）。続けて、ハイパーバイザ＃１は、発見された格納レジスタ４０５＃１のアプリＩＤフィールドを指示内容に含まれていたアプリＩＤに設定する（ステップＳ８０４）。さらに、ハイパーバイザ＃１は、発見された格納レジスタ４０５＃１のプロテクトアドレスフィールドに未割当のアドレスを設定し（ステップＳ８０５）、ステップＳ８０１の処理に移行する。格納レジスタ４０５＃１が存在しない場合（ステップＳ８０２：Ｎｏ）、ハイパーバイザ＃１は、ステップＳ８０１の処理に移行する。
【０１０２】
なお、ステップＳ８０５の処理での未割当のアドレスとは、プロテクト領域１２４内で、他の高信頼アプリのメモリ領域として割り当てられていないメモリ領域のアドレスである。また、ステップＳ８０３〜ステップＳ８０５の処理にて、マスクアドレスフィールドの記述がないが、本実施の形態におけるマスクアドレスは常に固定値であることを想定している。したがって、マスクアドレスフィールドの設定箇所として、たとえば、前述のステップＳ６０６にて、ハイパーバイザ＃１は、格納レジスタ４０５＃１＿１〜格納レジスタ４０５＃１＿ｙのマスクアドレスフィールドに０ｘ００００ｆｆｆｆを設定する。
【０１０３】
指示内容が管理番号の解放指示である場合（ステップＳ８０１：管理番号の解放指示）、ハイパーバイザ＃１は、格納レジスタ４０５＃１＿１〜格納レジスタ４０５＃１＿ｙのうち、アプリＩＤフィールドが指示内容に含まれていたアプリＩＤと一致する格納レジスタ４０５＃１を選択する（ステップＳ８０６）。選択後、ハイパーバイザ＃１は、選択された格納レジスタ４０５＃１のプロテクトアドレスフィールドの値を未割当のアドレスに設定する（ステップＳ８０７）。続けて、ハイパーバイザ＃１は、選択された格納レジスタ４０５＃１の使用中ビットフィールドを未使用に設定し（ステップＳ８０８）、ステップＳ８０１の処理に移行する。
【０１０４】
指示内容が２重アクセス形態指示である場合（ステップＳ８０１：２重アクセス形態指示）、ハイパーバイザ＃１は、アプリＩＤフィールドが指示内容に含まれていたアプリＩＤと一致する格納レジスタ４０５＃１の管理番号を、プロテクト管理番号フィールドに設定する（ステップＳ８０９）。続けて、ハイパーバイザ＃１は、アクセス形態フラグを２重アクセス形態に設定し（ステップＳ８１０）、ステップＳ８０１の処理に移行する。
【０１０５】
指示内容がアクセススルー形態指示である場合（ステップＳ８０１：アクセススルー形態指示）、ハイパーバイザ＃１は、アクセス形態フラグをアクセススルー形態に設定し（ステップＳ８１１）、ステップＳ８０１の処理に移行する。このように、マルチコアプロセッサシステム１００は、アプリの起動、終了、切替といったイベントに対応してメモリプロテクトコントローラ１０６への設定を変更するため、アプリの各イベントに同期してアクセス形態を変更することができる。
【０１０６】
続けて、図９では、エラー時の処理手順の一例を説明する。図９で示すフローチャートでは、ＣＰＵ＃２で実行している低信頼アプリの動作検証が不十分であったため、低信頼アプリが他のメモリ領域へ書き込んだ結果、障害が発生した場合を想定している。不具合によって引き起こされる状態には２種類ある。
【０１０７】
１つ目の状態は、単純なプログラムエラーで高信頼アプリが終了する状態である。たとえば、ＯＳ＃１で実行している高信頼アプリに対してエラーが発生した場合、ＯＳ＃１はエラーの発生を検出し、ハイパーバイザ＃１に通知することが可能である。２つ目の状態は、ＯＳ＃１がハングする場合である。ＯＳ＃１がハングすると高信頼アプリの障害状態を検出できない。したがって、ＯＳ＃１と独立で動作しているハイパーバイザ＃１が、周期監視によりＯＳ＃１がハングしているかどうかを検出する。
【０１０８】
図９は、マルチコアプロセッサシステム１００のエラー時の処理手順の一例を示すフローチャートである。カーネル＃２は、低信頼アプリを実行する（ステップＳ９０１）。この実行により、ユーザ領域１２１に不正書込が行われ、障害が発生した場合を想定する。
【０１０９】
不正書込により、アプリが強制終了するなどの軽微な障害が発生した場合、カーネル＃１は、セグメントエラーを検出する（ステップＳ９０２）。検出後、カーネル＃１は、マルチコアプロセッサシステム１００を一時停止し（ステップＳ９０３）、ハイパーバイザ＃１へリカバリ通知を指示する（ステップＳ９０４）。
【０１１０】
ＯＳハング等の重大な障害が発生し、周期監視より検出した場合、または、リカバリ通知を指示された場合、ハイパーバイザ＃１は、実行中アプリが高信頼ホワイトリスト３０１に登録されているか否かを判断する（ステップＳ９０５）。登録されている場合（ステップＳ９０５：Ｙｅｓ）、ハイパーバイザ＃１は、プロテクト領域１２４内の実行中アプリのメモリ領域とユーザ領域１２１内の実行中アプリのメモリ領域のデータを比較する（ステップＳ９０６）。
【０１１１】
続けて、ハイパーバイザ＃１は、比較結果が一致したか否かを判断する（ステップＳ９０７）。一致しない場合（ステップＳ９０７：Ｎｏ）、ハイパーバイザ＃１は、ユーザ領域１２１内の実行中アプリのデータを復元する（ステップＳ９０８）。具体的に、ハイパーバイザ＃１は、比較結果の差分をユーザ領域１２１内の実行中アプリのメモリ領域に上書きする。これにより、不正書込が行われたデータが正常なデータに復元することになる。
【０１１２】
高信頼ホワイトリスト３０１に登録されていない場合（ステップＳ９０５：Ｎｏ）、比較結果が一致した場合（ステップＳ９０７：Ｙｅｓ）、または、データ復元後、ハイパーバイザ＃１は、ＯＳ＃１がハング中か否かを判断する（ステップＳ９０９）。ハング中である場合（ステップＳ９０９：Ｙｅｓ）、ハイパーバイザ＃１は、ＯＳ＃１のウォームスタートを実行し（ステップＳ９１０）、エラー時の処理を終了する。具体的なウォームスタートの方法としては、チェックポイントリスタート技術や、ハイバネーション技術を適用することができる。
【０１１３】
ハング中でない場合（ステップＳ９０９：Ｎｏ）、ハイパーバイザ＃１は、カーネル＃１にマルチコアプロセッサシステム１００の一時停止解除を通知し（ステップＳ９１１）、エラー時の処理を終了する。一時停止解除を受け付けたカーネル＃１は、マルチコアプロセッサシステム１００の一時停止を解除し（ステップＳ９１２）、エラー時の処理を終了する。このように、マルチコアプロセッサシステム１００は、不正書込によるメモリ破壊が原因で高信頼アプリにエラーが発生した場合、データを復元し動作を続行することができる。
【０１１４】
以上説明したように、マルチコアプロセッサシステムによれば、高信頼アプリがアクセスする第１メモリ領域とは異なる第２メモリ領域を確保し、同一の内容を書き込む。これにより、マルチコアプロセッサシステムは、低信頼アプリが第１メモリ領域を破壊し障害が発生しても第２メモリ領域を使用してリカバリできるため、高信頼アプリと低信頼アプリを混載して実行できる。
【０１１５】
また、本実施の形態にかかるマルチコアプロセッサシステムが実行するソフトウェア保護方法は、シングルコアプロセッサシステムでのソフトウェア資産を、安全にマルチコアプロセッサシステム環境に継承することができる。また、本実施の形態にかかるマルチコアプロセッサシステムは、通常動作状態において、たとえば、高信頼アプリ実行中に低信頼アプリを実行させないなどといった、バイアスのかかった不利なスケジューリングが発生することなく運用することができる。また、本実施の形態にかかるマルチコアプロセッサシステムは、障害が発生した場合にリカバリ処理が発生し、通常動作状態では負荷のかかる処理を実行しないため、全体のパフォーマンスが劣化することはない。
【０１１６】
また、マルチコアプロセッサシステムは、所定のアプリを格納するリストにアクセス可能であり、実行されるアプリとリストに格納されたアプリとを比較してもよい。これにより、マルチコアプロセッサシステムは、実行されるアプリが高信頼アプリか否かを判断することができる。
【０１１７】
また、マルチコアプロセッサシステムは、実行されるアプリとリストに格納されたアプリが一致する場合、第１メモリ領域と第２メモリ領域とにアクセスするようにアプリを実行するＣＰＵに対応するメモリプロテクトコントローラに登録してもよい。これにより、マルチコアプロセッサシステムは、高信頼アプリのデータを保護することができる。
【０１１８】
また、マルチコアプロセッサシステムは、実行されるアプリとリストに格納されたアプリが一致しない場合、第１メモリ領域にアクセスするようにアプリを実行するＣＰＵに対応するメモリプロテクトコントローラに登録してもよい。これにより、マルチコアプロセッサシステムは、データの保護を行わなくてよい低信頼アプリについてはデータを保護せず、データ保護用に確保したプロテクト領域を有効に使用することができる。
【０１１９】
また、マルチコアプロセッサシステムは、自システムの異常検出に応答して、第１メモリ領域と第２メモリ領域との比較結果に基づいて第１メモリ領域を復元してもよい。これにより、マルチコアプロセッサシステムは、障害があったアプリをリカバリすることができる。
【０１２０】
また、マルチコアプロセッサシステムは、マルチコアプロセッサシステム環境での動作検証が行われたアプリを高信頼アプリとして保護してもよい。低信頼のアプリは、第１メモリ領域を自ら破壊してしまう場合があり、このとき、メモリプロテクトコントローラによって第２メモリ領域にデータを保護していても、第２メモリ領域も破壊する結果となる。この状態で、第１メモリ領域のデータを復元しても、破壊されたデータで上書きされてしまい、マルチコアプロセッサシステムは、リカバリすることができない。したがって、マルチコアプロセッサシステムは、不具合がないと検証された高信頼アプリを対象とすることで、低信頼アプリの動作によって発生した高信頼アプリの障害をリカバリすることができる。
【０１２１】
なお、本実施の形態で説明したマルチコアプロセッサシステムが実行するソフトウェア保護方法では、対象がアプリである場合に対して説明していたが、対象がライブラリであっても本実施の形態を適用することができる。
【０１２２】
なお、本実施の形態で説明したマルチコアプロセッサシステムが実行するソフトウェア保護方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。また、ソフトウェア保護方法を実行するソフトウェア保護プログラムは、ハードディスク、ＣＤ−ＲＯＭ、ＤＶＤ、メモリカード等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またソフトウェア保護プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１２３】
また、本実施の形態で説明したメモリプロテクトコントローラ１０６は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、たとえば、上述したメモリプロテクトコントローラ１０６の機能（記憶部４０１〜変換部４０３）をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、メモリプロテクトコントローラ１０６を製造することができる。
【符号の説明】
【０１２４】
＃１、＃２  ＣＰＵ
１００  マルチコアプロセッサシステム
１０４  メモリ
１０５  バス
１０６  メモリプロテクトコントローラ
１１１  低信頼アプリ
１１２  高信頼アプリ
１２１  ユーザ領域
１２２  低信頼アプリメモリ領域
１２３  高信頼アプリメモリ領域
１２４  プロテクト領域
１２５  高信頼アプリメモリ領域
３０１  高信頼ホワイトリスト
３１１  確保部
３１２  検出部
３１３  比較部
３１４  通知部
３１５  登録部
３１６  検出部
３１７  検出部
３１８  比較部
３１９  復元部
【図１】
2012131884.tif 000003
【図２】
2012131884.tif 000004
【図３】
2012131884.tif 000005
【図４】
2012131884.tif 000006
【図５】
2012131884.tif 000007
【図６】
2012131884.tif 000008
【図７】
2012131884.tif 000009
【図８】
2012131884.tif 000010
【図９】
2012131884.tif 000011
【図１０】
2012131884.tif 000012
【図１１】
2012131884.tif 000013
【国際調査報告】
2012131884.tif 000014
2012131884.tif 000015
2012131884.tif 000016
2012131884.tif 000017