複数のCPUと、メモリと、前記複数のCPUと前記メモリとの間に配置されるメモリプロテクトコントローラと、を含み、前記メモリプロテクトコントローラは、アプリケーション実行時に前記複数のCPUのアクセス要求によって第1メモリ領域にアクセスするとともに、システムブート時に確保された第2メモリ領域にアクセスすることを特徴とするマルチコアプロセッサシステム。所定のアプリケーションのリストを格納するテーブルと、実行されるアプリケーションと前記リストのアプリケーションとを比較する比較部と、を含むことを特徴とする請求項1に記載のマルチコアプロセッサシステム。比較結果が一致を示すとき、前記実行されるアプリケーションについて、前記第1メモリ領域と前記第2メモリ領域とをアクセスする指示を登録することを特徴とする請求項2に記載のマルチコアプロセッサシステム。比較結果が不一致を示すとき、前記実行されるアプリケーションについて、前記第1メモリ領域のみをアクセスする指示を登録することを特徴とする請求項2に記載のマルチコアプロセッサシステム。自システムの異常の検出に応答して、前記実行されるアプリケーションが実行中であるときに前記第1メモリ領域と前記第2メモリ領域との比較結果に基づいて前記第1メモリ領域を復元することを特徴とする請求項1乃至請求項4の何れか一に記載のマルチコアプロセッサシステム。前記所定のアプリケーションは、マルチコアプロセッサシステム環境での動作検証が行われたアプリケーションであることを特徴とする請求項1乃至請求項5の何れか一に記載のマルチコアプロセッサシステム。前記複数のCPUの数がNNは2以上の整数であり、アプリケーション実行時に割り当てられる前記メモリのメモリ領域がMMは1以上の整数バイトであるとき、前記第2メモリ領域の大きさはN×Mであることを特徴とする請求項1乃至請求項6の何れか一に記載のマルチコアプロセッサシステム。複数のCPUと、メモリと、前記複数のCPUと前記メモリとの間に配置されるメモリプロテクトコントローラと、を含み、前記メモリプロテクトコントローラは、アクセス形態情報が第1アクセス形態を示す場合には、アプリケーション実行において第1メモリ領域へのアクセスと同様に第2メモリ領域をアクセスし、アクセス形態情報が第2アクセス形態を示す場合には、アプリケーション実行において前記第1メモリ領域のみをアクセスすることを特徴とするマルチコアプロセッサシステム。前記アプリケーションとリストに登録されるアプリケーションとの比較結果に基づいて前記アクセス形態情報が設定されることを特徴とする請求項8に記載のマルチコアプロセッサシステム。前記比較結果が一致を示すとき、前記アクセス形態情報が第1アクセス形態に設定され、前記比較結果が不一致を示すとき、前記アクセス形態情報が第2アクセス形態に設定されることを特徴とする請求項9に記載のマルチコアプロセッサシステム。上述した従来技術を適用し、高信頼アプリ、低信頼アプリを実行する場合、マルチコアプロセッサシステムは、高信頼アプリ、低信頼アプリを分割して運用することになる。したがって、従来技術を適用したマルチコアプロセッサシステムは、高信頼アプリと低信頼アプリを混載して運用することが困難であるという問題があった。本発明は、上述した従来技術による問題点を解消するため、高信頼アプリと低信頼アプリを混載して運用できるマルチコアプロセッサシステムを提供することを目的とする。上述した課題を解決し、目的を達成するため、本発明の一側面によれば、複数のCPUと、メモリと、複数のCPUとメモリとの間に配置されるメモリプロテクトコントローラと、を含み、メモリプロテクトコントローラは、アプリケーション実行時に複数のCPUのアクセス要求によって第1メモリ領域にアクセスするとともに、システムブート時に確保された第2メモリ領域にアクセスするマルチコアプロセッサシステムが提案される。本発明の一側面によれば、高信頼アプリと低信頼アプリを混載して運用できるという効果を奏する。以下に添付図面を参照して、開示のマルチコアプロセッサシステムの実施の形態を詳細に説明する。図1は、本実施の形態にかかるマルチコアプロセッサシステム100の障害発生時の動作例と復元処理の動作例を示す説明図である。図1では、符号101で示す説明図にて、マルチコアプロセッサシステム100の障害発生時の動作例を示し、符号102で示す説明図にて、マルチコアプロセッサシステム100の復元処理の動作例を示す。図1におけるマルチコアプロセッサシステム100は、複数のコアとなるCPUs103と、メモリ104とを含む。マルチコアプロセッサシステム100は、携帯電話といった携帯端末を想定している。CPUs103には、CPU1とCPU2が含まれる。以下、接尾記号nが付随された記号は、n番目のCPUに対応する記号であることを示している。CPUs103とメモリ104は、バス105で接続されている。また、CPU1、CPU2は、それぞれ、メモリプロテクトコントローラ1061、メモリプロテクトコントローラ1062と通信可能である。メモリプロテクトコントローラ106は、2重アクセス形態とアクセススルー形態という、2つの形態のうち指示された形態に応じた動作をする装置である。2重アクセス形態の指示がある場合、メモリプロテクトコントローラ106は、アプリ本来の要求先アドレスにアクセスしつつ、保護されたメモリ領域内のアドレスにアクセスする機能を有している。また、アクセススルー形態の指示がある場合、メモリプロテクトコントローラ106は、アプリ本来の要求先アドレスにアクセスする。また、マルチコアプロセッサシステム100は、低信頼アプリ111と高信頼アプリ112を実行する。具体的には、CPU1が低信頼アプリ111を実行し、CPU2が高信頼アプリ112を実行する。また、マルチコアプロセッサシステム100は、低信頼アプリ111のコンテキストが格納される領域として、ユーザ領域121内に、低信頼アプリメモリ領域122を確保する。同様に、マルチコアプロセッサシステム100は、高信頼アプリ112のコンテキストが格納される領域として、ユーザ領域121内に、高信頼アプリメモリ領域123を確保する。なお、コンテキストとは、CPUのレジスタの値となるプログラムカウンタ、スタックポインタなどといったアプリが使用するデータである。さらに、マルチコアプロセッサシステム100は、ユーザ領域121とは別の領域となるプロテクト領域124を確保し、プロテクト領域124内に、高信頼アプリメモリ領域125を確保する。高信頼アプリメモリ領域125は、高信頼アプリメモリ領域123と同一のデータが格納される。同一のデータの格納方法として、CPU2は、高信頼アプリ112が実行するタイミングで、メモリプロテクトコントローラ1062に2重アクセス形態の登録を行う。2重アクセス形態となっているメモリプロテクトコントローラ1062は、ライトアクセスが発生した場合、書き込み内容を高信頼アプリメモリ領域123に書き込みつつ、同内容を高信頼アプリメモリ領域125にも書き込む。符号101で示す説明図では、このように高信頼アプリメモリ領域123が保護されている状態で、低信頼アプリ111が不正書込を行い、高信頼アプリメモリ領域123のデータを破壊した場合を想定している。CPU2は、高信頼アプリ112を実行する際に、高信頼アプリメモリ領域123を読み込んで実行しようとするが、高信頼アプリメモリ領域123のデータは正しい値を示しておらず、高信頼アプリ112が強制終了する。たとえば、高信頼アプリメモリ領域123のプログラムカウンタが不正なアドレスに書き換えられた場合、CPU2は、不正なアドレスの値を実行コードとして実行しようとし、高信頼アプリ112が強制終了する。なお、不正書込が行われることによって高信頼アプリ112が強制終了する場合以外に、OSがハングする場合もある。OSがハングする場合の動作については、図9にて説明する。次に、符号102で示す説明図では、データ破壊後の復元処理を示している。CPU2は、高信頼アプリ112に対してエラーが発生したことを検出すると、高信頼アプリ112が実行中であったか否かを判定する。高信頼アプリ112が実行中であった場合、CPU2は、高信頼アプリメモリ領域123と高信頼アプリメモリ領域125を比較し、差分が存在する場合、高信頼アプリメモリ領域123を高信頼アプリメモリ領域125で上書きする。これにより、不正書込が行われたデータが正常なデータに復元し、CPU2は、高信頼アプリ112を続行することができるため、高信頼アプリ112を保護することができる。マルチコアプロセッサシステム100のハードウェア図2は、マルチコアプロセッサシステム100のハードウェア例を示すブロック図である。図2において、マルチコアプロセッサシステム100は、CPUを複数搭載するCPUs103と、ROMRead‐OnlyMemory201と、RAMRandomAccessMemory202と、を含む。また、マルチコアプロセッサシステム100は、フラッシュROM203と、フラッシュROMコントローラ204と、フラッシュROM205と、を含む。なお、メモリ104は、RAM202の全てであってもよいし、または一部であってもよい。さらに、メモリ104は、ROM201、フラッシュROM203、フラッシュROM205を含んでいてもよい。また、マルチコアプロセッサシステム100は、ユーザやその他の機器との入出力装置として、ディスプレイ206と、I/FInterface207と、キーボード208と、を含む。また、各部はバス105によってそれぞれ接続されている。ここで、CPUs103は、マルチコアプロセッサシステム100の全体の制御を司る。CPUs103は、シングルコアのプロセッサを並列して接続した全てのCPUを指している。CPUs103は、CPU1~CPUxを含む。なお、xは2以上の整数である。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、シングルコアのプロセッサであるCPUが並列されている形態を例にあげて説明する。また、CPU1~CPUxは、それぞれ、メモリプロテクトコントローラ106と通信可能である。さらに、CPU1~CPUxは、それぞれ専用のキャッシュメモリを有してもよい。ROM201は、ブートプログラムなどのプログラムを記憶している。RAM202は、CPUs103のワークエリアとして使用される。フラッシュROM203は、OSOperatingSystemなどのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、OSを更新する場合、マルチコアプロセッサシステム100は、I/F207によって新しいOSを受信し、フラッシュROM203に格納されている古いOSを、受信した新しいOSに更新する。フラッシュROMコントローラ204は、CPUs103の制御にしたがってフラッシュROM205に対するデータのリード/ライトを制御する。フラッシュROM205は、フラッシュROMコントローラ204の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム100を使用するユーザがI/F207を通して取得した画像データ、映像データや、本実施の形態にかかるソフトウェア保護方法を実行するプログラムが格納されていてもよい。フラッシュROM205は、たとえば、メモリカード、SDカードなどを採用することができる。ディスプレイ206は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。たとえば、ディスプレイ206は、TFT液晶ディスプレイなどを採用することができる。I/F207は、通信回線を通じてLANLocalAreaNetwork、WANWideAreaNetwork、インターネットなどのネットワーク209に接続され、ネットワーク209を介して他の装置に接続される。そして、I/F207は、ネットワーク209と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F207には、たとえばモデムやLANアダプタなどを採用することができる。キーボード208は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード208は、タッチパネル式の入力パッドやテンキーなどであってもよい。マルチコアプロセッサシステム100の機能例次に、マルチコアプロセッサシステム100の機能例について説明する。図3は、マルチコアプロセッサシステム100の機能例を示すブロック図である。なお、マルチコアプロセッサシステム100は、各機能からアクセスされる記憶領域として、高信頼ホワイトリスト301にアクセス可能である。マルチコアプロセッサシステム100は、確保部311と検出部312と比較部313と、通知部314と、登録部315と、検出部316と、検出部317と、比較部318と、復元部319と、を含む。この制御部となる機能確保部311~復元部319は、記憶装置に記憶されたプログラムをCPU1~CPUxが実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図2に示したROM201、RAM202、フラッシュROM203、フラッシュROM205などである。または、I/F207を経由して他のCPUが実行することにより、その機能を実現してもよい。また、図3では、確保部311は、高信頼アプリ112を実行するCPU2の機能となっているが、CPU1、CPU3~CPUxのうちいずれか一つのCPUの機能であってもよい。また、検出部312~復元部319は、CPU1~CPUxの全てのCPUに含まれる機能であってもよい。なお、CPU2は、ハイパーバイザ2、OS2、カーネル2を実行する。ハイパーバイザ2は、CPU2などのハードウェア上で直接動作するプログラムである。ハイパーバイザ2は、CPU2内のレジスタを直接参照したり、CPU2内のレジスタの情報を読み出したり、CPU2内のレジスタの情報を書き換えたりする特権命令を実行することができるプログラムである。カーネル2は、OS2の中核の機能であり、たとえば、マルチコアプロセッサシステム100のリソースを管理し、スレッドなどのソフトウェアがハードウェアにアクセスできるようにする。また、図示していないが、OS2は、CPU2を制御するプログラムである。たとえば、マルチコアプロセッサシステム100内のリソースにアクセスするライブラリ、APIApplicationProgrammingInterface等をアプリに提供する。なお、図示していないが、CPU1、CPU3~CPUxも、ハイパーバイザ、OS、カーネルを実行する。確保部311~通知部314、検出部316は、カーネル2の機能に含まれ、登録部315、検出部317~復元部319はハイパーバイザ2の機能に含まれる。高信頼ホワイトリスト301は、所定のアプリを登録するリストである。登録される所定のアプリとは、マルチコアプロセッサシステム100での動作検証が行われた高信頼アプリ112である。たとえば、高信頼アプリ112は、マルチコアプロセッサシステム100に予めプリインストールされているアプリである。また、マルチコアプロセッサシステム100を製造するメーカ、ネットワーク209を提供する通信キャリア等が提供するアプリを高信頼アプリとして登録してもよい。たとえば、マルチコアプロセッサシステム100は、ネットワーク209からアプリをダウンロードした際に、メーカまたは通信キャリアが提供することを示す識別情報が付随していた場合、ダウンロードしたアプリを高信頼ホワイトリスト301に登録してもよい。なお、高信頼ホワイトリスト301に登録される内容は、たとえば、アプリの名称であってもよいし、またファイルシステムが存在する場合、アプリのプログラムが格納されたファイルパスであってもよい。確保部311は、システムブート時に、アプリ実行時に複数のCPUがアクセスする第1メモリ領域に対応するとともに、複数のCPUが第1メモリ領域にアクセスするときに同様にアクセスされる第2メモリ領域を確保する機能を有する。なお、第1メモリ領域は、実行中アプリのアクセス先となるメモリ領域であり、図3で示すユーザ領域121となる。また、第2メモリ領域は、ユーザ領域121のデータを保護する領域となるプロテクト領域124となる。また、第2メモリが確保されるタイミングとしては、システムブート時であってもよいし、アプリが起動されるときであってもよい。また、確保部311は、マルチコアプロセッサシステム100での同時に実行するアプリの数がNであり、アプリ実行時にて割り当てられるメモリ領域がM[バイト]である場合、第2メモリ領域の大きさをN×M[バイト]で確保してもよい。たとえば、確保部311は、N=5、M=1[Mバイト]である場合、N×M=5×1=5[Mバイト]の領域をユーザ領域121として確保する。また、Nの値として、本実施の形態にかかるマルチコアプロセッサシステム100は、携帯電話等を想定しており、多数のアプリを同時起動することを想定していない。Nの最大値としては、たとえば、8、16といった値になる。また、Nは、CPUs103の数であってもよい。なお、確保された領域のアドレスは、CPU2のレジスタ、キャッシュメモリ、RAM202等の記憶領域に記憶される。検出部312は、アプリが起動したというイベント、アプリが終了したというイベント、またはアプリが切り替えられたというイベントのうち、いずれかのイベントを検出する機能を有する。たとえば、検出部312は、高信頼アプリ112が起動されたというイベントを検出する。なお、検出したイベントは、CPU2のレジスタ、キャッシュメモリ、RAM202等の記憶領域に記憶される。比較部313は、検出部312によってイベントが検出された場合、実行されるアプリと所定のアプリのリストに登録されたアプリとを比較する機能を有する。たとえば、比較部313は、実行される高信頼アプリ112と高信頼ホワイトリスト301に登録されたアプリを比較する。なお、比較結果は、CPU2のレジスタ、キャッシュメモリ、RAM202等の記憶領域に記憶される。通知部314は、比較部313による比較結果が一致を示すとき、実行されるアプリからのアクセスについて、メモリプロテクトコントローラ1062が第1メモリ領域と第2メモリ領域とにアクセスする指示をハイパーバイザ2に通知する機能を有する。たとえば、高信頼アプリ112と高信頼ホワイトリスト301に登録されたアプリが一致を示す場合を想定する。このとき、通知部314は、高信頼アプリ112からのアクセスについて、メモリプロテクトコントローラ1062が高信頼アプリメモリ領域123と高信頼アプリメモリ領域125とにアクセスする指示をハイパーバイザ2に通知する。また、通知部314は、比較部313による比較結果が不一致を示すとき、実行されるアプリからのアクセスについて、メモリプロテクトコントローラ1062が第1メモリ領域にアクセスする指示をハイパーバイザ2に通知してもよい。また、通知部314は、アプリが起動され、起動されたアプリの比較部313による比較結果が一致を示すとき、第2メモリ領域内に起動されたアプリ用の領域を追加する指示を通知してもよい。また、通知部314は、アプリが終了し、終了したアプリの比較部313による比較結果が一致を示すとき、第2メモリ領域内の終了したアプリ用の領域を解放する指示を通知してもよい。なお、通知された内容は、CPU2のレジスタ、キャッシュメモリ、RAM202等の記憶領域に記憶されてもよい。登録部315は、通知部314によって通知された指示をメモリプロテクトコントローラ1062に登録する機能を有する。たとえば、登録部315は、第1アクセス形態である2重アクセス形態の指示が通知された場合、メモリプロテクトコントローラ1062に2重アクセス形態を登録する。具体的に、登録部315は、メモリプロテクトコントローラ1062内のレジスタに登録する。また、登録部315は、第2アクセス形態であるアクセススルー形態の指示が通知された場合、メモリプロテクトコントローラ1062にアクセススルー形態を登録する。なお、具体的な登録内容は、図4にて説明する。なお、登録を行ったという情報は、CPU2のレジスタ、キャッシュメモリ、RAM202等の記憶領域に記憶されてもよい。検出部316は、自CPU内のアプリが強制終了したことを検出する機能を有する。たとえば、検出部316は、アクセス不可能なメモリにアクセスしたことを示すセグメントエラー等が発生し、高信頼アプリ112が強制終了したことを検出する。なお、アプリが強制終了したという情報は、CPU2のレジスタ、キャッシュメモリ、RAM202等の記憶領域に記憶される。検出部317は、OS2がハングしたことを検出する機能を有する。たとえば、検出部317は、OS2を周期監視し、OS2からの応答がない場合、OS2がハングしたことを検出する。なお、ハング中にあるOSは、異常状態となり、要求に対する応答が行えない状態である。OSのハング状態は、カーネルパニックとも呼ばれる。なお、OS2がハングしたという情報は、CPU2のレジスタ、キャッシュメモリ、RAM202等の記憶領域に記憶される。比較部318は、検出部316によるアプリの強制終了が検出された場合、または検出部317によるOS2のハングが検出された場合、第1メモリ領域と第2メモリ領域とを比較する機能を有する。たとえば、比較部318は、高信頼アプリメモリ領域123と高信頼アプリメモリ領域125のデータを比較する。また、比較部318は、実行中のアプリが高信頼ホワイトリスト301に登録されている場合に、第1メモリ領域と第2メモリ領域とを比較してもよい。なお、比較結果は、CPU2のレジスタ、キャッシュメモリ、RAM202等の記憶領域に記憶される。復元部319は、比較部318による比較結果に基づいて、第1メモリ領域を復元する機能を有する。たとえば、復元部319は、比較部318による比較結果が不一致を示すとき、比較結果の差分を第1メモリ領域に上書きすることで、第1メモリ領域を復元する。なお、復元を行ったという結果は、CPU2のレジスタ、キャッシュメモリ、RAM202等の記憶領域に記憶されてもよい。図4は、メモリプロテクトコントローラ106の内部の機能例を示す説明図である。図4では、メモリプロテクトコントローラ1061を例にして説明を行うが、メモリプロテクトコントローラ1062~メモリプロテクトコントローラ106xも、メモリプロテクトコントローラ1061と同様の機能を含む。メモリプロテクトコントローラ1061は、記憶部4011、判定部4021、変換部4031を含む。記憶部401は、メモリプロテクトコントローラ106のアクセス形態とアプリに対応するプロテクト領域を記憶する。具体的に、記憶部4011は、制御レジスタ4041と格納レジスタ4051_1~格納レジスタ4051_yを含む。yは1以上の整数である。なお、具体的なyの値としては、CPU1が同時実行可能なアプリの数の最大値でよい。本実施の形態にかかるマルチコアプロセッサシステム100は、携帯電話等を想定しており、パーソナルコンピュータのように多数のアプリを同時実行することを想定していない。したがって、各CPUで同時に起動される際の最大のアプリ数も、多数のアプリを同時起動することを想定していない数となる。さらに、yは、N以下の値となる。たとえば、yは4、または8といった値となる。制御レジスタ4041は、アクセス形態フラグ、プロテクト領域管理番号という2つのフィールドを含む。アクセス形態フラグフィールドには、2箇所のアドレスにアクセスを行う2重アクセス形態、または通常のアクセスを行うアクセススルー形態、のうちいずれかのアクセス形態情報を示す識別子が格納される。たとえば、具体的な識別子として、1が2重アクセス形態を意味してもよい。プロテクト領域管理番号フィールドには、2箇所のアドレスにアクセスを行う場合、格納レジスタ4051_1~格納レジスタ4051_yのうち、どの格納レジスタ4051を適用するかを示す値が格納される。たとえば、プロテクト領域管理番号フィールドに1が格納された場合、変換部4031は、格納レジスタ4051_1の設定を用いて変換を行う。格納レジスタ4051_1~格納レジスタ4051_yは、プロテクト領域をアプリごとに格納するレジスタである。また、格納レジスタ4051_1~格納レジスタ4051_yは、それぞれ、管理番号_1~管理番号_yに対応している。続けて、格納レジスタ4051の各フィールドについて説明を行う。格納レジスタ4051は、使用中ビット、アプリID、マスクアドレス、プロテクトアドレスという4つのフィールドを含む。使用中ビットフィールドには、該当の格納レジスタ4051が使用中か否かを示すビットが格納される。アプリIDフィールドには、CPU1にて実行中のアプリの識別情報が格納される。マスクアドレスフィールドには、アプリのアクセスするメモリ範囲を示すアドレスが格納される。具体的なメモリ範囲の大きさは、OSが有するメモリ管理機構によって決定される。プロテクトアドレスフィールドには、CPU1にて実行中のアプリのプロテクト領域へのアドレスが格納される。なお、制御レジスタ4041、格納レジスタ4051の具体的な設定例は、図5にて後述する。判定部4021は、記憶部4011に記憶されたアクセス形態情報に応じてアドレス変換を行うか否かを判定する機能を有する。具体的には、判定部4021は、アクセス形態フラグフィールドが2重アクセス形態であれば、2箇所のアドレスにアクセスを行い、アクセス形態フラグフィールドがアクセススルー形態であればアドレス変換を行わず、アドレススルーする。変換部4031は、判定部4021により2重アクセス形態であると判定された場合、一方のアクセス先についてアドレス変換を行う機能を有する。具体的には、変換部4031は、プロテクト領域管理番号フィールドに設定された管理番号に対応する格納レジスタ4051のマスクアドレスフィールドと、プロテクトアドレスフィールドとを参照してアドレス変換を行う。たとえば、変換部403は、変換後のアドレスを、下記1式によって変換する。変換後のアドレス=変換前のアドレスマスクアドレスプロテクトアドレス...1具体的に、変換前のアドレスとなるアプリからのアクセス先が、0x05000100であり、マスクアドレスフィールドが0x0000ffffであり、プロテクトアドレスフィールドが0x01000000である場合を想定する。このとき、変換部403は、1にしたがって、以下のように変換する。変換後のアドレス=0x050001000x0000ffff0x01000000⇔変換後のアドレス=0x01000100なお、メモリプロテクトコントローラ1061は、CPU1からのリードリクエストアクセスとライトリクエストアクセスのうち、ライトリクエストアクセスについて2重アクセス形態を行ってもよい。理由として、エラーが発生していない状態で、リードリクエストアクセスに関する2重アクセス形態を行っても同一の値が返ってくるので、変換を行わないアドレスに対するリードアクセスで十分なためである。図5は、メモリプロテクトコントローラ106の登録例を示す説明図である。図5で示すマルチコアプロセッサシステム100は、高信頼ホワイトリスト301に登録されており、高信頼アプリとなるアプリA、アプリCと、高信頼ホワイトリスト301に登録されておらず低信頼アプリとなるアプリB、アプリD、アプリEを実行している。アプリAとアプリBは、CPU1に割り当てられており、アプリC~アプリEは、CPU2に割り当てられている。さらに、CPU1はアプリAを実行しており、CPU2はアプリDを実行している。なお、アプリA~アプリEのアプリIDは、それぞれ、0x0001、0x0002、0x0003、0x0004、0x0005となる。カーネル1は、OSがブートする際に、0x00000000~0x00500000となるメモリ領域をカーネル占有領域501として確保する。続けて、カーネル1は、アプリの動作空間となるユーザ領域121を確保する前に、プロテクト領域124を確保する。たとえば、マルチコアプロセッサシステム100のアプリ同時実行数N=5であり、1つのアプリに対して許容するメモリサイズMを1[Mバイト]と想定する。このとき、カーネル1は、N×M=5×1=5[Mバイト]となる0x01000000~0x0104ffffをプロテクト領域124として確保する。続けて、カーネル1は、0x05000000~0xffffffffをユーザ領域121として確保する。また、カーネル1は、ユーザ領域121からプロテクト領域124へのオフセットアドレスとして、0x05000000-0x01000000=0x04000000を記憶する。なお、M=1[Mバイト]であるため、1つのアプリがアクセスするアドレス範囲となるマスクアドレスは、0x0000ffffとなる。本実施の形態では、1つのアプリがアクセスするアドレス範囲は、説明の簡略化のため、常に固定であることを想定する。このとき、プロテクト領域124は、アプリからはアクセスできない領域となる。このため、たとえば、アプリA、アプリBがOS1を通じてプロテクト領域124にアクセスしようとした場合、カーネル1は、OS1の管理外領域にアクセスすることを示すセグメントエラーを発行することになる。このように、マルチコアプロセッサシステム100は、プロテクト領域124をユーザ領域121以外の領域とすることで、低信頼アプリによってプロテクト領域124の不正書込を防ぐことができる。なお、プロテクト領域124となる領域は、連続範囲かつ固定でなくてもよく、メモリプロテクトコントローラ106が管理可能であれば、分散して確保されてもよいし、マルチコアプロセッサシステム100の実行中にダイナミックに変化してもよい。本実施の形態では、説明を簡略化するため、プロテクト領域124となる領域が連続範囲かつ固定で説明する。また、マルチコアプロセッサシステム100は、アプリA~アプリEが起動される際に、各アプリのコンテキストを格納する領域をユーザ領域121内に確保する。具体的に、カーネル1は、アプリAの起動時にアプリAメモリ領域502を確保し、アプリBの起動時にアプリBメモリ領域503を確保する。また、カーネル2は、アプリCの起動時にアプリCメモリ領域504を確保し、アプリDの起動時にアプリDメモリ領域505を確保し、アプリEの起動時にアプリEメモリ領域506を確保する。アプリAメモリ領域502~アプリEメモリ領域506の先頭アドレスは、それぞれ、0x05000000、0x05010000、0x05020000、0x05030000、0x05040000となる。また、マルチコアプロセッサシステム100は、高信頼アプリが起動する場合、プロテクト領域124内にもメモリ領域を確保する。具体的に、カーネル1から指示を受けたハイパーバイザ1が、アプリAの起動時にアプリAメモリ領域507を確保する。アプリAメモリ領域507のアドレスの設定方法として、たとえば、ハイパーバイザ1は、アプリAメモリ領域502の先頭アドレスから、ユーザ領域121へのオフセットアドレスを減じたアドレスをアプリAメモリ領域507の先頭アドレスに設定する。具体的に、ハイパーバイザ1は、アプリAメモリ領域502の先頭アドレス0x05000000-オフセットアドレス0x04000000=0x01000000をアプリAメモリ領域507の先頭アドレスに設定する。続けて、ハイパーバイザ1は、格納レジスタ4051_1に値を設定する。具体的に、ハイパーバイザ1は、使用中ビットフィールドに使用中を設定し、アプリIDフィールドにアプリAのアプリIDである0x0001を設定する。続けて、ハイパーバイザ1は、マスクアドレスフィールドに0x0000ffffを設定し、プロテクトアドレスフィールドにアプリAメモリ領域507の先頭アドレスである0x01000000を設定する。同様に、ハイパーバイザ2は、アプリCの起動時にアプリCメモリ領域508を確保する。さらに、ハイパーバイザ2は、格納レジスタ4052_1に値を設定する。具体的に、ハイパーバイザ2は、使用中ビットフィールドに使用中を設定し、アプリIDフィールドにアプリCのアプリIDである0x0003を設定する。続けて、ハイパーバイザ2は、マスクアドレスフィールドに0x0000ffffを設定し、プロテクトアドレスフィールドにアプリCメモリ領域508の先頭アドレスである0x01020000を設定する。上述の段階で、マルチコアプロセッサシステム100はアプリの起動の段階を終え、実際に動作する状態に遷移する。CPU1は、アプリA、アプリB、アプリA、...、の順でアプリを実行する。アプリ切替イベントが発生し、CPU1がアプリAを実行するときに、アプリAは高信頼ホワイトリスト301に登録されているため、カーネル1は、アクセス形態を2重アクセス形態に設定するようにハイパーバイザ1に指示する。このとき、カーネル1は、切替後のアプリIDも指示内容に含める。指示を受けたハイパーバイザ1は、メモリプロテクトコントローラ1061に2重アクセス形態を登録する。具体的に、ハイパーバイザ1は、メモリプロテクトコントローラ1061のアクセス形態フラグを2重アクセス形態に設定する。また、ハイパーバイザ1は、指示されたアプリIDと一致する格納レジスタ4051の管理番号を、プロテクト領域管理番号フィールドに設定する。このような動作により、マルチコアプロセッサシステム100は、OS1にてアプリA、アプリB、...、と切り替えられる動作と同期して、メモリプロテクトコントローラ1061にて2重アクセス形態、アクセススルー形態、...、と動作する。なお、この動作により、アプリAが実行中の場合、マルチコアプロセッサシステム100は、0x05000000および0x01000000の2つのアドレス空間にアクセスを行うことになる。2重アクセスによって、バスアクセスのパフォーマンスが劣化する可能性があるが、一般的に、64[ビット]系のCPUに対し、128[ビット]帯域のバス設定が行われるなど、CPUアクセスの帯域はバスの帯域を全て使用しない粗の状態である。したがって、バス105内にて、2つの64[ビット]のアクセスを1つの128[ビット]にまとめるデータパッキング機能と連動することにより、バスアクセスのパフォーマンスの劣化を避けることができる。同様に、CPU2は、アプリC、アプリD、アプリE、アプリC、...、の順でアプリを実行する。たとえば、CPU2がアプリDを実行するとき、アプリDは高信頼ホワイトリスト301に登録されていないため、カーネル2は、アプリ切替イベントが発生し、アクセス形態をアクセススルー形態に設定するようにハイパーバイザ2に指示する。このとき、カーネル2は、切替後のアプリIDも指示内容に含める。指示を受けたハイパーバイザ2は、メモリプロテクトコントローラ1062にアクセススルー形態を登録する。具体的に、ハイパーバイザ2は、メモリプロテクトコントローラ1062のアクセス形態フラグをアクセススルー形態に設定する。次に、図5で説明した動作を行うフローチャートを図6~図9にて説明する。なお、図6で示す起動時の処理手順の一例を実行する実行主体は、CPU1~CPUxのうちいずれのCPUであってもよいが、説明の簡略化のため、CPU1が実行する場合を想定して説明を行う。また、図7~図9で示すアプリ切替時の処理手順とエラー時の処理手順を実行する実行主体は、CPU1~CPUxの全てのCPUで実行されるが、説明の簡略化のため、CPU1が実行する場合を想定して説明を行う。図6は、マルチコアプロセッサシステム100の起動時の処理手順の一例を示すフローチャートである。カーネル1は、ブート開始するステップS601と、メモリ管理機構を起動するステップS602。カーネル1は、メモリ管理機構により、N×M[バイト]のアドレス空間を確保するステップS603。確保後、カーネル1は、確保されたアドレス空間をハイパーバイザ1に通知しステップS604、通常運用を行いステップS605、起動時の処理を終了する。なお、通常運用としては、ユーザ領域121の確保を行ったり、ブートの初めに起動されるアプリを起動したりする。アドレス空間の通知を受けたハイパーバイザ1は、通知されたアドレス空間をプロテクト領域124として設定しステップS606、起動時の処理を終了する。これにより、マルチコアプロセッサシステム100は、高信頼アプリのメモリ保護領域を確保することができる。図7、図8では、マルチコアプロセッサシステム100のアプリ切替時の処理手順の一例を示す。図7では、カーネル1の処理手順の一例を示し、図8では、ハイパーバイザ1の処理手順の一例を示す。図7は、マルチコアプロセッサシステム100のアプリ切替時の処理手順の一例を示すフローチャートその1である。カーネル1は、イベントが発生したか否かを判断するステップS701。イベントが発生していない場合ステップS701:イベント発生なし、カーネル1は、一定時間後に、ステップS701を再度実行する。なお、カーネル1は、一定時間にカーネル1の他の処理を実行してもよい。アプリ起動イベントが発生した場合ステップS701:アプリ起動イベント、カーネル1は、起動したアプリが高信頼ホワイトリスト301に登録されているか否かを判断するステップS702。登録されている場合ステップS702:Yes、カーネル1は、ハイパーバイザ1に管理番号の追加指示を通知するステップS704。なお、ステップS704の処理にて、カーネル1は、起動したアプリのアプリIDを指示内容に含める。通知後、カーネル1は、通常時の処理を実行しステップS703、ステップS701の処理に移行する。登録されていない場合ステップS702:No、カーネル1は、ステップS703の処理に移行する。なお、アプリ起動イベントの通常時の処理としては、たとえば、起動したアプリのコンテキストを格納する領域をユーザ領域121内に確保する処理等である。アプリ終了イベントが発生した場合ステップS701:アプリ終了イベント、カーネル1は、終了したアプリが高信頼ホワイトリスト301に登録されているか否かを判断するステップS705。登録されている場合ステップS705:Yes、カーネル1は、ハイパーバイザ1に管理番号の解放指示を通知するステップS706。なお、ステップS706の処理にて、カーネル1は、終了したアプリのアプリIDを指示内容に含める。通知後、または、登録されていない場合ステップS705:No、カーネル1は、ステップS703の処理に移行する。なお、アプリ終了イベントの通常時の処理としては、たとえば、ユーザ領域121内に確保されている、終了したアプリのコンテキストを格納する領域を解放する処理等である。アプリ切替イベントが発生した場合ステップS701:アプリ切替イベント、カーネル1は、切替後のアプリが高信頼ホワイトリスト301に登録されているか否かを判断するステップS707。登録されている場合ステップS707:Yes、カーネル1は、ハイパーバイザ1に2重アクセス形態指示を通知するステップS708。なお、ステップS708の処理にて、カーネル1は、切替後のアプリのアプリIDを指示内容に含める。通知後、カーネル1は、ステップS703の処理に移行する。登録されていない場合ステップS707:No、カーネル1は、ハイパーバイザ1にアクセススルー形態指示を通知するステップS709。通知後、カーネル1は、ステップS703の処理に移行する。なお、アプリ切替イベントの通常時の処理としては、たとえば、ディスパッチ処理がある。ディスパッチ処理とは、CPUのレジスタ等を切替前のアプリのコンテキストを格納する領域に退避し、切替後のアプリのコンテキストを格納する領域に退避されていたレジスタの値をCPUのレジスタに設定する。これにより、マルチコアプロセッサシステム100は、アプリの起動、終了、切替といったイベントに対して、メモリプロテクトコントローラ106への設定変更を指示することができる。図8は、マルチコアプロセッサシステム100のアプリ切替時の処理手順の一例を示すフローチャートその2である。なお、図8では、ハイパーバイザ1がメモリプロテクトコントローラ1061内の制御レジスタ4041、格納レジスタ4051を設定することを想定している。したがって、各ステップの説明において、説明の簡略化のため、設定先のレジスタがメモリプロテクトコントローラ1061内のレジスタであるという記述を省略する。ハイパーバイザ1は、指示内容を確認するステップS801。指示内容が管理番号の追加指示である場合ステップS801:管理番号の追加指示、ハイパーバイザ1は、格納レジスタ4051_1~格納レジスタ4051_yのうち、未使用の格納レジスタ4051が存在するか否かを判断するステップS802。未使用の格納レジスタ4051が存在する場合ステップS802:Yes、ハイパーバイザ1は、発見された格納レジスタ4051の使用中ビットフィールドを使用中に設定するステップS803。続けて、ハイパーバイザ1は、発見された格納レジスタ4051のアプリIDフィールドを指示内容に含まれていたアプリIDに設定するステップS804。さらに、ハイパーバイザ1は、発見された格納レジスタ4051のプロテクトアドレスフィールドに未割当のアドレスを設定しステップS805、ステップS801の処理に移行する。格納レジスタ4051が存在しない場合ステップS802:No、ハイパーバイザ1は、ステップS801の処理に移行する。なお、ステップS805の処理での未割当のアドレスとは、プロテクト領域124内で、他の高信頼アプリのメモリ領域として割り当てられていないメモリ領域のアドレスである。また、ステップS803~ステップS805の処理にて、マスクアドレスフィールドの記述がないが、本実施の形態におけるマスクアドレスは常に固定値であることを想定している。したがって、マスクアドレスフィールドの設定箇所として、たとえば、前述のステップS606にて、ハイパーバイザ1は、格納レジスタ4051_1~格納レジスタ4051_yのマスクアドレスフィールドに0x0000ffffを設定する。指示内容が管理番号の解放指示である場合ステップS801:管理番号の解放指示、ハイパーバイザ1は、格納レジスタ4051_1~格納レジスタ4051_yのうち、アプリIDフィールドが指示内容に含まれていたアプリIDと一致する格納レジスタ4051を選択するステップS806。選択後、ハイパーバイザ1は、選択された格納レジスタ4051のプロテクトアドレスフィールドの値を未割当のアドレスに設定するステップS807。続けて、ハイパーバイザ1は、選択された格納レジスタ4051の使用中ビットフィールドを未使用に設定しステップS808、ステップS801の処理に移行する。指示内容が2重アクセス形態指示である場合ステップS801:2重アクセス形態指示、ハイパーバイザ1は、アプリIDフィールドが指示内容に含まれていたアプリIDと一致する格納レジスタ4051の管理番号を、プロテクト管理番号フィールドに設定するステップS809。続けて、ハイパーバイザ1は、アクセス形態フラグを2重アクセス形態に設定しステップS810、ステップS801の処理に移行する。指示内容がアクセススルー形態指示である場合ステップS801:アクセススルー形態指示、ハイパーバイザ1は、アクセス形態フラグをアクセススルー形態に設定しステップS811、ステップS801の処理に移行する。このように、マルチコアプロセッサシステム100は、アプリの起動、終了、切替といったイベントに対応してメモリプロテクトコントローラ106への設定を変更するため、アプリの各イベントに同期してアクセス形態を変更することができる。続けて、図9では、エラー時の処理手順の一例を説明する。図9で示すフローチャートでは、CPU2で実行している低信頼アプリの動作検証が不十分であったため、低信頼アプリが他のメモリ領域へ書き込んだ結果、障害が発生した場合を想定している。不具合によって引き起こされる状態には2種類ある。1つ目の状態は、単純なプログラムエラーで高信頼アプリが終了する状態である。たとえば、OS1で実行している高信頼アプリに対してエラーが発生した場合、OS1はエラーの発生を検出し、ハイパーバイザ1に通知することが可能である。2つ目の状態は、OS1がハングする場合である。OS1がハングすると高信頼アプリの障害状態を検出できない。したがって、OS1と独立で動作しているハイパーバイザ1が、周期監視によりOS1がハングしているかどうかを検出する。図9は、マルチコアプロセッサシステム100のエラー時の処理手順の一例を示すフローチャートである。カーネル2は、低信頼アプリを実行するステップS901。この実行により、ユーザ領域121に不正書込が行われ、障害が発生した場合を想定する。不正書込により、アプリが強制終了するなどの軽微な障害が発生した場合、カーネル1は、セグメントエラーを検出するステップS902。検出後、カーネル1は、マルチコアプロセッサシステム100を一時停止しステップS903、ハイパーバイザ1へリカバリ通知を指示するステップS904。OSハング等の重大な障害が発生し、周期監視より検出した場合、または、リカバリ通知を指示された場合、ハイパーバイザ1は、実行中アプリが高信頼ホワイトリスト301に登録されているか否かを判断するステップS905。登録されている場合ステップS905:Yes、ハイパーバイザ1は、プロテクト領域124内の実行中アプリのメモリ領域とユーザ領域121内の実行中アプリのメモリ領域のデータを比較するステップS906。続けて、ハイパーバイザ1は、比較結果が一致したか否かを判断するステップS907。一致しない場合ステップS907:No、ハイパーバイザ1は、ユーザ領域121内の実行中アプリのデータを復元するステップS908。具体的に、ハイパーバイザ1は、比較結果の差分をユーザ領域121内の実行中アプリのメモリ領域に上書きする。これにより、不正書込が行われたデータが正常なデータに復元することになる。高信頼ホワイトリスト301に登録されていない場合ステップS905:No、比較結果が一致した場合ステップS907:Yes、または、データ復元後、ハイパーバイザ1は、OS1がハング中か否かを判断するステップS909。ハング中である場合ステップS909:Yes、ハイパーバイザ1は、OS1のウォームスタートを実行しステップS910、エラー時の処理を終了する。具体的なウォームスタートの方法としては、チェックポイントリスタート技術や、ハイバネーション技術を適用することができる。ハング中でない場合ステップS909:No、ハイパーバイザ1は、カーネル1にマルチコアプロセッサシステム100の一時停止解除を通知しステップS911、エラー時の処理を終了する。一時停止解除を受け付けたカーネル1は、マルチコアプロセッサシステム100の一時停止を解除しステップS912、エラー時の処理を終了する。このように、マルチコアプロセッサシステム100は、不正書込によるメモリ破壊が原因で高信頼アプリにエラーが発生した場合、データを復元し動作を続行することができる。以上説明したように、マルチコアプロセッサシステムによれば、高信頼アプリがアクセスする第1メモリ領域とは異なる第2メモリ領域を確保し、同一の内容を書き込む。これにより、マルチコアプロセッサシステムは、低信頼アプリが第1メモリ領域を破壊し障害が発生しても第2メモリ領域を使用してリカバリできるため、高信頼アプリと低信頼アプリを混載して実行できる。また、本実施の形態にかかるマルチコアプロセッサシステムが実行するソフトウェア保護方法は、シングルコアプロセッサシステムでのソフトウェア資産を、安全にマルチコアプロセッサシステム環境に継承することができる。また、本実施の形態にかかるマルチコアプロセッサシステムは、通常動作状態において、たとえば、高信頼アプリ実行中に低信頼アプリを実行させないなどといった、バイアスのかかった不利なスケジューリングが発生することなく運用することができる。また、本実施の形態にかかるマルチコアプロセッサシステムは、障害が発生した場合にリカバリ処理が発生し、通常動作状態では負荷のかかる処理を実行しないため、全体のパフォーマンスが劣化することはない。また、マルチコアプロセッサシステムは、所定のアプリを格納するリストにアクセス可能であり、実行されるアプリとリストに格納されたアプリとを比較してもよい。これにより、マルチコアプロセッサシステムは、実行されるアプリが高信頼アプリか否かを判断することができる。また、マルチコアプロセッサシステムは、実行されるアプリとリストに格納されたアプリが一致する場合、第1メモリ領域と第2メモリ領域とにアクセスするようにアプリを実行するCPUに対応するメモリプロテクトコントローラに登録してもよい。これにより、マルチコアプロセッサシステムは、高信頼アプリのデータを保護することができる。また、マルチコアプロセッサシステムは、実行されるアプリとリストに格納されたアプリが一致しない場合、第1メモリ領域にアクセスするようにアプリを実行するCPUに対応するメモリプロテクトコントローラに登録してもよい。これにより、マルチコアプロセッサシステムは、データの保護を行わなくてよい低信頼アプリについてはデータを保護せず、データ保護用に確保したプロテクト領域を有効に使用することができる。また、マルチコアプロセッサシステムは、自システムの異常検出に応答して、第1メモリ領域と第2メモリ領域との比較結果に基づいて第1メモリ領域を復元してもよい。これにより、マルチコアプロセッサシステムは、障害があったアプリをリカバリすることができる。また、マルチコアプロセッサシステムは、マルチコアプロセッサシステム環境での動作検証が行われたアプリを高信頼アプリとして保護してもよい。低信頼のアプリは、第1メモリ領域を自ら破壊してしまう場合があり、このとき、メモリプロテクトコントローラによって第2メモリ領域にデータを保護していても、第2メモリ領域も破壊する結果となる。この状態で、第1メモリ領域のデータを復元しても、破壊されたデータで上書きされてしまい、マルチコアプロセッサシステムは、リカバリすることができない。したがって、マルチコアプロセッサシステムは、不具合がないと検証された高信頼アプリを対象とすることで、低信頼アプリの動作によって発生した高信頼アプリの障害をリカバリすることができる。なお、本実施の形態で説明したマルチコアプロセッサシステムが実行するソフトウェア保護方法では、対象がアプリである場合に対して説明していたが、対象がライブラリであっても本実施の形態を適用することができる。なお、本実施の形態で説明したマルチコアプロセッサシステムが実行するソフトウェア保護方法は、予め用意されたプログラムをパーソナルコンピュータやワークステーション等のコンピュータで実行することにより実現することができる。また、ソフトウェア保護方法を実行するソフトウェア保護プログラムは、ハードディスク、CD-ROM、DVD、メモリカード等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またソフトウェア保護プログラムは、インターネット等のネットワークを介して配布してもよい。また、本実施の形態で説明したメモリプロテクトコントローラ106は、スタンダードセルやストラクチャードASICApplicationSpecificIntegratedCircuitなどの特定用途向けIC以下、単にASICと称す。やFPGAなどのPLDProgrammableLogicDeviceによっても実現することができる。具体的には、たとえば、上述したメモリプロテクトコントローラ106の機能記憶部401~変換部403をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、メモリプロテクトコントローラ106を製造することができる。