(57)【要約】【課題】スナップショット処理を短時間で行う。【解決手段】不揮発性メモリと、不揮発性メモリよりアクセス速度が速い揮発性メモリとを有し、揮発性メモリには不揮発性メモリのデータ領域の少なくとも一部のデータが記憶されるメインメモリと、メインメモリ内のデータの読み出しと書き込みを要求するプロセッサと、プロセッサからの要求を処理するメモリコントローラとを有し、メモリコントローラは、読み出し要求に応答して、揮発性メモリから読み出し要求に対応するデータを読み出し、書き込み要求に応答して、揮発性メモリ内の書き込み要求に対応する領域に書き込みデータを書き込むと共に、不揮発性メモリに前記書き込みの履歴を順次書き込み、スナップショット要求に応答して、履歴のスナップショット時までの書込位置を前記不揮発性メモリ内に記録し、スナップショットの後、履歴内の書込位置の書き込みデータを不揮発性メモリのデータ領域に書き込むデータ復元処理を行う、情報処理装置。【選択図】図３
2018018363.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリと、前記不揮発性メモリよりアクセス速度が速い揮発性メモリとを有し、前記揮発性メモリには前記不揮発性メモリのデータ領域の少なくとも一部のデータが記憶されるメインメモリと、
前記メインメモリ内のデータの読み出しと書き込みを要求するプロセッサと、
前記プロセッサからの要求を処理するメモリコントローラとを有し、
前記メモリコントローラは、
読み出し要求に応答して、前記揮発性メモリから前記読み出し要求に対応するデータを読み出し、
書き込み要求に応答して、前記揮発性メモリ内の前記書き込み要求に対応する領域に書き込みデータを書き込むと共に、前記不揮発性メモリに前記書き込みの履歴を順次書き込み、
スナップショット要求に応答して、前記履歴のスナップショット時までの書込位置を前記不揮発性メモリ内に記録するスナップショット処理を行い、
前記スナップショット処理の後、前記履歴内の前記書込位置の書き込みデータを前記不揮発性メモリのデータ領域に書き込むデータ復元処理を行う、情報処理装置。
【請求項２】
前記メモリコントローラは、
前記スナップショット処理後に電源遮断した後に動作復帰するとき、前記揮発性メモリ内のデータをクリアすると共に前記不揮発性メモリ内の前記スナップショット後の前記書き込みの履歴をクリアし、
前記読み出し要求に応答して、前記不揮発性メモリのデータ領域の前記読み出し要求のアドレスのデータを前記揮発性メモリ内に書き込むと共に前記プロセッサにデータ応答する、請求項１に記載の情報処理装置。
【請求項３】
前記履歴は書き込みアドレスと書き込みデータを含み、
前記メモリコントローラは、前記データ復元処理において、前記履歴内の前記書き込みアドレスに基づき前記書き込みデータを前記不揮発性メモリのデータ領域に書き込む、請求項１または２に記載の情報処理装置。
【請求項４】
前記不揮発性メモリは、前記書き込みの履歴を記憶するログメモリ領域を有し、
前記ログメモリ領域の複数のエントリそれぞれには、各書き込みアドレスと書き込みデータと、さらに前記スナップショット時までの書込位置を示すマークビットとが記録され、
前記スナップショット時における最新の書込位置のエントリ内の前記マークビットが、最新を示す値に変更される、請求項３に記載の情報処理装置。
【請求項５】
前記メモリコントローラは、
前記書き込み要求に応答して、前記ログメモリ領域内のエントリに前記書き込みの履歴を順番に記憶し、
前記スナップショット処理において、前記スナップショット時における最新の書込位置のエントリ内の前記マークビットを、最新を示す値に変更し、
前記データ復元処理において、前記最新を示す値に変更された前記マークビットのエントリまで、前記エントリ内の書き込みデータを読み出して前記不揮発性メモリのデータ領域に書き込む、請求項４に記載の情報処理装置。
【請求項６】
前記ログメモリ領域は、さらに、前記エントリ内の履歴の読み出し位置を示すリードポインタを記憶し、
前記データ復元処理において、前記エントリ内の書き込みデータを読み出して前記不揮発性メモリのデータ領域に書き込む度に、前記リードポインタを更新し、
前記データ復元処理を、前記リードポインタのエントリから前記マークビットのエントリまで行う、請求項５に記載の情報処理装置。
【請求項７】
前記メモリコントローラは、
前記読み出し要求に応答して、前記揮発性メモリ内に前記読み出し要求に対応するデータが記憶されている場合前記揮発性メモリ内のデータを読み出し、記憶されていない場合前記不揮発性メモリのデータ領域のデータを読み出し前記揮発性メモリ内に読み出しデータを書き込む、請求項１に記載の情報処理装置。
【請求項８】
前記メモリコントローラは、
前記書き込み要求に応答して、前記揮発性メモリに前記書き込み要求のアドレスのデータが記憶されている場合前記揮発性メモリのデータに前記書き込みデータを上書きし、記憶されていない場合前記不揮発性メモリのデータ領域のデータを読み出し前記揮発性メモリに読み出しデータを書き込みさらに前記書き込みデータを上書きする、請求項７に記載の情報処理装置。
【請求項９】
前記メモリコントローラは、
前記書き込み要求の処理において、前記揮発性メモリ内の前記書き込みデータを上書きしたブロックにダーティビットを記録し、
前記読み出し要求及び書き込み要求の処理において、前記不揮発性メモリのデータ領域から読み出したデータを前記揮発性メモリ内に書き込むとき、前記ダーティビットが記録されてないエントリに書き込む、請求項８に記載の情報処理装置。
【請求項１０】
不揮発性メモリと、前記不揮発性メモリよりアクセス速度が速い揮発性メモリとを有し、前記揮発性メモリには前記不揮発性メモリのデータ領域の少なくとも一部のデータが記憶されるメインメモリと、前記メインメモリ内のデータの読み出しと書き込みを要求するプロセッサとを有する情報処理装置の、前記プロセッサからの要求を処理するメモリコントローラであって、
読み出し要求に応答して、前記揮発性メモリから前記読み出し要求に対応するデータを読み出し、
書き込み要求に応答して、前記揮発性メモリ内の前記書き込み要求に対応する領域に書き込みデータを書き込むと共に、前記不揮発性メモリに前記書き込みの履歴を順次書き込み、
スナップショット要求に応答して、前記履歴のスナップショット時までの書込位置を前記不揮発性メモリ内に記録するスナップショット処理を行い、
前記スナップショット処理の後、前記履歴内の前記書込位置の書き込みデータを前記不揮発性メモリのデータ領域に書き込むデータ復元処理を行う、メモリコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，情報処理装置及びメモリコントローラに関する。
【背景技術】
【０００２】
情報処理装置であるコンピュータは、CPU（Central Processing Unit、以下プロセッサ）と、CPUにバスを介して接続されるメインメモリと、CPUにバスを介して接続される入出力デバイスなどを有する。そして、入出力デバイスには、外部の大容量の補助メモリが接続され、また、外部のネットワークが接続される。
【０００３】
メインメモリには補助メモリ内のプログラムやデータが記憶され、プロセッサはメインメモリに頻繁にアクセスして、プログラム命令の読み出しや、データの読み出し及び書き込みを実行する。そのため、メインメモリのアクセス速度は高速であることが求められる。
【０００４】
一方、高速性を求められるメインメモリとして、一般に使用されるのはDRAM(Dynamic Random Access Memory)や、SRAM（Static Random Access Memory）である。DRAM、SRAMのアクセス速度は高速であるが、電源がオフになるとデータが消失する揮発性メモリ（Volatile Memory）である。
【０００５】
大容量の補助メモリは、HDD（Hard Disk Drive）やフラッシュメモリからなるSSD（Solid State Drive）が使用される。これらの補助メモリは、大容量であるが、アクセス速度が遅く、プロセッサに最も近い位置に配置されるメインメモリとしては不向きである。
【０００６】
近年、DRAMやSRAMとHDDやSSDとの間のアクセス速度を有する不揮発性メモリが開発されてきた。例えば、PCM（Phase Change RAM）、ReRAM（Resistive RAM）、MRAM（Magneto Resistive RAM）などである。これらの不揮発性メモリは、電源をオフにしてもデータが消失せず、DRAM,SRAMより廉価であるが、DRAM,SRAMの揮発性メモリよりはアクセス速度が遅い。
【０００７】
プロセッサとメインメモリを有するコンピュータにおいて、高速の揮発性メモリと低速だが大容量で不揮発性の不揮発性メモリとを組み合わせたメモリを使用することが提案されている。例えば、以下の特許文献などである。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】国際公開第２００６／０９３２０１号
【特許文献２】特開２００５−２３５１８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
一方、突発的な故障により電源が遮断された場合のメインメモリ内のデータの保存と電源復帰後のデータの復元を可能にするために、所定のタイミングでメインメモリ内のデータのスナップショットが作成される。その場合、メインメモリであるDRAM内の全データを不揮発性メモリに複写することは長時間を要する。また、スナップショット作成のためにアプリケーションプログラムが複雑な処理を制御する必要がある。
【００１０】
そこで，本開示の第１の側面の目的は，メモリ内のデータのスナップショットの取得を高速化した情報処理装置及びメモリコントローラを提供することにある。
【課題を解決するための手段】
【００１１】
本開示の第１の側面は，不揮発性メモリと、前記不揮発性メモリよりアクセス速度が速い揮発性メモリとを有し、前記揮発性メモリには前記不揮発性メモリのデータ領域の少なくとも一部のデータが記憶されるメインメモリと、前記メインメモリ内のデータの読み出しと書き込みを要求するプロセッサと、前記プロセッサからの要求を処理するメモリコントローラとを有し、
前記メモリコントローラは、読み出し要求に応答して、前記揮発性メモリから前記読み出し要求に対応するデータを読み出し、書き込み要求に応答して、前記揮発性メモリ内の前記書き込み要求に対応する領域に書き込みデータを書き込むと共に、前記不揮発性メモリに前記書き込みの履歴を順次書き込み、スナップショット要求に応答して、前記履歴のスナップショット時までの書込位置を前記不揮発性メモリ内に記録するスナップショット処理を行い、
前記スナップショット処理の後、前記履歴内の前記書込位置の書き込みデータを前記不揮発性メモリのデータ領域に書き込むデータ復元処理を行う、情報処理装置である。
【発明の効果】
【００１２】
第１の側面によれば，スナップショットの取得を高速化することができる。
【図面の簡単な説明】
【００１３】
【図１】情報処理装置の構成例を示す図である。
【図２】不揮発性メモリでメインメモリを構成した情報処理装置の例を示す図である。
【図３】本実施の形態における情報処理装置の構成を示す図である。
【図４】本実施の形態における情報処理装置の別の構成例を示す図である。
【図５】揮発性タグメモリTAGと揮発性データメモリV_DMEMの構成例を示す図である。
【図６】不揮発性ログメモリNV_LGMEMの構成例を示す図である。
【図７】プロセッサからのメモリアクセス要求（読み出し要求と書き込み要求）に応答して動作する第１のメモリコントローラMC1の処理を示すフローチャート図である。
【図８】第２のメモリコントローラMC2の処理を示すフローチャート図である。
【図９】プロセッサからのスナップショット要求時の第１のスナップショットコントローラSSC1の動作を示すフローチャート図である。
【図１０】第２のスナップショットコントローラSSC2の動作を示すフローチャート図である。
【図１１】具体例の動作シーケンスを示す図である。
【図１２】状態STATE_0、STATE_1でのタグ、揮発性データメモリ、不揮発性ログメモリ、不揮発性データメモリを示す図である。
【図１３】動作シーケンスSEQ1を示すシーケンス図である。
【図１４】動作シーケンスSEQ2を示すシーケンス図である。
【図１５】動作シーケンスSEQ2後の状態STATE_2を示す図である。
【図１６】動作シーケンスSEQ3を示すシーケンス図である。
【図１７】動作シーケンスSEQ3後の状態STATE_3を示す図である。
【図１８】動作シーケンスSEQ4を示すシーケンス図である。
【図１９】動作シーケンスSEQ4後の状態STATE_4を示す図である。
【図２０】シーケンスSEQ5の動作を示すシーケンス図である。
【図２１】シーケンスSEQ5のスナップショット作成指示後でありデータ復元処理である書き込みデータの複写が完了した場合の状態STATE_5Aを示す図である。
【図２２】シーケンスSEQ5のスナップショット作成指示後でありデータ復元処理である書き込みデータの複写が未完了の場合の状態STATE_5Bを示す図である。
【図２３】電源起動後動作が復帰後の初期化処理後の状態STATE_6を示す図である。
【発明を実施するための形態】
【００１４】
図１は、情報処理装置の構成例を示す図である。プロセッサCPUは、メモリバスM_BUSを介してメインメモリMEMに接続される。プロセッサCPUからのメインメモリMEMに対する読み出し要求や書き込み要求（両要求をメモリアクセス要求と称する。）に対するメインメモリへのアクセス処理を行うメモリコントローラが、プロセッサCPU内またはプロセッサCPUのパッケージ内に設けられる。
【００１５】
また、プロセッサCPUは、PCIバスなどのI/OバスI/O_BUSを介してネットワーク用及びストレージ用のI/Oデバイスが接続され、それらを経由してイーサーネットなどの外部のネットワークNETや、HDD、SDDなどの大容量の不揮発性のストレージSTにアクセス可能である。
【００１６】
本実施の形態における情報処理装置は、図１のプロセッサCPUとメインメモリMEMとを有する。情報処理装置は、不測の故障により電源が遮断されるなどその動作が遮断されることがある。そのような不測の故障が発生しても故障から復帰した後メインメモリ内のデータを復元できるようにするため、情報処理装置は定期的にメインメモリ内のデータのスナップショット（データのコピー）を取得する。具体的には、アプリケーションプログラムが、所定のタイミングでスナップショットを取得する命令を有し、そのアプリケーションプログラムを実行するプロセッサが、所定のタイミングでスナップショットの取得を実行する。
【００１７】
プロセッサは、例えば配列データに対する演算処理が完了するなどのタイミングでスナップショットを取得する。そして、不測の故障が発生後に故障から復帰するとき、プロセッサは、故障発生の直前（最近）のスナップショットのデータをメインメモリに復元するとともに、スナップショット後の処理からアプリケーションプログラムの実行を再開する。したがって、スナップショットのタイミングは、復帰後の動作再開に適したタイミングが選択される。
【００１８】
メインメモリMEMは、DRAMやSRAMなどの揮発性メモリで構成されるのが一般的であるが、今後、不揮発性メモリ（PCM、ReRAM、MRAMなど）で構成されることが予測される。
【００１９】
図２は、不揮発性メモリでメインメモリを構成した情報処理装置の例を示す図である。図２の左側に示した情報処理装置の例は、プロセッサCPUと、不揮発性メモリNV_MEMで構成されたメインメモリとを有する。この場合、プロセッサからの書き込みデータは常に不揮発性メモリに保存されるので、アプリケーションプログラムはスナップショットを実行しなくても、不測の故障から復帰した際メインメモリ内には故障時のデータが保存されている。しかし、故障時にプログラムがどこまで実行済みかを知ることができないと、復帰後に中断した動作を継続することはできない。また、不揮発性メモリは一般に揮発性メモリよりアクセス速度が遅いので、プロセッサによるメモリアクセス時間は長時間になる。
【００２０】
そこで、アプリケーションプログラムが所定のタイミングでスナップショットを実行すると、不揮発性メモリ内のデータをすべて外部のストレージやネットワークの先のサーバに退避させる必要がある。しかし、不揮発性メモリのアクセス速度は遅いので、スナップショットに長時間を要する。
【００２１】
図２の右側に示した情報処理装置の例は、プロセッサCPUと、揮発性メモリV_MEM及び不揮発性メモリNV_MEMで構成されるメインメモリとを有する。プロセッサCPUは、通常動作では揮発性メモリV_MEMに対してメモリアクセスを実行し、所定のタイミングでスナップショットを実行する場合、スナップショットコントローラSSCに揮発性メモリV_MEM内のデータを不揮発性メモリNV_MEMに複写する。したがって、アプリケーションプログラムはスナップショットの為に複雑な処理を行う必要はない。しかし、不揮発性メモリのアクセス速度が遅いため、スナップショットにおいて揮発性メモリ内のデータを不揮発性メモリに複写する時間が長くなる。
【００２２】
［本実施の形態］
図３は、本実施の形態における情報処理装置の構成を示す図である。図３の情報処理装置は、不揮発性メモリNV_MEMと不揮発性メモリよりアクセス速度が速い揮発性メモリV_MEM（V_DMEM）とを有するメインメモリ（NV_MEMとV_MEMを有する）と、メインメモリ内のデータの読み出しと書き込みを要求するプロセッサCPUとを有する。さらに、プロセッサからの要求を処理するメモリコントローラMCを有する。そして、揮発性メモリのデータメモリ領域V_DMEMには不揮発性メモリのデータ領域NV_DMEMの少なくとも一部のデータが記憶される。
【００２３】
メモリコントローラMCは、プロセッサからの読み出し要求と書き込み要求についてメインメモリに対してアクセス制御を行うメモリコントローラMC1,MC2と、プロセッサからのスナップショットの要求についてその制御を行うスナップショットコントローラSSC1,SSC2とを有する。
【００２４】
メモリコントローラMCは、プロセッサCPUと共に同じパッケージPKG内に格納されている。但し、メモリコントローラMCがプロセッサCPUのチップ内に内蔵されていてもよい。または、メモリコントローラMCがプロセッサと別のパッケージ内に格納されていてもよい。
【００２５】
また、揮発性メモリV_MEMは、データを記憶する揮発性データメモリV_DMEMとタグTAGを有する。一方、不揮発性メモリNV_MEMは、データを記憶するデータ領域の不揮発性データメモリNV_DMEMと、書き込みの履歴を記憶する不揮発性ログメモリNV_LGMEMとを有する。揮発性データメモリV_DMEMとタグTAGは、同じ揮発性メモリV_MEMのチップ内に設けられても良く、異なるチップであっても良い。同様に、不揮発性データメモリNV_DMEMと不揮発性ログメモリNV_LGMEMとは、同じ不揮発性メモリNV_MEMのチップ内に設けられても良く、異なるチップであってもよい。また、不揮発性ログメモリNV_LGMEMが不揮発性データメモリNV_DMEMの記憶領域内に設けられていても良い。
【００２６】
次に、プロセッサによる読み出し要求、書き込み要求、スナップショット要求、スナップショット処理後の電源遮断後での電源起動による復帰動作について説明する。
【００２７】
第一に、メモリコントローラは、メインメモリに対する読み出し要求と書き込み要求を、高速アクセスが可能な揮発性メモリV_MEMに対して行う。読み出しアドレスまたは書き込みアドレスのデータが揮発性メモリ内に記憶されている場合、メモリコントローラは、読み出しでは揮発性メモリ内のデータを読み出しプロセッサにデータ応答し、書き込みでは揮発性メモリ内のデータに書き込みデータを上書きする。データが揮発性メモリ内に記憶されていない場合、メモリコントローラは、読み出しでは不揮発性メモリNV_MEM内からデータを読み出し揮発性メモリV_MEM内に記憶しプロセッサにデータ応答する。また、書き込みでは不揮発性メモリNV_MEM内からデータを読み出し揮発性メモリV_MEM内に記憶し揮発性メモリ内のデータに書き込みデータを上書きする。
【００２８】
つまり、揮発性メモリと不揮発性メモリとは、キャッシュメモリとメインメモリとの関係に類似し、不揮発性メモリ内のデータの少なくとも一部が揮発性メモリに記憶されている。メモリコントローラは、メモリアクセス要求をもっぱら揮発性メモリV_MEMに対して行うので、高速アクセスが可能になる。
【００２９】
第二に、メモリコントローラは、書き込み要求の場合、前述の揮発性メモリ内のデータに書き込みデータを上書きすることに加えて、不揮発性メモリの不揮発性ログメモリNV_LGMEMに書き込みの履歴（書き込みアドレスと書き込みデータ）を書き込む。つまり、スナップショット間の全ての書込みの履歴が不揮発性ログメモリ内に順次書き込まれる。また、書き込み要求では、不揮発性メモリの不揮発性データメモリNV_DMEMには書き込みデータは書き込まれない。
【００３０】
第三に、メモリコントローラは、スナップショット要求の場合、スナップショット要求までに書き込まれた履歴の位置を不揮発性メモリ内に記録するスナップショット処理を行う。好ましくは、スナップショット要求の直前の履歴の位置を記録する。具体的には後述するマークビットにより記録する。このスナップショット処理は、非常に短時間で終了するので、アプリケーションプログラムは長時間動作を中断されることはない。
【００３１】
第四に、メモリコントローラは、スナップ処理後に、不揮発性ログメモリ内の書込みの履歴の書き込みアドレスに基づいて履歴の書き込みデータを不揮発性データメモリに書き込む。この書き込みは、プロセッサがアプリケーションプログラムを実行中に、バックグランドで行うことができる。
【００３２】
第五に、故障による電源遮断後に電源起動して動作が復帰するとき、不揮発性データメモリ内にはスナップショットまでの書き込み履歴の書き込みデータが復元され、電源遮断により揮発性メモリ内のデータは全てクリアされている。そこで、動作が復帰するとき、不揮発性データメモリ内のスナップショット後の書込みの履歴がクリアされる。これにより、動作が復帰する場合、最後に実行したスナップショットのタイミングから再開することができる。さらに、その後の書込み動作や読み出し動作で、タグミスに伴い不揮発性データメモリ内の少なくとも一部のデータが揮発性メモリ内に書き込まれる。この動作はキャッシュ登録と類似する。そのため、揮発性メモリには揮発性データメモリV_DMEM内の各ブロックのアドレスと有効ビットを記憶するタグ領域TAGが設けられる。
【００３３】
電源遮断後に電源起動して動作が復帰するとき、OSは不揮発性メモリ内の書き込み履歴のマークビットをチェックし書き込み履歴のデータが全て不揮発性メモリのデータ領域内に復元されているか確認する。未復元の場合、マークビットの位置まで書き込み履歴の書き込みデータが不揮発性メモリのデータ領域内に書き込まれ、スナップショット時のデータが復元される。
【００３４】
第１の実施の形態において、プロセッサによるメモリアクセスの処理と、スナップショットの処理及びスナップショット後の処理については、後述する図７乃至図１０に示される。
【００３５】
［第２の実施の形態］
図４は、本実施の形態における情報処理装置の別の構成例を示す図である。図４の構成例では、メモリコントローラMCの４つのコントローラMC1,MC2,SSC1,SSC2が図３の例とは異なる位置に設けられている。
【００３６】
図４において、プロセッサCPUを搭載する第１のパッケージPKG1は、主に読み出し動作と書き込み動作を制御する第１のメモリコントローラMC1と、スナップショット処理を制御する第１のスナップショットコントローラSSC1とを搭載する。また、第２のパッケージPKG2は、読み出しと書き込み時に揮発性データメモリV_DMEM内にアドレスのデータが記憶されていない場合に不揮発性データメモリNV_DMEM内のアドレスのデータを読み出し揮発性データメモリに書き込む（登録）制御を行う第２のメモリコントローラMC2を搭載する。さらに、第２のパッケージPKG2は、スナップショット処理後に、不揮発性ログメモリNV_LGMEM内の書込み履歴の書き込みデータを不揮発性データメモリNV_DMEMにコピーする制御を行う第２のスナップショットコントローラSSC2を搭載する。
【００３７】
但し、４つのコントローラMC1,MC2,SSC1,SSC2は、図３のようにプロセッサCPUと同じパッケージ内に搭載されてもよいし、プロセッサCPUのチップ内に埋め込まれて構成されてもよい。
【００３８】
図５は、揮発性タグメモリTAGと揮発性データメモリV_DMEMの構成例を示す図である。揮発性データメモリV_DMEMは、そのアドレスVADDに対応してデータが記憶される複数のブロックBLKを有する。一方、揮発性タグメモリTAGは、そのインデックスが揮発性データメモリのアドレスVADDに対応している。各インデックスのエントリには、揮発性データメモリ内に記憶されているデータに対応するメインメモリのアドレス（不揮発性データメモリNV_DMEMのアドレスNVADD）が記憶される。また、そのエントリが有効か否かを示すバリッドビットVと、そのエントリのデータに書き込みが行われたか否かを示すダーティビットDも記憶される。
【００３９】
揮発性データメモリが記憶可能なデータの容量は、好ましくは不揮発性データメモリの容量より小さい。または、高々不揮発性データメモリの容量と等しい。揮発性メモリはアクセス速度が不揮発性メモリより高速であるが、ビット当たりの価格は高い。したがって、好ましくは、揮発性データメモリのデータ容量は不揮発性データメモリよりも小さい。
【００４０】
図６は、不揮発性ログメモリNV_LGMEMの構成例を示す図である。不揮発性ログメモリは、スナップショット間に発生する書き込みを格納可能な程度のエントリ数を有する。図６の例では、インデックスが０−ｎであり総エントリ数はｎ＋１である。
【００４１】
各エントリには、書き込みアドレスに対応する不揮発性データメモリNV_DMEMのアドレスNVADDと、書き込みデータDATAと、マークビットMと、バリッドビットVとが記憶される。但し、後述するとおりバリッドビットVは必ずしも記憶される必要はない。
【００４２】
複数のエントリ以外に、ライトポインタWPTRとリードポインタRPTRを記憶する領域を有する。ライトポインタWPTRは、書き込みが発生したときにそのアドレスと書き込みデータを記憶するエントリ位置を示す。また、リードポインタRPTRは、スナップショット処理後において、不揮発性データメモリに書き込みデータを複写する時に不揮発性ログメモリから書き込みアドレスと書き込みデータを読み出すエントリ位置を示す。
【００４３】
ライトポインタWPTRとリードポインタRPTRは初期値がともに０であり、書き込みが発生して不揮発性ログメモリに書き込みが行われるとライトポインタが更新され、スナップショット処理後に不揮発性データメモリへの書き込みデータの複写が行われるとリードポインタが更新される。正常動作では、ライトポインタが先に順次更新され、スナップショット処理後にリードポインタが順次更新される。
【００４４】
マークビットMは、M=1の位置がスナップショット要求時の直前に書き込みの履歴が書き込まれたエントリ位置を示すように利用される。つまり、スナップショット処理では、スナップショットコントローラが、直前の書込みの履歴が書き込まれたエントリのマークビットをM=1に変更する。この処理は短時間で完了する。
【００４５】
また、バリッドビットVは、各エントリの履歴が有効か否かを示し、書き込み時に履歴が書き込まれるとV=1に変更され、スナップショット処理後に書き込みの履歴の書き込みデータが不揮発性データメモリに書き込まれるとV=0に変更される。
【００４６】
図７は、プロセッサからのメモリアクセス要求（読み出し要求と書き込み要求）に応答して動作する第１のメモリコントローラMC1の処理を示すフローチャート図である。
【００４７】
［読み出し処理］
まず、メモリアクセス要求が読み出し要求の場合(S1のNO)、第1のメモリコントローラは、揮発性メモリのタグTAGを検索し有効な読み出しアドレスNVADDのエントリが存在するか否か（タグhitか否か）チェックする（S2,S3）。存在する場合（S3のYES）、第1のメモリコントローラは、揮発性データメモリV_DMEMからデータを読み出し（S4）、プロセッサCPUにリードリプライする（S5）。
【００４８】
存在しない場合（S3のNO）、第1のメモリコントローラは第２のメモリコントローラMC2に不揮発性データメモリNV_DMEM内の読み出しアドレスNVADDのデータを読み出す指示をする（S6）。この指示に応答して、第２のメモリコントローラは、不揮発性データメモリからデータを読み出し、読み出したデータを揮発性データメモリV_DMEM内に書き込む。そして、第1のメモリコントローラは、読み出されたデータでプロセッサCPUにリードリプライする（S5）。
【００４９】
図８は、第２のメモリコントローラMC2の処理を示すフローチャート図である。第２のメモリコントローラは、指示されたアドレスNVADDのデータを不揮発性データメモリから読み出し（S20）、読み出したデータを揮発性データメモリに書き込みタグにそのアドレスを書き込む。すなわち、第２のメモリコントローラは、揮発性メモリ内のタグに無効のエントリ（バリッドビットV=0）が存在するかチェックし（S21）、存在する場合（S21のYES）、タグのエントリにバリッドビットV=1とアドレスNVADDを設定し(S22)、揮発性データメモリV_DMEM内の前述のエントリに対応するブロックにデータを書き込む（S23）。そして、第1のメモリコントローラにリプライする（S24）。
【００５０】
一方、V=0のエントリが存在しない場合（S21のNO）、第２のメモリコントローラは、読み出しデータの入れ替え対象のエントリを検索する。すなわち、第２のメモリコントローラは、タグにダーティビットがD=0のエントリ（未書き込みエントリ）が存在するかチェックし（S25）、存在する場合（S25のYES）、ダーティビットがD=0のエントリを一つ選び、そのエントリにアドレスNVADDを書き込む（S26）。そして、そのエントリに対応する揮発性データメモリのエントリに読み出したデータを書き込む（S23）。この結果、そのエントリが新しいデータに入れ替えられる。
【００５１】
つまり、書き込みデータはスナップショット処理で初めて不揮発性ログメモリNV_LGMEMから不揮発性データメモリNV_DMEMに複写され、通常のメモリアクセスでは書き込みデータは揮発性データメモリV_DMEM内に止まり不揮発性データメモリに複写されないことが必要である。したがって、揮発性データメモリのブロックを入れ替える場合、ダーティビットがD=1のブロックを入れ回対象にすることはできない。ダーティビットD=1の書き込み済みブロックを入れ替え対象にすると、入れ替えによりその書込み済みデータが消失し、その後の読み出し要求で書き込み済みデータを揮発性データメモリから読み出すことができなくなるからである。
【００５２】
もしタグにダーティビットがD=0のエントリが存在しない場合、メモリ不足エラーとなり、OSによる例外処理になる(S27)。前述の理由から、揮発性メモリはスナップショット間の書込みデータを記憶する容量に加えて、書き込みを伴わない読み出しデータを記憶する容量を要するように設計される。しかし、D=0のエントリが存在しない場合、書き込みデータの数が多すぎてメモリ不足になる。
【００５３】
上記の例外処理では、例えば後述するスナップショット処理のように不揮発性ログメモリ内の書き込みデータを全てまたは一部不揮発性データメモリに複写し、タグと揮発性メモリを全てクリアするかまたは複写したエントリのダーティビットをD=0に更新することが行われる。
【００５４】
［書込み処理］
図７に戻り、メモリアクセス要求が書き込み要求の場合（S1のNO）、第1のメモリコントローラは不揮発性ログメモリ内に書込みの履歴（書き込みアドレスと書き込みデータ）を記憶し、同時に揮発性データメモリにも書き込みデータを書き込む。
【００５５】
すなわち、第１のメモリコントローラは、不揮発性ログメモリNV_LGMEMのライトポインタWPTRのエントリに、V=1、書き込みアドレスNVADD、書き込みデータDATAを書き込み、ライトポインタWPTRを更新（＋１）する（S10）。さらに、揮発性データメモリV_DMEMにも書き込みデータを書き込む（S14）。
【００５６】
ライトポインタを更新したとき、ライトポインタWPTRがリードポインタRPTRと等しくなると（S11）、未だ不揮発性データメモリに複写されていないエントリ（リードポインタが示すエントリ）にライトポインタが追いついたことを意味し、書き込み履歴を記憶するメモリ不足エラーとなる（S17）。この場合、OSは例外処理を実行するが、その処理は前述の例外処理S27と同様の処理を行いリードポインタを進める。
【００５７】
次に、第1のメモリコントローラは、揮発性メモリのタグTAGを検索し有効な書込みアドレスNVADDのエントリが存在するか否か（タグhitか否か）チェックする（S12,S13）。存在する場合（S13のYES）、第1のメモリコントローラは、揮発性データメモリV_DMEMのタグhitしたエントリのブロックに書き込みデータを書き込み（S14）、対応するタグのダーティビットをD=1（書き込み済み）にセットする（S15）。
【００５８】
存在しない場合（S13のNO）、第1のメモリコントローラは第２のメモリコントローラMC2に不揮発性データメモリNV_DMEM内の書き込みアドレスNVADDのデータを読み出す指示をする（S16）。この指示に応答して、第２のメモリコントローラは、図８で説明したように、不揮発性データメモリからデータを読み出し（図８のS20）、読み出したデータを揮発性データメモリV_DMEM内の対応するエントリに書き込む（図８のS23）。そして、第1のメモリコントローラは、揮発性データメモリV_DMEMのデータが書き込まれたエントリに書き込みデータを上書きし（S14）、対応するタグのダーティビットをD=1（書き込み済み）にセットする（S15）。
【００５９】
第２のメモリコントローラは、タグmiss（S13のNO）に対応して、揮発性メモリのタグ内にV=0のエントリまたはV=1だがD=0のエントリを見つけて、そのエントリに読み出しアドレスNVADDを書込み（S22,S26）、揮発性データメモリに不揮発性データメモリから読み出したデータを書き込む（S23）。
【００６０】
上記の通り、プロセッサからのメモリアクセスでは、メモリコントローラは、揮発性データメモリからデータを読み出し、揮発性データメモリにデータを書き込む。また、揮発性データメモリにメモリアクセスのアドレスのデータがない場合、不揮発性データメモリ内のデータを揮発性データメモリに登録する。この処理により、不揮発性データメモリのデータの少なくとも一部のデータが揮発性データメモリに記憶される。さらに、書き込み要求の場合、メモリコントローラは、揮発性データメモリに加えて不揮発性ログメモリに書き込みアドレスとデータの履歴を記憶する。
【００６１】
［スナップショット］
図９は、プロセッサからのスナップショット要求時の第１のスナップショットコントローラSSC1の動作を示すフローチャート図である。第１のスナップショットコントローラSSC1は、不揮発性ログメモリ内のライトポインタWPTRが示すエントリのマークビットMをM=1にセットする（S31）。これがスナップショット処理である。プロセッサが実行するアプリケーションプログラムは、スナップショット処理でマークビットM=1のセットが完了すると、実行中の処理に復帰できるので、実行中の処理の中断時間（スナップショットに要する時間）は短時間である。
【００６２】
そして、第1のスナップショットコントローラは、第２のスナップショットコントローラSSC2に、不揮発性ログメモリ内のリードポインタRPTRからマークビットM＝1までのエントリのデータの揮発性データメモリへの書き込み（複写）を指示する（S31）。
【００６３】
図１０は、第２のスナップショットコントローラSSC2の動作を示すフローチャート図である。図9のSSC1からの書き込み指示に応答して、第２のスナップショットコントローラは、不揮発性ログメモリ内のリードポインタが示すエントリの情報（書き込みアドレスNVADD、書き込みデータDATA、マークビットM）を読み出す（S40）。そして、不揮発性データメモリ内の書き込みアドレスNVADDのブロックに書き込みデータDATAを書き込み、不揮発性ログメモリ内のバリッドビットをV=0に更新し、揮発性メモリのタグTAGのダーティビットをD=0に更新する（S41）。不揮発性データメモリにバリッドビットを使用しない場合はV=0の更新は不要である。
【００６４】
上記の工程S40,S41は、リードポインタが示すエントリからマークビットがM=1のエントリまで繰り返される。したがって、現在の不揮発性ログメモリ内のエントリのマークビットがM=1でなければ（S42のNO）、第２のスナップショットコントローラは、リードポインタRPTRを＋１更新し（S43）、リードポインタがライトポインタに追いついてなければ（RPTR＝WPTRではない、S44のNO）、工程S40からの処理を繰り返す。リードポインタは、図6に示される通りRPTR＝0からnまで更新されると０に戻るので、更新後のリードポインタの位置は、RPTR＝（RPTR+1）mod(n+1)と、更新後の値（RPTR+1)を(n+1)で除した余り値になる。リードポインタがライトポインタに追いついたことは、スナップショット処理でマークビットM＝1が適切にセットされなかったマーク不備エラーである（S47）。
【００６５】
一方、マークビットM=1までのエントリの書き込みデータを不揮発性データメモリに複写完了すると、そのエントリのマークビットがM=1であるので（S42）、第２のスナップショットコントローラは、リードポインタを更新し（S45）、そのマークビットをM=0にクリアする（S46）。マークビットがM=0にクリアされると、書き込みデータの複写が完了したことを意味する。
【００６６】
図１０の第２のスナップショットコントローラによる不揮発性ログメモリ内のリードポインタからマークビットM=1までの書き込みデータの不揮発性データメモリへの複写が正常に終了した場合、スナップショットまでに書き込まれたデータは全て、不揮発性データメモリ内に複写されたことを意味する。
【００６７】
もし、図１０の複写処理中に故障などにより電源が遮断して書き込みデータの複写が完了していない場合、不揮発性ログメモリはリードポインタ以降にマークビットがM=1のエントリが残ったままの状態になっている。そこで、電源起動して動作復帰後に、OSは不揮発性ログメモリにおいてマークビットがM=1のエントリがあるか否かチェックし、M=1がある場合は複写未完了であるので、不揮発性ログメモリ内のリードポインタからマークビットM=1のエントリまでの書き込みデータを不揮発性データメモリに複写する動作を継続する。
【００６８】
［電源遮断後の電源起動後の復帰動作］
最後に、故障などにより電源遮断して、その後電源起動後動作に復帰した際のOSによる復帰動作を説明する。まず、OSはマークビットがM=1のエントリがあるかチェックし、なければ、図１０の書き込みデータの不揮発性データメモリへの複写が正常に終了したことを意味する。その場合、OSは、揮発性データメモリとタグをクリアし、不揮発性ログメモリ内のリードポインタ以降のライトポインタのひとつ前までのエントリの履歴もクリアする。不揮発性ログメモリ内には、マークビットM=1より後のエントリに別の書き込みが記憶された状態で電源遮断することがある。その場合、電源遮断時直前のスナップショットのタイミング後の動作からその動作を再開するために、スナップショットより後の書き込み履歴の書き込みデータを削除（クリア）する。
【００６９】
一方、マークビットがM=1のエントリがある場合、図１０の書き込みデータの不揮発性データメモリへの複写が正常に終了していないことを意味する。その場合、OSは、復帰時のリードポインタからマークビットM=1のエントリまでの書き込みデータの不揮発性データメモリへの複写を継続し、完了後にマークビットをM=0にクリアする。そして、前述と同様に、揮発性データメモリとタグをクリアし、不揮発性ログメモリ内のリードポインタ以降のエントリの書込み履歴もクリアし、電源遮断時直前のスナップショットのタイミングのメインメモリの状態に復元し、スナップショット後の動作からその動作を再開する。
【００７０】
なお、図１０において、マークビットをM=0にクリアする処理S46を行うことを説明したが、M=1までの書き込みデータの複写完了後にM=0にクリアせず、電源遮断後の動作復帰時に、リードポインタRPTRがマークビットM=1の次のエントリを指していたら、書き込みデータの不揮発性データメモリへの複写が正常に終了したと判断するようにしても良い。一方、リードポインタRPTRが示すエントリがM=1のエントリ以前であれば、複写が未完了で電源遮断したと判断するようにしても良い。複写未完了の場合は、前述のとおり複写を継続する。複写完了の場合と、複写未完了の場合にその後複写を完了した場合、マークビットをM=0にクリアする。
【００７１】
さらに、リードポインタRPTRからライトポインタWPTRの一つ前までが不揮発性データメモリへの複写が完了していない有効なエントリであることを意味するので、不揮発性ログメモリのバリッドビットVを省略しても良い。
【００７２】
[本実施の形態における動作の具体例]
次に、本実施の形態の情報処理装置のメモリアクセスとスナップショット及び復帰後の動作の具体例を説明する。
【００７３】
図１１は、具体例の動作シーケンスを示す図である。シーケンスSEQ1-SEQ5の動作は以下の通りである。
SEQ1：状態STATE_0でのNVADD=5への読み出し動作R、タグヒット発生例
SEQ2：状態STATE_1でのNVADD=6への読み出し動作R、タグミス発生例
SEQ3：状態STATE_2でのNVADD=1への書き込み動作W、タグヒット発生例
SEQ4：状態STATE_3でのNVADD=2への書き込み動作W、タグミス発生例
SEQ5：状態STATE_4でのスナップショット作成指示、複写完了例と未完了例
SEQ6：電源遮断後の電源起動後の動作再開動作
【００７４】
図１２は、状態STATE_0、STATE_1でのタグ、揮発性データメモリ、不揮発性ログメモリ、不揮発性データメモリを示す図である。状態STATE_0では、不揮発性メモリ内のタグは全てのエントリがV=1であり、そのうちNVADD=3のエントリは書き込み済みを示すダーティビットD=1である。また、不揮発性ログメモリではインデックス０がV=1であり、書き込みの履歴としてNVADD=3と書き込みデータ0x0003が記憶されている。その結果、ライトポインタWPTRは「１」に更新されている。
【００７５】
図１３は、動作シーケンスSEQ1を示すシーケンス図である。第1のメモリコントローラMC1は、読み出しアドレスNVADD=5に基づいてタグTAGを検索し（S2）、タグヒットし（S3のYES）、揮発性データメモリV_DMEMのNVADD=5のエントリのデータを読み出し（S4）、プロセッサCPUにデータ応答する（S5）。したがって、動作シーケンスSEQ1が終了後の状態STATE_1は最初の状態STATE_0と同じである。
【００７６】
図１４は、動作シーケンスSEQ2を示すシーケンス図である。また、図１５は動作シーケンスSEQ2後の状態STATE_2を示す図である。第1のメモリコントローラMC1は、読み出しアドレスNVADD=6に基づいてタグTAGを検索し（S2）、タグミスし（S3のNO）、第２のメモリコントローラMC2に不揮発性データメモリへの読み出しを指示する（S6）。
【００７７】
これに応答して、第２のメモリコントローラMC2は、不揮発性データメモリNV_DMEMからデータを読み出す（S20）。さらに、第２のメモリコントローラMC2は、タグTAGのバリッドビットV=0（無効）のエントリを検索し（S21）、ミスしたため（S21のNO）、タグTAGのダーティビットD=0（未書き込み）のエントリを検索し（S25）、ヒットする（S25のYES）。そこで、ヒットしたエントリの一つを選択して、選択したエントリのアドレスを読み出しアドレスNVADD=6で書き換え（S23）、第1のメモリコントローラにデータ応答する（S24）。さらに、第1のメモリコントローラがプロセッサCPUにデータ応答する（S5）。
【００７８】
その結果、図１５の状態STATE_2では、揮発性メモリのタグTAGの２番目のエントリのアドレスNVADDがNVADD=6に書き換えられ、揮発性データメモリの同じエントリのデータが0x0006に書き換えられている。
【００７９】
図１６は、動作シーケンスSEQ3を示すシーケンス図である。また、図１７は動作シーケンスSEQ3後の状態STATE_3を示す図である。第１のメモリコントローラは、不揮発性ログメモリにV=1、書き込み履歴（書き込みアドレスNVADD=1、書き込みデータDATA＝0x0001）を書き込み、ライトポインタを＋１更新する（S10）。そして、アドレスNVADD=1でタグを検索し（S12）、ヒットし（S13のYES）、書き込みデータDATA＝0x0001をヒットしたエントリの揮発性データメモリのエントリに書き込み（S14）、タグのダーティビットをD=1に変更する（S15）。
【００８０】
その結果、図１６の状態STATE_3では、タグTAGのNVADD=1のエントリがD=1に、揮発性データメモリ内の同じエントリに書き込みデータDATA＝0x0001が書き込まれ、揮発性ログメモリのインデックス１にその書き込みアドレスNVADD=1とデータDATA＝0x0001が記録され、ライトポインタが「２」に更新されている。
【００８１】
次に、図１８は、動作シーケンスSEQ4を示すシーケンス図である。また、図１９は動作シーケンスSEQ4後の状態STATE_4を示す図である。第１のメモリコントローラは、不揮発性ログメモリにV=1、書き込み履歴（書き込みアドレスNVADD=1、書き込みデータDATA＝0x0002）を書き込み、ライトポインタを＋１更新する（S10）。そして、アドレスNVADD=2でタグを検索し（S12）、ミスし（S13のNO）、第２のメモリコントローラに不揮発性データメモリ内のNVADD=2のデータの取得を指示する（S16）。
【００８２】
そこで、第２のメモリコントローラは、不揮発性データメモリのデータ読み出しを行い（S20）、データDATA＝0x0000を読み出す。さらに、第２のメモリコントローラは、タグTAGのV=0を検索し（S21）ミスし、さらに、タグTAGのD=0を検索し（S25）ヒットする。そして、ヒットしたエントリの一つを選択し、そのタグのエントリのアドレスを書き込みアドレスNVADD=2で書き換え（S26）、揮発性メモリの同じエントリのデータを読み出しデータDATA＝0x0000で書き換える（S23）。
【００８３】
その後、第1のメモリコントローラは、揮発性データメモリの同じエントリのデータを書き込みデータDATA=0x0002で書き換え（S14）、さらにタグTAGの同じエントリのダーティビットをD=1に変更する（S15）。
【００８４】
その結果、図１９の状態STATE_4では、タグTAGの２番目のエントリのアドレスがNVADD=2に書き替えられ、そのエントリのダーティビットがD=1に変更され、揮発性データメモリ内の同じエントリに書き込みデータDATA＝0x0002が書き込まれている。また、揮発性ログメモリのインデックス２にその書き込みアドレスNVADD=2とデータDATA＝0x0002が記憶され、ライトポインタが「0」に更新されている。
【００８５】
図２０は、シーケンスSEQ5の動作を示すシーケンス図である。第1のスナップショットコントローラは、揮発性ログメモリのライトポインタWPTRが示すエントリのマークビットをM=1にセットする（S30）。これでスナップショット処理は完了する。
【００８６】
マークビットM=1をライトポインタWPTRのエントリに記録する代わりに、スナップショットまでの書き込み履歴の位置情報として、スナップショット要求時のリードポインタRPTRとライトポインタWPTRを記録するようにしてもよい。つまり、リードポインタからライトポインタまでがスナップショットまでの書き込み履歴が記憶された位置情報である。また、リードポインタはデータ復元処理まで更新されないので、スナップショット要求時のライトポインタWPTRの値を記録するようにしてもよい。この場合、スナップショットまでの書き込み履歴の位置情報を記憶する記憶領域が、不揮発性ログメモリ内に設けられる。
【００８７】
次に、第２のスナップショットコントローラにリードポインタRPTRが示すエントリからマークビットM=1のエントリまでの書き込み履歴のデータを不揮発性データメモリに書き込む指示をする（S31）。これがデータ復元処理である。
【００８８】
スナップ処理後のデータ復元処理に入り、第２のスナップショットコントローラは、不揮発性ログメモリのリードポインタ（RPTR=0）が示すエントリの書き込み履歴（書き込みアドレスNVADD=3とデータDATA=0x003）を読み出す（S40）。そして、不揮発性データメモリ内の書き込みアドレスに書き込みデータを書き込み、不揮発性ログメモリのエントリのバリッドビットをV=0に、タグTAGの同じ書き込みアドレスのダーティビットをD=0に更新し（S41）、リードポインタを＋１更新する(RPTR=1)（S43）。
【００８９】
次に、第２のスナップショットコントローラは、不揮発性ログメモリのリードポインタ（RPTR=1）が示すエントリの書き込み履歴（書き込みアドレスNVADD=1とデータDATA=0x001）を読み出す（S40）。そして、前述と同様に不揮発性データメモリへの書き込みデータの書き込み、不揮発性ログメモリのバリッドビットをV=0に、タグのダーティビットをD=0に更新し（S41）、リードポインタを＋１更新してRPTR=2にする（S43）。
【００９０】
さらに、第２のスナップショットコントローラは、リードポインタRPTR=2の書き込み履歴について上記と同様の処理を行う。その結果、リードポインタのマークビットがM=1を示し、リードポインタを更新し（S45）、マークビットをM=0にクリアする（S46）。
【００９１】
図２１は、シーケンスSEQ5のスナップショット作成指示後でありデータ復元処理である書き込みデータの複写が完了した場合の状態STATE_5Aを示す図である。不揮発性ログメモリ内の矢印が示す３つの書き込みデータが全て不揮発性データメモリに複写され、タグの３つのダーティビットがD=0に更新され、不揮発性ログメモリ内のインデックス２のマークビットがM=0にクリアされ、リードポインタRPTRが０に更新されている。このような状態STATE_5Aで電源が遮断され、その後電源起動し動作復帰されると、不揮発性ログメモリ内にマークビットM=1が存在しないので、OSは電源遮断直前のスナップショット時までの書き込みデータの不揮発性ログメモリから不揮発性データメモリへの複写が完了したことを検出する。
【００９２】
図２２は、シーケンスSEQ5のスナップショット作成指示後でありデータ復元処理である書き込みデータの複写が未完了の場合の状態STATE_5Bを示す図である。不揮発性ログメモリ内の３つの書き込みデータのうちインデックス０のみが不揮発性データメモリに複写され、矢印が示す残りのインデックス１、２の書き込みデータが複写される前に電源遮断した状態である。その結果、インデックス２のマークビットM=1が残ったままになっている。このような状態STATE_5Bで電源が遮断され、その後電源起動し動作復帰されると、不揮発性ログメモリ内にマークビットM=1が存在するので、OSは直前のスナップショット時の書き込みデータの複写が未完了だったことを検出する。
【００９３】
そして、OSは、第２のスナップショットコントローラに、リードポインタRPTR=1からマークビットM=1までの書き込みデータの不揮発性データメモリへの複写を指示する。その結果、図２１の状態STATE_5Bの状態になる。
【００９４】
図２３は、電源起動後動作が復帰後の初期化処理後の状態STATE_6を示す図である。第一に、初期化処理では、タグTAGが全てクリアされ全てのバリッドビットがV=0(無効)にされ、ダーティビットがD=0にされ、その結果、揮発性データメモリのデータも全てクリアされる。また、不揮発性ログメモリ内のマークビットがM=1だったエントリの後（リードポインタの位置）からライトポインタWPTRまでの書き込みデータもクリアされる。この場合、マークビットがM=1だったエントリまでの書き込みデータは不揮発性データメモリに複写された結果、バリッドビットは無効（V=0）になっているので、結局、不揮発性ログメモリ内の全ての書き込みデータがクリアされても良い。
【００９５】
図２の右側の情報処理装置と本実施の形態とを比較すると、図２の場合、不揮発性メモリのデータ書き込み速度がT[byte/s]、プロセッサCPUによるデータの平均書き込み速度をW[byte/s]、スナップショットの平均間隔をt[s]とし、スナップショットを取得しない場合のアプリケーションプログラムの実行速度を１とすると、両者のアプリケーション実行速度は、次のとおりである。
図２の右の情報処理装置：t/{t+(tW/T)}
本実施の形態の情報処理装置：≒１
なぜなら、図２の場合、スナップショット間に書き込まれるデータ量がtW[byte]であり、それをスナップショット時の不揮発性メモリに書き込む時間はtW/T[s]となる。その結果、スナップショットの平均間隔時間ｔ毎にスナップショットのための書込み時間tW/T[s]が追加されるので、情報処理装置のアプリケーション実行速度は、t/{t+(tW)/T}[s]となる。一方で、本実施の形態では、スナップショットに要する時間は実質０であるので、そのアプリケーション実行速度はスナップショットを取得しない場合のアプリケーション速度１と実質同じである。
【００９６】
以上の通り、本実施の形態によれば、書き込みを揮発性データメモリに行い書き込みの履歴を不揮発性ログメモリに記憶する。また、読み出しと書込みを揮発性データメモリに対して行い、揮発性データメモリにアクセスアドレスのデータが存在しない場合、不揮発性データメモリ内のデータを揮発性データメモリに登録し、そのデータを読み出しまたはそのデータに書き込む。そして、スナップショット時の処理では、不揮発性ログメモリ内の最近記憶された書き込みの履歴のエントリ位置にマークビットM=1を記録する。したがって、スナップショットの処理時間が短く、これによりその後電源が遮断しても、元のメインメモリのデータを復元可能な情報が不揮発性メモリ内に残される。そして、スナップショット処理後に、マークビットM=1までの書き込み履歴に基づいて書き込みデータを不揮発性データメモリに複写する。
【００９７】
このように揮発性メモリと不揮発性メモリを組み合わせてメインメモリとして使用することで、スナップショットの処理時間を短くし、予測してない電源遮断後においてスナップショットまでのデータを復元することができる。
【００９８】
以上の実施の形態をまとめると，次の付記のとおりである。
【００９９】
（付記１）
不揮発性メモリと、前記不揮発性メモリよりアクセス速度が速い揮発性メモリとを有し、前記揮発性メモリには前記不揮発性メモリのデータ領域の少なくとも一部のデータが記憶されるメインメモリと、
前記メインメモリ内のデータの読み出しと書き込みを要求するプロセッサと、
前記プロセッサからの要求を処理するメモリコントローラとを有し、
前記メモリコントローラは、
読み出し要求に応答して、前記揮発性メモリから前記読み出し要求に対応するデータを読み出し、
書き込み要求に応答して、前記揮発性メモリ内の前記書き込み要求に対応する領域に書き込みデータを書き込むと共に、前記不揮発性メモリに前記書き込みの履歴を順次書き込み、
スナップショット要求に応答して、前記履歴のスナップショット時までの書込位置を前記不揮発性メモリ内に記録するスナップショット処理を行い、
前記スナップショット処理の後、前記履歴内の前記書込位置の書き込みデータを前記不揮発性メモリのデータ領域に書き込むデータ復元処理を行う、情報処理装置。
【０１００】
（付記２）
前記メモリコントローラは、
前記スナップショット処理後に電源遮断した後に動作復帰するとき、前記揮発性メモリ内のデータをクリアすると共に前記不揮発性メモリ内の前記スナップショット後の前記書き込みの履歴をクリアし、
前記読み出し要求に応答して、前記不揮発性メモリのデータ領域の前記読み出し要求のアドレスのデータを前記揮発性メモリ内に書き込むと共に前記プロセッサにデータ応答する、付記１に記載の情報処理装置。
【０１０１】
（付記３）
前記履歴は書き込みアドレスと書き込みデータを含み、
前記メモリコントローラは、前記データ復元処理において、前記履歴内の前記書き込みアドレスに基づき前記書き込みデータを前記不揮発性メモリのデータ領域に書き込む、付記１または２に記載の情報処理装置。
【０１０２】
（付記４）
前記不揮発性メモリは、前記書き込みの履歴を記憶するログメモリ領域を有し、
前記ログメモリ領域の複数のエントリそれぞれには、各書き込みアドレスと書き込みデータと、さらに前記スナップショット時までの書込位置を示すマークビットとが記録され、
前記スナップショット時における最新の書込位置のエントリ内の前記マークビットが、最新を示す値に変更される、付記３に記載の情報処理装置。
【０１０３】
（付記５）
前記メモリコントローラは、
前記書き込み要求に応答して、前記ログメモリ領域内のエントリに前記書き込みの履歴を順番に記憶し、
前記スナップショット処理において、前記スナップショット時における最新の書込位置のエントリ内の前記マークビットを、最新を示す値に変更し、
前記データ復元処理において、前記最新を示す値に変更された前記マークビットのエントリまで、前記エントリ内の書き込みデータを読み出して前記不揮発性メモリのデータ領域に書き込む、付記４に記載の情報処理装置。
【０１０４】
（付記６）
前記ログメモリ領域は、さらに、前記エントリ内の履歴の読み出し位置を示すリードポインタを記憶し、
前記データ復元処理において、前記エントリ内の書き込みデータを読み出して前記不揮発性メモリのデータ領域に書き込む度に、前記リードポインタを更新し、
前記データ復元処理を、前記リードポインタのエントリから前記マークビットのエントリまで行う、付記５に記載の情報処理装置。
【０１０５】
（付記７）
前記メモリコントローラは、
前記読み出し要求に応答して、前記揮発性メモリ内に前記読み出し要求に対応するデータが記憶されている場合前記揮発性メモリ内のデータを読み出し、記憶されていない場合前記不揮発性メモリのデータ領域のデータを読み出し前記揮発性メモリ内に読み出しデータを書き込む、付記１に記載の情報処理装置。
【０１０６】
（付記８）
前記メモリコントローラは、
前記書き込み要求に応答して、前記揮発性メモリに前記書き込み要求のアドレスのデータが記憶されている場合前記揮発性メモリのデータに前記書き込みデータを上書きし、記憶されていない場合前記不揮発性メモリのデータ領域のデータを読み出し前記揮発性メモリに読み出しデータを書き込みさらに前記書き込みデータを上書きする、付記７に記載の情報処理装置。
【０１０７】
（付記９）
前記メモリコントローラは、
前記書き込み要求の処理において、前記揮発性メモリ内の前記書き込みデータを上書きしたブロックにダーティビットを記録し、
前記読み出し要求及び書き込み要求の処理において、前記不揮発性メモリのデータ領域から読み出したデータを前記揮発性メモリ内に書き込むとき、前記ダーティビットが記録されてないエントリに書き込む、付記８に記載の情報処理装置。
【０１０８】
（付記１０）
前記メモリコントローラと前記プロセッサは、共通のパッケージ内に格納される、付記１に記載の情報処理装置。
【０１０９】
（付記１１）
前記メモリコントローラは、前記プロセッサ内に形成されている、付記１に記載の情報処理装置。
【０１１０】
（付記１２）
不揮発性メモリと、前記不揮発性メモリよりアクセス速度が速い揮発性メモリとを有し、前記揮発性メモリには前記不揮発性メモリのデータ領域の少なくとも一部のデータが記憶されるメインメモリと、前記メインメモリ内のデータの読み出しと書き込みを要求するプロセッサとを有する情報処理装置の、前記プロセッサからの要求を処理するメモリコントローラであって、
読み出し要求に応答して、前記揮発性メモリから前記読み出し要求に対応するデータを読み出し、
書き込み要求に応答して、前記揮発性メモリ内の前記書き込み要求に対応する領域に書き込みデータを書き込むと共に、前記不揮発性メモリに前記書き込みの履歴を順次書き込み、
スナップショット要求に応答して、前記履歴のスナップショット時までの書込位置を前記不揮発性メモリ内に記録するスナップショット処理を行い、
前記スナップショット処理の後、前記履歴内の前記書込位置の書き込みデータを前記不揮発性メモリのデータ領域に書き込むデータ復元処理を行う、メモリコントローラ。
【符号の説明】
【０１１１】
CPU：Central Processing Unit、プロセッサ
MEM：メモリ
M_BUS：メモリバス
I/O_BUS：I/Oバス
I/O：入出力デバイス
ST：補助メモリ、ストレージ
V_MEM：揮発性メモリ
NV_MEM：不揮発性メモリ
TAG：タグ
V_DMEM：揮発性データメモリ
NV_LGMEM：不揮発性ログメモリ
NV_DMEM：不揮発性データメモリ
VADD：揮発性データメモリのアドレス
NVADD：不揮発性データメモリのアドレス
V：バリッドビット
D：ダーティビット
DATA：データ
MC1,MC2：メモリコントローラ
SSC1,SSC2：スナップショットコントローラ
【図１】
2018018363.tif 000003
【図２】
2018018363.tif 000004
【図３】
2018018363.tif 000005
【図４】
2018018363.tif 000006
【図５】
2018018363.tif 000007
【図６】
2018018363.tif 000008
【図７】
2018018363.tif 000009
【図８】
2018018363.tif 000010
【図９】
2018018363.tif 000011
【図１０】
2018018363.tif 000012
【図１１】
2018018363.tif 000013
【図１２】
2018018363.tif 000014
【図１３】
2018018363.tif 000015
【図１４】
2018018363.tif 000016
【図１５】
2018018363.tif 000017
【図１６】
2018018363.tif 000018
【図１７】
2018018363.tif 000019
【図１８】
2018018363.tif 000020
【図１９】
2018018363.tif 000021
【図２０】
2018018363.tif 000022
【図２１】
2018018363.tif 000023
【図２２】
2018018363.tif 000024
【図２３】
2018018363.tif 000025